1. Fix backward compatibility

2. Fix OOM crash problem
3. Bump version
This commit is contained in:
ZaneYork 2021-02-01 15:57:50 +08:00
parent 30b63b496b
commit cf9ceb67fb
18 changed files with 155 additions and 152 deletions

View File

@ -12,8 +12,8 @@ android {
applicationId "com.zane.smapiinstaller" applicationId "com.zane.smapiinstaller"
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 30 targetSdkVersion 30
versionCode 68 versionCode 69
versionName "3.7.6.6" versionName "3.7.6.7"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
@ -78,28 +78,28 @@ dependencies {
implementation 'com.lmntrx.android.library.livin.missme:missme:0.1.5' implementation 'com.lmntrx.android.library.livin.missme:missme:0.1.5'
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'
// https://mvnrepository.com/artifact/com.google.guava/guava // https://mvnrepository.com/artifact/com.google.guava/guava
implementation group: 'com.google.guava', name: 'guava', version: '28.2-android' implementation group: 'com.google.guava', name: 'guava', version: '30.1-android'
// https://mvnrepository.com/artifact/org.zeroturnaround/zt-zip // https://mvnrepository.com/artifact/org.zeroturnaround/zt-zip
implementation group: 'org.zeroturnaround', name: 'zt-zip', version: '1.14' implementation group: 'org.zeroturnaround', name: 'zt-zip', version: '1.14'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.11' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'
// https://mvnrepository.com/artifact/commons-io/commons-io // https://mvnrepository.com/artifact/commons-io/commons-io
implementation group: 'commons-io', name: 'commons-io', version: '2.7' implementation group: 'commons-io', name: 'commons-io', version: '2.8.0'
implementation 'com.lzy.net:okgo:3.0.4' implementation 'com.lzy.net:okgo:3.0.4'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.0' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.12.1'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.0' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.1'
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.11.0' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.12.1'
// https://mvnrepository.com/artifact/org.lz4/lz4-pure-java // https://mvnrepository.com/artifact/org.lz4/lz4-pure-java
implementation group: 'org.lz4', name: 'lz4-pure-java', version: '1.7.0' implementation group: 'org.lz4', name: 'lz4-pure-java', version: '1.7.0'
implementation 'com.github.didikee:AndroidDonate:0.1.0' implementation 'com.github.didikee:AndroidDonate:0.1.0'
implementation 'com.hjq:language:3.0' implementation 'com.hjq:language:6.0'
api 'org.greenrobot:greendao:3.3.0' api 'org.greenrobot:greendao:3.3.0'
api 'org.greenrobot:greendao-generator:3.3.0' api 'org.greenrobot:greendao-generator:3.3.0'
testImplementation 'junit:junit:4.13' testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.android.support:multidex:1.0.3' implementation 'com.android.support:multidex:1.0.3'

View File

@ -10,7 +10,14 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <queries>
<package android:name="com.chucklefish.stardewvalley"/>
<package android:name="com.zane.stardewvalley"/>
<package android:name="com.chucklefish.stardewvalleysamsung"/>
<package android:name="com.zane.stardewvalleysamsung"/>
<package android:name="com.martyrpher.stardewvalley"/>
</queries>
<!-- <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />-->
<application <application
android:name=".MainApplication" android:name=".MainApplication"
@ -24,7 +31,8 @@
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
tools:ignore="UnusedAttribute"> tools:ignore="UnusedAttribute"
android:largeHeap="true">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:label="@string/app_name" android:label="@string/app_name"

View File

@ -1,13 +1,13 @@
{ {
"version": 33, "version": 34,
"contents": [ "contents": [
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI for 1.4.5.145", "name": "SMAPI for 1.4.5.145",
"assetPath": "compat/145/", "assetPath": "compat/145/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_145_210201.zip",
"hash": "821117db34a78ed955d4f24cb0ed4da9d3c5c9eafd4774d4fadec209505277c9" "hash": "d9f6e3e5161a1236163df8dfe56859cb2701d1847ff2ed04742c925e20c19ed9"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
@ -22,16 +22,16 @@
"name": "SMAPI for Galaxy Store", "name": "SMAPI for Galaxy Store",
"assetPath": "compat/samsung_138/", "assetPath": "compat/samsung_138/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210201.zip",
"hash": "30df6cbabb000034f44eac4bc7489344d1a7f3cc4724f8be0ca61a94a7502825" "hash": "b2a99924b2a6842168df1df4c2c0d934c63bb0010e34dfdc6f4037d4bc091c7a"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI for Amazon Store", "name": "SMAPI for Amazon Store",
"assetPath": "compat/amazon_138/", "assetPath": "compat/amazon_138/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210201.zip",
"hash": "7540a006cfa262dd2fca4f2e51b2fffff8b6e045602b3cc11a2f9061dcdabddd" "hash": "3f0ef36b139750e27ccab165b8fed6cbf58c10cadbf4b5a34436891740ae1f89"
}, },
{ {
"type": "LOCALE", "type": "LOCALE",

View File

@ -1,13 +1,13 @@
{ {
"version": 33, "version": 34,
"contents": [ "contents": [
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI for 1.4.5.145", "name": "SMAPI for 1.4.5.145",
"assetPath": "compat/145/", "assetPath": "compat/145/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_145_210201.zip",
"hash": "821117db34a78ed955d4f24cb0ed4da9d3c5c9eafd4774d4fadec209505277c9" "hash": "d9f6e3e5161a1236163df8dfe56859cb2701d1847ff2ed04742c925e20c19ed9"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
@ -22,16 +22,16 @@
"name": "SMAPI for Galaxy Store", "name": "SMAPI for Galaxy Store",
"assetPath": "compat/samsung_138/", "assetPath": "compat/samsung_138/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210201.zip",
"hash": "30df6cbabb000034f44eac4bc7489344d1a7f3cc4724f8be0ca61a94a7502825" "hash": "b2a99924b2a6842168df1df4c2c0d934c63bb0010e34dfdc6f4037d4bc091c7a"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI for Amazon Store", "name": "SMAPI for Amazon Store",
"assetPath": "compat/amazon_138/", "assetPath": "compat/amazon_138/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210201.zip",
"hash": "7540a006cfa262dd2fca4f2e51b2fffff8b6e045602b3cc11a2f9061dcdabddd" "hash": "3f0ef36b139750e27ccab165b8fed6cbf58c10cadbf4b5a34436891740ae1f89"
}, },
{ {
"type": "LOCALE", "type": "LOCALE",

View File

@ -1,13 +1,13 @@
{ {
"version": 33, "version": 34,
"contents": [ "contents": [
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI for 1.4.5.145", "name": "SMAPI for 1.4.5.145",
"assetPath": "compat/145/", "assetPath": "compat/145/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_145_210201.zip",
"hash": "821117db34a78ed955d4f24cb0ed4da9d3c5c9eafd4774d4fadec209505277c9" "hash": "d9f6e3e5161a1236163df8dfe56859cb2701d1847ff2ed04742c925e20c19ed9"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
@ -22,16 +22,16 @@
"name": "SMAPI untuk Galaxy Store", "name": "SMAPI untuk Galaxy Store",
"assetPath": "compat/samsung_138/", "assetPath": "compat/samsung_138/",
"description": "Paket kompatibilitas SMAPI untuk versi 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "Paket kompatibilitas SMAPI untuk versi 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210201.zip",
"hash": "30df6cbabb000034f44eac4bc7489344d1a7f3cc4724f8be0ca61a94a7502825" "hash": "b2a99924b2a6842168df1df4c2c0d934c63bb0010e34dfdc6f4037d4bc091c7a"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI untuk Amazon Store", "name": "SMAPI untuk Amazon Store",
"assetPath": "compat/amazon_138/", "assetPath": "compat/amazon_138/",
"description": "Paket kompatibilitas SMAPI untuk versi 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "Paket kompatibilitas SMAPI untuk versi 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210201.zip",
"hash": "7540a006cfa262dd2fca4f2e51b2fffff8b6e045602b3cc11a2f9061dcdabddd" "hash": "3f0ef36b139750e27ccab165b8fed6cbf58c10cadbf4b5a34436891740ae1f89"
}, },
{ {
"type": "LOCAL", "type": "LOCAL",

View File

@ -1,13 +1,13 @@
{ {
"version": 33, "version": 34,
"contents": [ "contents": [
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI for 1.4.5.145", "name": "SMAPI for 1.4.5.145",
"assetPath": "compat/145/", "assetPath": "compat/145/",
"description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI compat package for game 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_145_210201.zip",
"hash": "821117db34a78ed955d4f24cb0ed4da9d3c5c9eafd4774d4fadec209505277c9" "hash": "d9f6e3e5161a1236163df8dfe56859cb2701d1847ff2ed04742c925e20c19ed9"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
@ -22,16 +22,16 @@
"name": "SMAPI สำหรับ Galaxy Store", "name": "SMAPI สำหรับ Galaxy Store",
"assetPath": "compat/samsung_138/", "assetPath": "compat/samsung_138/",
"description": "แพคเกจแอพลิเคชั่น SMAPI สำหรับเกม Stardew Valley เวอร์ชั่น 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "แพคเกจแอพลิเคชั่น SMAPI สำหรับเกม Stardew Valley เวอร์ชั่น 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210201.zip",
"hash": "30df6cbabb000034f44eac4bc7489344d1a7f3cc4724f8be0ca61a94a7502825" "hash": "b2a99924b2a6842168df1df4c2c0d934c63bb0010e34dfdc6f4037d4bc091c7a"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI สำหรับ Amazon Store", "name": "SMAPI สำหรับ Amazon Store",
"assetPath": "compat/amazon_138/", "assetPath": "compat/amazon_138/",
"description": "แพคเกจแอพลิเคชั่น SMAPI สำหรับเกม Stardew Valley เวอร์ชั่น 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "แพคเกจแอพลิเคชั่น SMAPI สำหรับเกม Stardew Valley เวอร์ชั่น 1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210201.zip",
"hash": "7540a006cfa262dd2fca4f2e51b2fffff8b6e045602b3cc11a2f9061dcdabddd" "hash": "3f0ef36b139750e27ccab165b8fed6cbf58c10cadbf4b5a34436891740ae1f89"
}, },
{ {
"type": "LOCALE", "type": "LOCALE",

View File

@ -1,13 +1,13 @@
{ {
"version": 33, "version": 34,
"contents": [ "contents": [
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI兼容包 1.4.5.145", "name": "SMAPI兼容包 1.4.5.145",
"assetPath": "compat/145/", "assetPath": "compat/145/",
"description": "SMAPI兼容包, 适用版本1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI兼容包, 适用版本1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_145_210201.zip",
"hash": "821117db34a78ed955d4f24cb0ed4da9d3c5c9eafd4774d4fadec209505277c9" "hash": "d9f6e3e5161a1236163df8dfe56859cb2701d1847ff2ed04742c925e20c19ed9"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
@ -22,16 +22,16 @@
"name": "SMAPI三星商店兼容包", "name": "SMAPI三星商店兼容包",
"assetPath": "compat/samsung_138/", "assetPath": "compat/samsung_138/",
"description": "SMAPI三星商店兼容包 适用版本1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI三星商店兼容包 适用版本1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_samsung_145_210201.zip",
"hash": "30df6cbabb000034f44eac4bc7489344d1a7f3cc4724f8be0ca61a94a7502825" "hash": "b2a99924b2a6842168df1df4c2c0d934c63bb0010e34dfdc6f4037d4bc091c7a"
}, },
{ {
"type": "COMPAT", "type": "COMPAT",
"name": "SMAPI亚马逊商店兼容包", "name": "SMAPI亚马逊商店兼容包",
"assetPath": "compat/amazon_138/", "assetPath": "compat/amazon_138/",
"description": "SMAPI亚马逊商店兼容包 适用版本1.4.5.138 - 1.4.5.147, SMAPI 3.7.5", "description": "SMAPI亚马逊商店兼容包 适用版本1.4.5.138 - 1.4.5.147, SMAPI 3.7.5",
"url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210128.zip", "url": "http://zaneyork.cn/dl/compat/smapi_amazon_145_210201.zip",
"hash": "7540a006cfa262dd2fca4f2e51b2fffff8b6e045602b3cc11a2f9061dcdabddd" "hash": "3f0ef36b139750e27ccab165b8fed6cbf58c10cadbf4b5a34436891740ae1f89"
}, },
{ {
"type": "LOCALE", "type": "LOCALE",

View File

@ -13,7 +13,7 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import com.hjq.language.LanguagesManager; import com.hjq.language.MultiLanguages;
import com.lmntrx.android.library.livin.missme.ProgressDialog; import com.lmntrx.android.library.livin.missme.ProgressDialog;
import com.lzy.okgo.OkGo; import com.lzy.okgo.OkGo;
import com.lzy.okgo.model.Response; import com.lzy.okgo.model.Response;
@ -80,8 +80,7 @@ public class MainActivity extends AppCompatActivity {
} }
}); });
startActivityForResult(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION), ActivityResultHandler.REQUEST_CODE_ALL_FILES_ACCESS_PERMISSION); startActivityForResult(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION), ActivityResultHandler.REQUEST_CODE_ALL_FILES_ACCESS_PERMISSION);
} } else {
else {
this.finish(); this.finish();
} }
})); }));
@ -150,14 +149,14 @@ public class MainActivity extends AppCompatActivity {
navController.addOnDestinationChangedListener((controller, destination, arguments) -> { navController.addOnDestinationChangedListener((controller, destination, arguments) -> {
currentFragment = destination.getId(); currentFragment = destination.getId();
this.invalidateOptionsMenu(); this.invalidateOptionsMenu();
switch (currentFragment) { if (currentFragment == R.id.nav_about
case R.id.nav_about: || currentFragment == R.id.nav_help
case R.id.nav_help: || currentFragment == R.id.config_edit_fragment
case R.id.config_edit_fragment: ) {
binding.appBarMain.launch.setVisibility(View.INVISIBLE); binding.appBarMain.launch.setVisibility(View.INVISIBLE);
break; }
default: else {
binding.appBarMain.launch.setVisibility(View.VISIBLE); binding.appBarMain.launch.setVisibility(View.VISIBLE);
} }
}); });
AppConfig appConfig = ConfigUtils.getConfig((MainApplication) this.getApplication(), AppConfigKeyConstants.IGNORE_UPDATE_VERSION_CODE, Constants.PATCHED_APP_NAME); AppConfig appConfig = ConfigUtils.getConfig((MainApplication) this.getApplication(), AppConfigKeyConstants.IGNORE_UPDATE_VERSION_CODE, Constants.PATCHED_APP_NAME);
@ -206,11 +205,7 @@ public class MainActivity extends AppCompatActivity {
FrameworkConfig config = manager.getConfig(); FrameworkConfig config = manager.getConfig();
menu.findItem(R.id.settings_verbose_logging).setChecked(config.isVerboseLogging()); menu.findItem(R.id.settings_verbose_logging).setChecked(config.isVerboseLogging());
menu.findItem(R.id.settings_check_for_updates).setChecked(config.isCheckForUpdates()); menu.findItem(R.id.settings_check_for_updates).setChecked(config.isCheckForUpdates());
if (currentFragment != R.id.nav_config) { menu.findItem(R.id.toolbar_update_check).setVisible(currentFragment == R.id.nav_config);
menu.findItem(R.id.toolbar_update_check).setVisible(false);
} else {
menu.findItem(R.id.toolbar_update_check).setVisible(true);
}
menu.findItem(R.id.settings_developer_mode).setChecked(config.isDeveloperMode()); menu.findItem(R.id.settings_developer_mode).setChecked(config.isDeveloperMode());
menu.findItem(R.id.settings_disable_mono_mod).setChecked(config.isDisableMonoMod()); menu.findItem(R.id.settings_disable_mono_mod).setChecked(config.isDisableMonoMod());
menu.findItem(R.id.settings_rewrite_missing).setChecked(config.isRewriteMissing()); menu.findItem(R.id.settings_rewrite_missing).setChecked(config.isRewriteMissing());
@ -222,73 +217,62 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.isCheckable()) { if (item.isCheckable()) {
if (item.isChecked()) { item.setChecked(!item.isChecked());
item.setChecked(false);
} else {
item.setChecked(true);
}
} }
ConfigManager manager = new ConfigManager(); ConfigManager manager = new ConfigManager();
FrameworkConfig config = manager.getConfig(); FrameworkConfig config = manager.getConfig();
switch (item.getItemId()) { if (item.getItemId() == R.id.settings_verbose_logging) {
case R.id.settings_verbose_logging: config.setVerboseLogging(item.isChecked());
config.setVerboseLogging(item.isChecked()); } else if (item.getItemId() == R.id.settings_check_for_updates) {
break; config.setCheckForUpdates(item.isChecked());
case R.id.settings_check_for_updates: } else if (item.getItemId() == R.id.settings_developer_mode) {
config.setCheckForUpdates(item.isChecked()); config.setDeveloperMode(item.isChecked());
break; } else if (item.getItemId() == R.id.settings_disable_mono_mod) {
case R.id.settings_developer_mode: config.setDisableMonoMod(item.isChecked());
config.setDeveloperMode(item.isChecked()); } else if (item.getItemId() == R.id.settings_rewrite_missing) {
break; config.setRewriteMissing(item.isChecked());
case R.id.settings_disable_mono_mod: } else if (item.getItemId() == R.id.settings_set_app_name) {
config.setDisableMonoMod(item.isChecked()); DialogUtils.showInputDialog(binding.appBarMain.toolbar, R.string.input, R.string.settings_set_app_name, Constants.PATCHED_APP_NAME, Constants.PATCHED_APP_NAME, true, (dialog, input) -> {
break; String appName = input.toString();
case R.id.settings_rewrite_missing: AppConfig appConfig = ConfigUtils.getConfig((MainApplication) getApplication(), AppConfigKeyConstants.IGNORE_UPDATE_VERSION_CODE, appName);
config.setRewriteMissing(item.isChecked()); appConfig.setValue(appName);
break;
case R.id.settings_set_app_name:
DialogUtils.showInputDialog(binding.appBarMain.toolbar, R.string.input, R.string.settings_set_app_name, Constants.PATCHED_APP_NAME, Constants.PATCHED_APP_NAME, true, (dialog, input) -> {
String appName = input.toString();
AppConfig appConfig = ConfigUtils.getConfig((MainApplication) getApplication(), AppConfigKeyConstants.IGNORE_UPDATE_VERSION_CODE, appName);
appConfig.setValue(appName);
ConfigUtils.saveConfig((MainApplication) getApplication(), appConfig);
Constants.PATCHED_APP_NAME = appName;
});
return true;
case R.id.settings_set_mod_path:
DialogUtils.showInputDialog(binding.appBarMain.toolbar, R.string.input, R.string.input_mods_path, Constants.MOD_PATH, Constants.MOD_PATH, (dialog, input) -> {
if (StringUtils.isNoneBlank(input)) {
String pathString = input.toString();
File file = new File(FileUtils.getStadewValleyBasePath(), pathString);
if (file.exists() && file.isDirectory()) {
Constants.MOD_PATH = pathString;
config.setModsPath(pathString);
manager.flushConfig();
} else {
DialogUtils.showAlertDialog(binding.drawerLayout, R.string.error, R.string.error_illegal_path);
}
}
});
return true;
case R.id.settings_language:
selectLanguageLogic();
return true;
case R.id.settings_translation_service:
selectTranslateServiceLogic();
return true;
case R.id.toolbar_update_check:
checkModUpdateLogic();
return true;
case R.id.settings_advanced_mode:
AppConfig appConfig = ConfigUtils.getConfig((MainApplication) getApplication(), AppConfigKeyConstants.ADVANCED_MODE, "false");
appConfig.setValue(String.valueOf(item.isChecked()));
ConfigUtils.saveConfig((MainApplication) getApplication(), appConfig); ConfigUtils.saveConfig((MainApplication) getApplication(), appConfig);
startActivity(new Intent(this, MainActivity.class)); Constants.PATCHED_APP_NAME = appName;
overridePendingTransition(R.anim.fragment_fade_enter, R.anim.fragment_fade_exit); });
finish(); return true;
break; } else if (item.getItemId() == R.id.settings_set_mod_path) {
default: DialogUtils.showInputDialog(binding.appBarMain.toolbar, R.string.input, R.string.input_mods_path, Constants.MOD_PATH, Constants.MOD_PATH, (dialog, input) -> {
return super.onOptionsItemSelected(item); if (StringUtils.isNoneBlank(input)) {
String pathString = input.toString();
File file = new File(FileUtils.getStadewValleyBasePath(), pathString);
if (file.exists() && file.isDirectory()) {
Constants.MOD_PATH = pathString;
config.setModsPath(pathString);
manager.flushConfig();
} else {
DialogUtils.showAlertDialog(binding.drawerLayout, R.string.error, R.string.error_illegal_path);
}
}
});
return true;
} else if (item.getItemId() == R.id.settings_language) {
selectLanguageLogic();
return true;
} else if (item.getItemId() == R.id.settings_translation_service) {
selectTranslateServiceLogic();
return true;
} else if (item.getItemId() == R.id.toolbar_update_check) {
checkModUpdateLogic();
return true;
} else if (item.getItemId() == R.id.settings_advanced_mode) {
AppConfig appConfig = ConfigUtils.getConfig((MainApplication) getApplication(), AppConfigKeyConstants.ADVANCED_MODE, "false");
appConfig.setValue(String.valueOf(item.isChecked()));
ConfigUtils.saveConfig((MainApplication) getApplication(), appConfig);
startActivity(new Intent(this, MainActivity.class));
overridePendingTransition(R.anim.fragment_fade_enter, R.anim.fragment_fade_exit);
finish();
} else {
return super.onOptionsItemSelected(item);
} }
manager.flushConfig(); manager.flushConfig();
return true; return true;
@ -333,34 +317,34 @@ public class MainActivity extends AppCompatActivity {
boolean restart; boolean restart;
switch (position) { switch (position) {
case 0: case 0:
restart = LanguagesManager.setSystemLanguage(this); restart = MultiLanguages.setSystemLanguage(this);
break; break;
case 1: case 1:
restart = LanguagesManager.setAppLanguage(this, Locale.ENGLISH); restart = MultiLanguages.setAppLanguage(this, Locale.ENGLISH);
break; break;
case 2: case 2:
restart = LanguagesManager.setAppLanguage(this, Locale.SIMPLIFIED_CHINESE); restart = MultiLanguages.setAppLanguage(this, Locale.SIMPLIFIED_CHINESE);
break; break;
case 3: case 3:
restart = LanguagesManager.setAppLanguage(this, Locale.TRADITIONAL_CHINESE); restart = MultiLanguages.setAppLanguage(this, Locale.TRADITIONAL_CHINESE);
break; break;
case 4: case 4:
restart = LanguagesManager.setAppLanguage(this, Locale.KOREA); restart = MultiLanguages.setAppLanguage(this, Locale.KOREA);
break; break;
case 5: case 5:
restart = LanguagesManager.setAppLanguage(this, new Locale("th", "")); restart = MultiLanguages.setAppLanguage(this, new Locale("th", ""));
break; break;
case 6: case 6:
restart = LanguagesManager.setAppLanguage(this, new Locale("es", "")); restart = MultiLanguages.setAppLanguage(this, new Locale("es", ""));
break; break;
case 7: case 7:
restart = LanguagesManager.setAppLanguage(this, Locale.FRENCH); restart = MultiLanguages.setAppLanguage(this, Locale.FRENCH);
break; break;
case 8: case 8:
restart = LanguagesManager.setAppLanguage(this, new Locale("pt", "")); restart = MultiLanguages.setAppLanguage(this, new Locale("pt", ""));
break; break;
case 9: case 9:
restart = LanguagesManager.setAppLanguage(this, new Locale("in", "")); restart = MultiLanguages.setAppLanguage(this, new Locale("in", ""));
break; break;
default: default:
return; return;
@ -414,7 +398,7 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
protected void attachBaseContext(Context newBase) { protected void attachBaseContext(Context newBase) {
// 国际化适配绑定语种 // 国际化适配绑定语种
super.attachBaseContext(LanguagesManager.attach(newBase)); super.attachBaseContext(MultiLanguages.attach(newBase));
} }
@Override @Override

View File

@ -3,7 +3,7 @@ package com.zane.smapiinstaller;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import com.hjq.language.LanguagesManager; import com.hjq.language.MultiLanguages;
import com.lzy.okgo.OkGo; import com.lzy.okgo.OkGo;
import com.zane.smapiinstaller.entity.DaoMaster; import com.zane.smapiinstaller.entity.DaoMaster;
import com.zane.smapiinstaller.entity.DaoSession; import com.zane.smapiinstaller.entity.DaoSession;
@ -29,7 +29,7 @@ public class MainApplication extends Application {
// .addInterceptor(new GzipRequestInterceptor()) // .addInterceptor(new GzipRequestInterceptor())
.build(); .build();
OkGo.getInstance().setOkHttpClient(okHttpClient).init(this); OkGo.getInstance().setOkHttpClient(okHttpClient).init(this);
LanguagesManager.init(this); MultiLanguages.init(this);
// note: DevOpenHelper is for dev only, use a OpenHelper subclass instead // note: DevOpenHelper is for dev only, use a OpenHelper subclass instead
DbOpenHelper helper = new DbOpenHelper(this, "installer-db"); DbOpenHelper helper = new DbOpenHelper(this, "installer-db");
Database db = helper.getWritableDb(); Database db = helper.getWritableDb();
@ -39,7 +39,7 @@ public class MainApplication extends Application {
@Override @Override
protected void attachBaseContext(Context base) { protected void attachBaseContext(Context base) {
// 国际化适配绑定语种 // 国际化适配绑定语种
super.attachBaseContext(LanguagesManager.attach(base)); super.attachBaseContext(MultiLanguages.attach(base));
MultiDex.install(this); MultiDex.install(this);
} }
} }

View File

@ -108,7 +108,7 @@ public class ApkPatcher {
try { try {
PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
String sourceDir = packageInfo.applicationInfo.publicSourceDir; String sourceDir = packageInfo.applicationInfo.publicSourceDir;
gamePackageName.set(packageName); gamePackageName.set(CommonLogic.computePackageName(packageInfo));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
gameVersionCode.set(packageInfo.getLongVersionCode()); gameVersionCode.set(packageInfo.getLongVersionCode());
} else { } else {

View File

@ -27,6 +27,7 @@ import com.microsoft.appcenter.crashes.Crashes;
import com.zane.smapiinstaller.MainApplication; import com.zane.smapiinstaller.MainApplication;
import com.zane.smapiinstaller.R; import com.zane.smapiinstaller.R;
import com.zane.smapiinstaller.constant.DialogAction; import com.zane.smapiinstaller.constant.DialogAction;
import com.zane.smapiinstaller.constant.ManifestPatchConstants;
import com.zane.smapiinstaller.entity.ApkFilesManifest; import com.zane.smapiinstaller.entity.ApkFilesManifest;
import com.zane.smapiinstaller.entity.ManifestEntry; import com.zane.smapiinstaller.entity.ManifestEntry;
import com.zane.smapiinstaller.utils.DialogUtils; import com.zane.smapiinstaller.utils.DialogUtils;
@ -189,6 +190,14 @@ public class CommonLogic {
return apkFilesManifests; return apkFilesManifests;
} }
public static String computePackageName(PackageInfo packageInfo){
String packageName = packageInfo.packageName;
if (StringUtils.endsWith(packageInfo.versionName, ManifestPatchConstants.PATTERN_VERSION_AMAZON)) {
packageName = ManifestPatchConstants.APP_PACKAGE_NAME + ManifestPatchConstants.PATTERN_VERSION_AMAZON;
}
return packageName;
}
/** /**
* 提取SMAPI环境文件到内部存储对应位置 * 提取SMAPI环境文件到内部存储对应位置
* *

View File

@ -10,7 +10,9 @@ import android.view.View;
import com.microsoft.appcenter.crashes.Crashes; import com.microsoft.appcenter.crashes.Crashes;
import com.zane.smapiinstaller.R; import com.zane.smapiinstaller.R;
import com.zane.smapiinstaller.constant.Constants; import com.zane.smapiinstaller.constant.Constants;
import com.zane.smapiinstaller.constant.ManifestPatchConstants;
import com.zane.smapiinstaller.utils.DialogUtils; import com.zane.smapiinstaller.utils.DialogUtils;
import com.zane.smapiinstaller.utils.StringUtils;
/** /**
* 游戏启动器 * 游戏启动器
@ -63,7 +65,7 @@ public class GameLauncher {
else { else {
versionCode = packageInfo.versionCode; versionCode = packageInfo.versionCode;
} }
if(!CommonLogic.unpackSmapiFiles(context, packageInfo.applicationInfo.publicSourceDir, true, packageInfo.packageName, versionCode)) { if(!CommonLogic.unpackSmapiFiles(context, packageInfo.applicationInfo.publicSourceDir, true, CommonLogic.computePackageName(packageInfo), versionCode)) {
DialogUtils.showAlertDialog(root, R.string.error, R.string.error_failed_to_repair); DialogUtils.showAlertDialog(root, R.string.error, R.string.error_failed_to_repair);
return; return;
} }

View File

@ -2,7 +2,7 @@ package com.zane.smapiinstaller.logic;
import android.view.View; import android.view.View;
import com.hjq.language.LanguagesManager; import com.hjq.language.MultiLanguages;
import com.lzy.okgo.OkGo; import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.Response; import com.lzy.okgo.model.Response;
@ -41,7 +41,7 @@ public class UpdatableListManager<T extends UpdatableList> implements Listenable
Boolean updated = updateChecked.get(tClass); Boolean updated = updateChecked.get(tClass);
if(updated == null || !updated) { if(updated == null || !updated) {
updateChecked.put(tClass, true); updateChecked.put(tClass, true);
String languageSuffix = '.' + LanguagesManager.getAppLanguage(root.getContext()).getLanguage(); String languageSuffix = '.' + MultiLanguages.getAppLanguage().getLanguage();
updateList(root, tClass, updateUrl, filename, languageSuffix); updateList(root, tClass, updateUrl, filename, languageSuffix);
} }
} }

View File

@ -19,7 +19,7 @@ import android.webkit.WebViewClient;
import androidx.webkit.WebViewAssetLoader; import androidx.webkit.WebViewAssetLoader;
import com.hjq.language.LanguagesManager; import com.hjq.language.MultiLanguages;
import com.zane.smapiinstaller.BuildConfig; import com.zane.smapiinstaller.BuildConfig;
import com.zane.smapiinstaller.R; import com.zane.smapiinstaller.R;
import com.zane.smapiinstaller.constant.Constants; import com.zane.smapiinstaller.constant.Constants;
@ -106,7 +106,7 @@ public class ConfigEditFragment extends Fragment {
private void onScrollViewRendered(File file, Context context) { private void onScrollViewRendered(File file, Context context) {
String fileText = FileUtils.getFileText(file); String fileText = FileUtils.getFileText(file);
if (fileText != null) { if (fileText != null) {
String lang = LanguagesManager.getAppLanguage(context).getLanguage(); String lang = MultiLanguages.getAppLanguage().getLanguage();
switch (lang) { switch (lang) {
case "zh": case "zh":
lang = "zh-CN"; lang = "zh-CN";

View File

@ -4,7 +4,7 @@ import android.view.View;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.hjq.language.LanguagesManager; import com.hjq.language.MultiLanguages;
import com.zane.smapiinstaller.MainApplication; import com.zane.smapiinstaller.MainApplication;
import com.zane.smapiinstaller.constant.AppConfigKeyConstants; import com.zane.smapiinstaller.constant.AppConfigKeyConstants;
import com.zane.smapiinstaller.entity.AppConfig; import com.zane.smapiinstaller.entity.AppConfig;
@ -114,7 +114,7 @@ class ConfigViewModel extends ViewModel implements ListenableObject<List<ModMani
if (!StringUtils.equals(activeTranslator.getValue(), TranslateUtil.NONE)) { if (!StringUtils.equals(activeTranslator.getValue(), TranslateUtil.NONE)) {
String translator = activeTranslator.getValue(); String translator = activeTranslator.getValue();
List<String> descriptions = this.modList.stream().map(ModManifestEntry::getDescription).filter(Objects::nonNull).collect(Collectors.toList()); List<String> descriptions = this.modList.stream().map(ModManifestEntry::getDescription).filter(Objects::nonNull).collect(Collectors.toList());
String language = LanguagesManager.getAppLanguage(app).getLanguage(); String language = MultiLanguages.getAppLanguage().getLanguage();
Query<TranslationResult> query = daoSession.getTranslationResultDao().queryBuilder().where( Query<TranslationResult> query = daoSession.getTranslationResultDao().queryBuilder().where(
TranslationResultDao.Properties.Origin.in(descriptions), TranslationResultDao.Properties.Origin.in(descriptions),
TranslationResultDao.Properties.Locale.eq(language), TranslationResultDao.Properties.Locale.eq(language),

View File

@ -11,7 +11,7 @@ import com.google.common.hash.Hashing;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import com.google.common.io.CharStreams; import com.google.common.io.CharStreams;
import com.google.common.io.Files; import com.google.common.io.Files;
import com.hjq.language.LanguagesManager; import com.hjq.language.MultiLanguages;
import org.apache.commons.io.input.BOMInputStream; import org.apache.commons.io.input.BOMInputStream;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -78,7 +78,7 @@ public class FileUtils extends org.zeroturnaround.zip.commons.FileUtils {
*/ */
public static InputStream getLocaledLocalAsset(Context context, String filename) throws IOException { public static InputStream getLocaledLocalAsset(Context context, String filename) throws IOException {
try { try {
String language = LanguagesManager.getAppLanguage(context).getLanguage(); String language = MultiLanguages.getAppLanguage().getLanguage();
String localedFilename = filename + '.' + language; String localedFilename = filename + '.' + language;
File file = new File(context.getFilesDir(), localedFilename); File file = new File(context.getFilesDir(), localedFilename);
if (file.exists()) { if (file.exists()) {

View File

@ -8,7 +8,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:4.0.2' classpath 'com.android.tools.build:gradle:4.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.1"
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'

View File

@ -1,6 +1,6 @@
#Wed Aug 05 15:43:33 CST 2020 #Mon Feb 01 14:39:47 CST 2021
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip