diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 38c5fff..c6b3df8 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -17,6 +17,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(IS_CLANG_CL TRUE) set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-imsvc") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-old-style-cast -Wno-reserved-id-macro -Wno-c++98-compat-pedantic -funwind-tables -fopenmp -static-openmp -Wl,--no-merge-exidx-entries") +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384") add_compile_options(-fsigned-char) # Suppress all warnings @@ -1351,4 +1352,11 @@ target_link_libraries(slic3r PRIVATE boost_wave boost_wserialization ${OCCT_LIBS} -) \ No newline at end of file +) + +if(ANDROID) + target_link_options(slic3r PRIVATE + "-Wl,-z,common-page-size=16384" + "-Wl,-z,max-page-size=16384" + "-Wl,--rosegment") +endif() diff --git a/app/build.gradle b/app/build.gradle index 45df293..a6db261 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ android { applicationId "com.dark98.santoku" minSdk 21 targetSdk 35 - versionCode 8 + versionCode 1 versionName "0.0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -50,6 +50,8 @@ android { } } debug { + applicationIdSuffix ".debug" + resValue "string", "AppName", "Santoku (Debug)" buildConfigField "String", "COMMIT", "\"" + commit + "\"" ndk { debugSymbolLevel 'NONE' @@ -67,7 +69,7 @@ android { cmake { path file('CMakeLists.txt') } - ndkVersion "23.1.7779620" + ndkVersion "29.0.14206865" } buildFeatures { @@ -76,7 +78,9 @@ android { applicationVariants.all { variant -> variant.outputs.all { - outputFileName = "Santoku_" + commit + ".apk" + def isDebug = variant.buildType.name == "debug" + def suffix = isDebug ? "_debug" : "" + outputFileName = "Santoku_" + commit + suffix + ".apk" } } } @@ -151,6 +155,8 @@ def toolchainFile = "${ndkDir}/build/cmake/android.toolchain.cmake" def wslExe = "${System.getenv("SystemRoot") ?: "C:/Windows"}/System32/wsl.exe" def prebuiltTag = isWindows ? "windows-x86_64" : (isMac ? "darwin-x86_64" : "linux-x86_64") def llvmBinDir = "${ndkDir}/toolchains/llvm/prebuilt/${prebuiltTag}/bin" +def pageSizeLinkerFlags = "-Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384" +def forceNativeRebuild = project.hasProperty("forceNativeRebuild") && project.property("forceNativeRebuild").toString().toLowerCase() == "true" def tbbSrc = "${rootDir}/third_party/openvdb-android/tbb-aarch64" def tbbBuildArm64 = "${rootDir}/third_party/openvdb-android/build-tbb-android-21-arm64" @@ -287,6 +293,7 @@ tasks.register("patchBoostForAndroid") { tasks.register("buildTbbArm64") { dependsOn("ensureThirdParty") onlyIf { + forceNativeRebuild || !file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbb.a").exists() || !file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbbmalloc.a").exists() || !file("${projectDir}/src/main/jniLibs/arm64-v8a/libtbb.so").exists() || @@ -304,6 +311,7 @@ tasks.register("buildTbbArm64") { "-DANDROID_PLATFORM=android-21", "-DANDROID_STL=c++_shared", "-DCMAKE_BUILD_TYPE=Release", + "-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}", "-DCMAKE_INSTALL_PREFIX=${tbbInstallArm64}", "-DTBB_BUILD_TESTS=Off" } @@ -316,6 +324,7 @@ tasks.register("buildTbbArm64") { tasks.register("buildTbbArmv7") { dependsOn("ensureThirdParty") onlyIf { + forceNativeRebuild || !file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbb.a").exists() || !file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbbmalloc.a").exists() || !file("${projectDir}/src/main/jniLibs/armeabi-v7a/libtbb.so").exists() || @@ -333,6 +342,7 @@ tasks.register("buildTbbArmv7") { "-DANDROID_PLATFORM=android-21", "-DANDROID_STL=c++_shared", "-DCMAKE_BUILD_TYPE=Release", + "-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}", "-DCMAKE_INSTALL_PREFIX=${tbbInstallArmv7}", "-DTBB_BUILD_TESTS=Off" } @@ -345,6 +355,7 @@ tasks.register("buildTbbArmv7") { tasks.register("copyTbbArm64", Copy) { dependsOn("buildTbbArm64") onlyIf { + forceNativeRebuild || !file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbb.a").exists() || !file("${projectDir}/src/main/jniImports/oneTBB/lib/arm64-v8a/libtbbmalloc.a").exists() || !file("${projectDir}/src/main/jniLibs/arm64-v8a/libtbb.so").exists() || @@ -383,6 +394,7 @@ tasks.register("copyTbbArm64", Copy) { tasks.register("copyTbbArmv7", Copy) { dependsOn("buildTbbArmv7") onlyIf { + forceNativeRebuild || !file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbb.a").exists() || !file("${projectDir}/src/main/jniImports/oneTBB/lib/armeabi-v7a/libtbbmalloc.a").exists() || !file("${projectDir}/src/main/jniLibs/armeabi-v7a/libtbb.so").exists() || @@ -504,7 +516,7 @@ tasks.register("copyBoostHeaders", Copy) { tasks.register("buildOcctArm64") { dependsOn("ensureThirdParty") - onlyIf { !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() } + onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() } doLast { exec { commandLine cmakeExe, "-G", "Ninja", @@ -516,6 +528,7 @@ tasks.register("buildOcctArm64") { "-DANDROID_PLATFORM=android-21", "-DCMAKE_BUILD_TYPE=Release", "-DBUILD_LIBRARY_TYPE=Shared", + "-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}", "-DINSTALL_DIR_LIB=libs/arm64-v8a", "-DINSTALL_DIR_INCLUDE=inc", "-DBUILD_DOC_Overview=OFF", @@ -533,7 +546,7 @@ tasks.register("buildOcctArm64") { tasks.register("buildOcctArmv7") { dependsOn("ensureThirdParty") - onlyIf { !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() } + onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() } doLast { exec { commandLine cmakeExe, "-G", "Ninja", @@ -545,6 +558,7 @@ tasks.register("buildOcctArmv7") { "-DANDROID_PLATFORM=android-21", "-DCMAKE_BUILD_TYPE=Release", "-DBUILD_LIBRARY_TYPE=Shared", + "-DCMAKE_SHARED_LINKER_FLAGS=${pageSizeLinkerFlags}", "-DINSTALL_DIR_LIB=libs/armeabi-v7a", "-DINSTALL_DIR_INCLUDE=inc", "-DBUILD_DOC_Overview=OFF", @@ -562,7 +576,7 @@ tasks.register("buildOcctArmv7") { tasks.register("copyOcctArm64", Copy) { dependsOn("buildOcctArm64") - onlyIf { !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() } + onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/arm64-v8a/libTKDESTEP.so").exists() } from("${occtDistArm64}/libs/arm64-v8a") { include "*.so" } @@ -571,7 +585,7 @@ tasks.register("copyOcctArm64", Copy) { tasks.register("copyOcctArmv7", Copy) { dependsOn("buildOcctArmv7") - onlyIf { !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() } + onlyIf { forceNativeRebuild || !file("${projectDir}/src/main/occt/jniLibs/armeabi-v7a/libTKDESTEP.so").exists() } from("${occtDistArmv7}/libs/armeabi-v7a") { include "*.so" } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..5f280df 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,8 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +# Keep cloud API and SAPIL runtime proxies. +-keep class com.dark98.santoku.cloud.** { *; } +-keep class ru.ytkab0bp.sapil.** { *; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index acff79c..23f96d6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/icon" + android:icon="@mipmap/ic_launcher" android:label="@string/AppName" android:supportsRtl="true" android:theme="@style/Theme.Santoku" @@ -59,7 +59,7 @@ diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..3dd0731 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/dark98/santoku/SetupActivity.java b/app/src/main/java/com/dark98/santoku/SetupActivity.java index b2d4df7..f66e58a 100644 --- a/app/src/main/java/com/dark98/santoku/SetupActivity.java +++ b/app/src/main/java/com/dark98/santoku/SetupActivity.java @@ -898,9 +898,14 @@ public class SetupActivity extends AppCompatActivity { Toast.makeText(ctx, R.string.SettingsCloudManageSignUpMissingFields, Toast.LENGTH_SHORT).show(); return; } + CloudAPI api = CloudController.getApiSafe(); + if (api == null) { + Toast.makeText(ctx, R.string.SettingsCloudManageSignUpFailed, Toast.LENGTH_SHORT).show(); + return; + } signUpInProgress = true; bindLoginButton(true); - CloudAPI.INSTANCE.signup(email, password, displayName, new APICallback() { + api.signup(email, password, displayName, new APICallback() { @Override public void onResponse(CloudAPI.AuthToken response) { Prefs.setCloudAPIToken(response.bearer); diff --git a/app/src/main/java/com/dark98/santoku/boot/EventBusTask.java b/app/src/main/java/com/dark98/santoku/boot/EventBusTask.java index 3dae4bc..2dfc66e 100644 --- a/app/src/main/java/com/dark98/santoku/boot/EventBusTask.java +++ b/app/src/main/java/com/dark98/santoku/boot/EventBusTask.java @@ -6,7 +6,13 @@ import com.dark98.santoku.BuildConfig; public class EventBusTask extends BootTask { public EventBusTask() { - super(() -> EventBus.registerImpl(BuildConfig.APPLICATION_ID)); + super(() -> { + String appId = BuildConfig.APPLICATION_ID; + if (BuildConfig.DEBUG && appId.endsWith(".debug")) { + appId = appId.substring(0, appId.length() - ".debug".length()); + } + EventBus.registerImpl(appId); + }); onWorker(); } } diff --git a/app/src/main/java/com/dark98/santoku/cloud/CloudAPI.java b/app/src/main/java/com/dark98/santoku/cloud/CloudAPI.java index cda45fd..b693522 100644 --- a/app/src/main/java/com/dark98/santoku/cloud/CloudAPI.java +++ b/app/src/main/java/com/dark98/santoku/cloud/CloudAPI.java @@ -38,6 +38,11 @@ public interface CloudAPI extends APIRunner { } return headers; } + + @Override + public ru.ytkab0bp.sapil.util.Pair getNamingTransformPolicy() { + return null; + } }); /** diff --git a/app/src/main/java/com/dark98/santoku/cloud/CloudController.java b/app/src/main/java/com/dark98/santoku/cloud/CloudController.java index a7488d3..f43bb0a 100644 --- a/app/src/main/java/com/dark98/santoku/cloud/CloudController.java +++ b/app/src/main/java/com/dark98/santoku/cloud/CloudController.java @@ -51,7 +51,14 @@ public class CloudController { private static Runnable loginCheck = new Runnable() { @Override public void run() { - CloudAPI.INSTANCE.loginCheck(loginSessionId, new APICallback() { + CloudAPI api = getApiSafe(); + if (api == null) { + loginSessionId = null; + isLoggingIn = false; + Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent()); + return; + } + api.loginCheck(loginSessionId, new APICallback() { @Override public void onResponse(CloudAPI.LoginState response) { if (response.loggedIn) { @@ -77,6 +84,15 @@ public class CloudController { private static Gson gson = new Gson(); + public static CloudAPI getApiSafe() { + try { + return CloudAPI.INSTANCE; + } catch (Throwable t) { + Log.e(TAG, "Cloud API unavailable", t); + return null; + } + } + public static void initCached() { if (Prefs.getCloudAPIToken() != null) { if (Prefs.getCloudCachedUserInfo() != null) { @@ -101,7 +117,11 @@ public class CloudController { } private static void loadUserInfo() { - CloudAPI.INSTANCE.userGetInfo(new APICallback() { + CloudAPI api = getApiSafe(); + if (api == null) { + return; + } + api.userGetInfo(new APICallback() { @Override public void onResponse(CloudAPI.UserInfo response) { userInfo = response; @@ -145,7 +165,13 @@ public class CloudController { } private static void beginLogin0() { - beginLoginHandle = CloudAPI.INSTANCE.loginBegin(new APICallback() { + CloudAPI api = getApiSafe(); + if (api == null) { + isLoggingIn = false; + Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent()); + return; + } + beginLoginHandle = api.loginBegin(new APICallback() { @Override public void onResponse(CloudAPI.LoginData response) { loginSessionId = response.sessionId; @@ -172,7 +198,10 @@ public class CloudController { isLoggingIn = false; Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent()); if (loginSessionId != null) { - CloudAPI.INSTANCE.loginCancel(loginSessionId, response -> {}); + CloudAPI api = getApiSafe(); + if (api != null) { + api.loginCancel(loginSessionId, response -> {}); + } } if (beginLoginHandle != null && beginLoginHandle.isRunning()) { beginLoginHandle.cancel(); @@ -184,7 +213,10 @@ public class CloudController { } public static void logout() { - CloudAPI.INSTANCE.logout(response -> {}); + CloudAPI api = getApiSafe(); + if (api != null) { + api.logout(response -> {}); + } Prefs.setCloudAPIToken(null); userInfo = null; Santoku.EVENT_BUS.fireEvent(new CloudLoginStateUpdatedEvent()); @@ -204,7 +236,12 @@ public class CloudController { } private static void downloadData(long lastModified) { - CloudAPI.INSTANCE.syncGet(new APICallback() { + CloudAPI api = getApiSafe(); + if (api == null) { + isSyncInProgress = false; + return; + } + api.syncGet(new APICallback() { @Override public void onResponse(String response) { IOUtils.IO_POOL.submit(() -> { @@ -251,11 +288,15 @@ public class CloudController { if (isSyncInProgress) { return; } + CloudAPI api = getApiSafe(); + if (api == null) { + return; + } long modified = Prefs.getCloudLocalLastModified(); isSyncInProgress = true; Santoku.EVENT_BUS.fireEvent(new NeedSnackbarEvent(SnackbarsLayout.Type.LOADING, R.string.CloudSyncInProgress).tag(CLOUD_SYNC_TAG)); - CloudAPI.INSTANCE.syncGetState(new APICallback() { + api.syncGetState(new APICallback() { @Override public void onResponse(CloudAPI.SyncState response) { if (Santoku.CONFIG == null && response.usedSize != 0) { @@ -324,7 +365,12 @@ public class CloudController { bos.close(); fis.close(); - CloudAPI.INSTANCE.syncUpload(Base64.encodeToString(bos.toByteArray(), Base64.NO_WRAP), "application/ini", new APICallback() { + CloudAPI api = getApiSafe(); + if (api == null) { + isSyncInProgress = false; + return; + } + api.syncUpload(Base64.encodeToString(bos.toByteArray(), Base64.NO_WRAP), "application/ini", new APICallback() { @Override public void onResponse(CloudAPI.SyncState response) { isSyncInProgress = false; diff --git a/app/src/main/java/com/dark98/santoku/config/ConfigObject.java b/app/src/main/java/com/dark98/santoku/config/ConfigObject.java index 8bc2736..7a55aa6 100644 --- a/app/src/main/java/com/dark98/santoku/config/ConfigObject.java +++ b/app/src/main/java/com/dark98/santoku/config/ConfigObject.java @@ -81,7 +81,7 @@ public class ConfigObject implements ProfileListFragment.ProfileListItem { public String serialize() { StringBuilder sb = new StringBuilder(); - sb.append("# generated by Slice Beam ").append(BuildConfig.VERSION_NAME).append("\n\n"); + sb.append("# generated by Santoku ").append(BuildConfig.VERSION_NAME).append("\n\n"); for (Map.Entry en : values.entrySet()) { String value = en.getValue(); if (value != null) { diff --git a/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java b/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java index bd09f4c..b4d1ddf 100644 --- a/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java +++ b/app/src/main/java/com/dark98/santoku/slic3r/Slic3rConfigWrapper.java @@ -214,7 +214,7 @@ public class Slic3rConfigWrapper { public String serialize() { StringBuilder sb = new StringBuilder(); - sb.append("# generated by Slice Beam ").append(BuildConfig.VERSION_NAME).append("\n\n"); + sb.append("# generated by Santoku ").append(BuildConfig.VERSION_NAME).append("\n\n"); serializeList(sb, "printer", printerConfigs); serializeList(sb, "print", printConfigs); serializeList(sb, "filament", filamentConfigs); diff --git a/app/src/main/java/com/dark98/santoku/slic3r/Slic3rLocalization.java b/app/src/main/java/com/dark98/santoku/slic3r/Slic3rLocalization.java index 9c5264c..fe116c2 100644 --- a/app/src/main/java/com/dark98/santoku/slic3r/Slic3rLocalization.java +++ b/app/src/main/java/com/dark98/santoku/slic3r/Slic3rLocalization.java @@ -71,7 +71,7 @@ public class Slic3rLocalization { } private static String replaceStr(String val) { - return val.replace("\\n", "\n").replaceAll("\\\\(.)", "$1").replace("Slic3r", "Slice Beam").replace("PrusaSlicer", "Slice Beam"); + return val.replace("\\n", "\n").replaceAll("\\\\(.)", "$1").replace("Slic3r", "Santoku").replace("PrusaSlicer", "Santoku"); } public static String getString(String key) { diff --git a/app/src/main/jni/CGAL/AABB_tree.h b/app/src/main/jni/CGAL/AABB_tree.h index 3985cf0..225dcb9 100644 --- a/app/src/main/jni/CGAL/AABB_tree.h +++ b/app/src/main/jni/CGAL/AABB_tree.h @@ -553,7 +553,7 @@ public: traits.intersection(query, singleton_data()); break; default: // if(size() >= 2) - root_node()->template traversal_with_priority_and_group_traversal(m_primitives, query, traits, m_primitives.size(), 0, group_traversal_bound); + root_node()->traversal_with_priority_and_group_traversal(m_primitives, query, traits, m_primitives.size(), 0, group_traversal_bound); } } diff --git a/app/src/main/jni/CGAL/boost/graph/iterator.h b/app/src/main/jni/CGAL/boost/graph/iterator.h index c8af78e..ca996a2 100644 --- a/app/src/main/jni/CGAL/boost/graph/iterator.h +++ b/app/src/main/jni/CGAL/boost/graph/iterator.h @@ -221,7 +221,7 @@ public: operator bool_type() const { - return (! (this->base() == nullptr)) ? + return (g != nullptr) ? &Halfedge_around_source_iterator::this_type_does_not_support_comparisons : 0; } @@ -321,7 +321,7 @@ public: operator bool_type() const { - return (! (this->base() == nullptr)) ? + return (g != nullptr) ? &Halfedge_around_target_iterator::this_type_does_not_support_comparisons : 0; } @@ -420,7 +420,7 @@ public: operator bool_type() const { - return (! (this->base() == nullptr)) ? + return (g != nullptr) ? &Halfedge_around_face_iterator::this_type_does_not_support_comparisons : 0; } diff --git a/app/src/main/jni/libslic3r/Arrange/Core/DataStoreTraits.hpp b/app/src/main/jni/libslic3r/Arrange/Core/DataStoreTraits.hpp index ba932d5..a784ff3 100644 --- a/app/src/main/jni/libslic3r/Arrange/Core/DataStoreTraits.hpp +++ b/app/src/main/jni/libslic3r/Arrange/Core/DataStoreTraits.hpp @@ -71,7 +71,7 @@ template using WritableDataStoreOnly = std::enable_if_t void set_data(ArrItem &itm, const std::string &key, T &&data) { - WritableDataStoreTraits::template set(itm, key, std::forward(data)); + WritableDataStoreTraits::set(itm, key, std::forward(data)); } template constexpr bool IsReadWritableDataStore = IsDataStore && IsWritableDataStore; diff --git a/app/src/main/jni/nlopt/algs/stogo/tools.h b/app/src/main/jni/nlopt/algs/stogo/tools.h index 668a5ee..fb07d4d 100644 --- a/app/src/main/jni/nlopt/algs/stogo/tools.h +++ b/app/src/main/jni/nlopt/algs/stogo/tools.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "linalg.h" @@ -36,7 +37,7 @@ public: friend ostream & operator << (ostream &, RCTrial) ; }; -class TrialGT : public unary_function +class TrialGT // Predicate for Trial (needed for remove_if) { public: diff --git a/app/src/main/jni/openvdb/tree/NodeManager.h b/app/src/main/jni/openvdb/tree/NodeManager.h index 4d0d9b4..12dabaa 100644 --- a/app/src/main/jni/openvdb/tree/NodeManager.h +++ b/app/src/main/jni/openvdb/tree/NodeManager.h @@ -327,7 +327,7 @@ private: void operator()(const NodeRange& range) const { for (typename NodeRange::Iterator it = range.begin(); it; ++it) { - OpT::template eval(mNodeOp, it); + OpT::eval(mNodeOp, it); } } const NodeOp mNodeOp; @@ -347,7 +347,7 @@ private: void operator()(const NodeRange& range) const { for (typename NodeRange::Iterator it = range.begin(); it; ++it) { - OpT::template eval(mNodeOp, it); + OpT::eval(mNodeOp, it); } } const NodeOp& mNodeOp; @@ -372,7 +372,7 @@ private: void operator()(const NodeRange& range) { for (typename NodeRange::Iterator it = range.begin(); it; ++it) { - OpT::template eval(*mNodeOp, it); + OpT::eval(*mNodeOp, it); } } void join(const NodeReducer& other) diff --git a/app/src/main/jni/zlib/gzlib.c b/app/src/main/jni/zlib/gzlib.c index 983153c..8876f23 100644 --- a/app/src/main/jni/zlib/gzlib.c +++ b/app/src/main/jni/zlib/gzlib.c @@ -4,6 +4,7 @@ */ #include "gzguts.h" +#include #if defined(_WIN32) && !defined(__BORLANDC__) # define LSEEK _lseeki64 diff --git a/app/src/main/jni/zlib/gzread.c b/app/src/main/jni/zlib/gzread.c index 4168cbc..5c0d651 100644 --- a/app/src/main/jni/zlib/gzread.c +++ b/app/src/main/jni/zlib/gzread.c @@ -4,6 +4,7 @@ */ #include "gzguts.h" +#include /* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from state->fd, and update state->eof, state->err, and state->msg as appropriate. diff --git a/app/src/main/jni/zlib/gzwrite.c b/app/src/main/jni/zlib/gzwrite.c index 435b462..a6fcbdd 100644 --- a/app/src/main/jni/zlib/gzwrite.c +++ b/app/src/main/jni/zlib/gzwrite.c @@ -4,6 +4,7 @@ */ #include "gzguts.h" +#include /* Initialize state for writing a gzip file. Mark initialization by setting state->size to non-zero. Return -1 on a memory allocation failure, or 0 on diff --git a/app/src/main/jniLibs/arm64-v8a/libc++_shared.so b/app/src/main/jniLibs/arm64-v8a/libc++_shared.so index 1653847..e978645 100644 Binary files a/app/src/main/jniLibs/arm64-v8a/libc++_shared.so and b/app/src/main/jniLibs/arm64-v8a/libc++_shared.so differ diff --git a/app/src/main/jniLibs/arm64-v8a/libgmp.so b/app/src/main/jniLibs/arm64-v8a/libgmp.so index c3baf1b..63f3ff7 100644 Binary files a/app/src/main/jniLibs/arm64-v8a/libgmp.so and b/app/src/main/jniLibs/arm64-v8a/libgmp.so differ diff --git a/app/src/main/jniLibs/arm64-v8a/libgmpxx.so b/app/src/main/jniLibs/arm64-v8a/libgmpxx.so index 24dba28..d8b3909 100644 Binary files a/app/src/main/jniLibs/arm64-v8a/libgmpxx.so and b/app/src/main/jniLibs/arm64-v8a/libgmpxx.so differ diff --git a/app/src/main/jniLibs/arm64-v8a/libmpfr.so b/app/src/main/jniLibs/arm64-v8a/libmpfr.so index 73816fd..4bcacbc 100644 Binary files a/app/src/main/jniLibs/arm64-v8a/libmpfr.so and b/app/src/main/jniLibs/arm64-v8a/libmpfr.so differ diff --git a/app/src/main/jniLibs/armeabi-v7a/libc++_shared.so b/app/src/main/jniLibs/armeabi-v7a/libc++_shared.so index 787016a..aebe061 100644 Binary files a/app/src/main/jniLibs/armeabi-v7a/libc++_shared.so and b/app/src/main/jniLibs/armeabi-v7a/libc++_shared.so differ diff --git a/app/src/main/jniLibs/armeabi-v7a/libgmp.so b/app/src/main/jniLibs/armeabi-v7a/libgmp.so index 291c21c..3d8d4bd 100644 Binary files a/app/src/main/jniLibs/armeabi-v7a/libgmp.so and b/app/src/main/jniLibs/armeabi-v7a/libgmp.so differ diff --git a/app/src/main/jniLibs/armeabi-v7a/libgmpxx.so b/app/src/main/jniLibs/armeabi-v7a/libgmpxx.so index 704cbc2..ef6b298 100644 Binary files a/app/src/main/jniLibs/armeabi-v7a/libgmpxx.so and b/app/src/main/jniLibs/armeabi-v7a/libgmpxx.so differ diff --git a/app/src/main/jniLibs/armeabi-v7a/libmpfr.so b/app/src/main/jniLibs/armeabi-v7a/libmpfr.so index 8be3649..0b23e7c 100644 Binary files a/app/src/main/jniLibs/armeabi-v7a/libmpfr.so and b/app/src/main/jniLibs/armeabi-v7a/libmpfr.so differ diff --git a/app/src/main/jniLibs/x86/libc++_shared.so b/app/src/main/jniLibs/x86/libc++_shared.so index 021ef66..c2a7d95 100644 Binary files a/app/src/main/jniLibs/x86/libc++_shared.so and b/app/src/main/jniLibs/x86/libc++_shared.so differ diff --git a/app/src/main/jniLibs/x86_64/libc++_shared.so b/app/src/main/jniLibs/x86_64/libc++_shared.so index 085f341..0afd6ac 100644 Binary files a/app/src/main/jniLibs/x86_64/libc++_shared.so and b/app/src/main/jniLibs/x86_64/libc++_shared.so differ diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..c67ed40 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_adaptive_foreground.png b/app/src/main/res/drawable/icon_adaptive_foreground.png deleted file mode 100644 index ee39edc..0000000 Binary files a/app/src/main/res/drawable/icon_adaptive_foreground.png and /dev/null differ diff --git a/app/src/main/res/drawable/icon_static.png b/app/src/main/res/drawable/icon_static.png deleted file mode 100644 index 5752288..0000000 Binary files a/app/src/main/res/drawable/icon_static.png and /dev/null differ diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..76b6944 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..76b6944 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..92c010f Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..92c010f Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-v32/icon.xml b/app/src/main/res/mipmap-v32/icon.xml deleted file mode 100644 index c16d993..0000000 --- a/app/src/main/res/mipmap-v32/icon.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..905b769 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..905b769 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..412dada Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..412dada Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..5eb9810 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..5eb9810 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap/icon.png b/app/src/main/res/mipmap/icon.png deleted file mode 100644 index 5752288..0000000 Binary files a/app/src/main/res/mipmap/icon.png and /dev/null differ diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a9c93c4..dc74f55 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -140,7 +140,7 @@ Похоже всё настроено.\nПросто нажмите завершить! Завершить Ранний доступ - Вы используете ранний доступ Slice Beam.\nПожалуйста обратите внимание, что некоторые функции могут быть недоступны, содержать ошибки или работать не так, как ожидается.\nДля получения новостей о приложении подпишитесь на Telegram-канал разработчика. + Вы используете ранний доступ Santoku.\nОбратите внимание, что некоторые функции могут быть недоступны, содержать ошибки или работать не так, как ожидается. Сбросить настройки по-умолчанию Вы уверены? Это действие не может быть отменено. diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..55b08d6 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #DC3D3D + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 034f7ae..b25a32c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -140,7 +140,7 @@ All seems to be configured.\nJust tap finish! Finish Early access - You are using an Early Access of Slice Beam.\nPlease note that some features may be unavailable, buggy or work not as expected.\nPlease subscribe to developer\'s Telegram for app\'s news. + You are using an Early Access of Santoku.\nPlease note that some features may be unavailable, buggy or work not as expected. Reset to defaults Are you sure? This action can not be undone. diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 92bd289..30c786a 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,7 +1,7 @@