Skip to content

Commit d89cb78

Browse files
fix: persist function toggle state immediately on switch change
Kernel spoof and Umount toggles only updated local Compose state, requiring a separate Save button click. If users toggled off and navigated away, the old enabled state was reloaded from storage. Now both toggles immediately persist via their respective backends.
1 parent 8065ae0 commit d89cb78

1 file changed

Lines changed: 38 additions & 2 deletions

File tree

app/src/main/java/me/bmax/apatch/ui/screen/settings/FunctionSettingsScreen.kt

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,30 @@ fun FunctionSettingsScreen(navigator: DestinationsNavigator) {
118118
isHideServiceEnabled = isHideServiceEnabled,
119119
onHideServiceChange = { isHideServiceEnabled = it },
120120
isKernelSpoofEnabled = isKernelSpoofEnabled,
121-
onKernelSpoofChange = { isKernelSpoofEnabled = it },
121+
onKernelSpoofChange = { enabled ->
122+
isKernelSpoofEnabled = enabled
123+
scope.launch(Dispatchers.IO) {
124+
val prefs = APApplication.sharedPreferences
125+
prefs.edit().putBoolean(APApplication.PREF_UTS_SPOOF_ENABLED, enabled).apply()
126+
if (enabled) {
127+
setUtsSpoofEnabled(true)
128+
val savedRelease = prefs.getString(APApplication.PREF_UTS_SPOOF_RELEASE, "") ?: ""
129+
val savedVersion = prefs.getString(APApplication.PREF_UTS_SPOOF_VERSION, "") ?: ""
130+
writeUtsSpoofConfig(savedRelease, savedVersion)
131+
Natives.utsSet(savedRelease.ifBlank { null }, savedVersion.ifBlank { null })
132+
withContext(Dispatchers.Main) {
133+
snackBarHost.showSnackbar("Kernel spoof enabled")
134+
}
135+
} else {
136+
Natives.utsReset()
137+
setUtsSpoofEnabled(false)
138+
removeUtsSpoofConfig()
139+
withContext(Dispatchers.Main) {
140+
snackBarHost.showSnackbar("Kernel spoof disabled and restored")
141+
}
142+
}
143+
}
144+
},
122145
kernelSpoofVersion = kernelSpoofVersion,
123146
onKernelSpoofVersionChange = { kernelSpoofVersion = it },
124147
kernelSpoofBuildTime = kernelSpoofBuildTime,
@@ -184,7 +207,20 @@ fun FunctionSettingsScreen(navigator: DestinationsNavigator) {
184207
},
185208
snackBarHost = snackBarHost,
186209
isUmountEnabled = isUmountEnabled,
187-
onUmountEnabledChange = { isUmountEnabled = it },
210+
onUmountEnabledChange = { enabled ->
211+
isUmountEnabled = enabled
212+
scope.launch(Dispatchers.IO) {
213+
val config = UmountConfig(enabled = enabled, paths = umountPaths)
214+
val success = UmountConfigManager.saveConfig(context, config)
215+
withContext(Dispatchers.Main) {
216+
if (success) {
217+
showToast(context, context.getString(R.string.umount_config_save_success))
218+
} else {
219+
showToast(context, context.getString(R.string.umount_config_save_failed))
220+
}
221+
}
222+
}
223+
},
188224
umountPaths = umountPaths,
189225
onUmountPathsChange = { umountPaths = it },
190226
onUmountSave = {

0 commit comments

Comments
 (0)