diff --git a/app/src/main/assets/lang/en_US.json b/app/src/main/assets/lang/en_US.json index 995b69c7..3f506af9 100644 --- a/app/src/main/assets/lang/en_US.json +++ b/app/src/main/assets/lang/en_US.json @@ -59,7 +59,9 @@ "longitude_value": "Longitude", "hide_ui_elements": "Hide UI Elements", "auto_updater": "Auto Updater", - "infinite_story_boost": "Infinite Story Boost" + "infinite_story_boost": "Infinite Story Boost", + "enable_app_appearance": "Enable App Appearance Settings", + "disable_spotlight": "Disable Spotlight" }, "option": { diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt index 4318dd03..d2a15b63 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt @@ -80,17 +80,10 @@ class ModContext { } } - fun restartApp() { - androidContext.packageManager.getLaunchIntentForPackage( - Constants.SNAPCHAT_PACKAGE_NAME - )?.let { - val intent = Intent.makeRestartActivityTask(it.component) - androidContext.startActivity(intent) - Runtime.getRuntime().exit(0) + fun softRestartApp(saveSettings: Boolean = false) { + if (saveSettings) { + config.writeConfig() } - } - - fun softRestartApp() { val intent: Intent? = androidContext.packageManager.getLaunchIntentForPackage( Constants.SNAPCHAT_PACKAGE_NAME ) diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/SnapEnhance.kt b/app/src/main/kotlin/me/rhunk/snapenhance/SnapEnhance.kt index 095e2dea..1ce7a769 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/SnapEnhance.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/SnapEnhance.kt @@ -35,7 +35,7 @@ class SnapEnhance { start { bridgeResult -> if (!bridgeResult) { Logger.xposedLog("Cannot connect to bridge service") - appContext.restartApp() + appContext.softRestartApp() return@start } runCatching { diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt b/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt index 68adbed4..ac387780 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt @@ -258,6 +258,19 @@ enum class ConfigProperty( ConfigCategory.UI_TWEAKS, ConfigIntegerValue(20) ), + DISABLE_SPOTLIGHT( + "property.disable_spotlight", + "description.disable_spotlight", + ConfigCategory.UI_TWEAKS, + ConfigStateValue(false) + ), + ENABLE_APP_APPEARANCE( + "property.enable_app_appearance", + "description.enable_app_appearance", + ConfigCategory.UI_TWEAKS, + ConfigStateValue(false) + ), + // UPDATES AUTO_UPDATER( diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ConfigEnumKeys.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ConfigEnumKeys.kt index 113f8936..29262af0 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ConfigEnumKeys.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ConfigEnumKeys.kt @@ -1,8 +1,11 @@ package me.rhunk.snapenhance.features.impl +import android.annotation.SuppressLint import me.rhunk.snapenhance.config.ConfigProperty import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams +import me.rhunk.snapenhance.hook.HookStage +import me.rhunk.snapenhance.hook.hook import me.rhunk.snapenhance.util.setObjectField import java.lang.reflect.Field import java.lang.reflect.Modifier @@ -33,6 +36,7 @@ class ConfigEnumKeys : Feature("Config enum keys", loadParams = FeatureLoadParam } } + @SuppressLint("PrivateApi") override fun onActivityCreate() { if (context.config.bool(ConfigProperty.NEW_MAP_UI)) { hookAllEnums(context.mappings.getMappedClass("enums", "PLUS")) { key, set -> @@ -62,5 +66,18 @@ class ConfigEnumKeys : Feature("Config enum keys", loadParams = FeatureLoadParam } } } + + ConfigProperty.ENABLE_APP_APPEARANCE.valueContainer.addPropertyChangeListener { + context.softRestartApp(true) + } + + val sharedPreferencesImpl = context.androidContext.classLoader.loadClass("android.app.SharedPreferencesImpl") + + sharedPreferencesImpl.methods.first { it.name == "getBoolean" }.hook(HookStage.BEFORE) { param -> + when (param.arg(0)) { + "SIG_APP_APPEARANCE_SETTING" -> if (context.config.bool(ConfigProperty.ENABLE_APP_APPEARANCE)) param.setResult(true) + "SPOTLIGHT_5TH_TAB_ENABLED" -> if (context.config.bool(ConfigProperty.DISABLE_SPOTLIGHT)) param.setResult(false) + } + } } } \ No newline at end of file