From bfd6d480c4445224e5f6dd2e44cd0fa585d2b4d1 Mon Sep 17 00:00:00 2001 From: xchacha20-poly1305 Date: Mon, 9 Feb 2026 13:56:37 +0800 Subject: [PATCH] Fix lose enable perAppProxy status with shizuku --- .../screen/settings/ProfileOverrideScreen.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/ProfileOverrideScreen.kt b/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/ProfileOverrideScreen.kt index 692714f..22363a4 100644 --- a/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/ProfileOverrideScreen.kt +++ b/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/ProfileOverrideScreen.kt @@ -113,14 +113,19 @@ fun ProfileOverrideScreen(navController: NavController) { val isShizukuBinderReady by PackageQueryManager.shizukuBinderReady.collectAsState() val isShizukuPermissionGranted by PackageQueryManager.shizukuPermissionGranted.collectAsState() val isShizukuAvailable = isShizukuBinderReady && isShizukuPermissionGranted + var isShizukuStateInitialized by remember(showModeSelector) { mutableStateOf(!showModeSelector) } DisposableEffect(showModeSelector) { if (showModeSelector) { + isShizukuStateInitialized = false PackageQueryManager.registerListeners() + PackageQueryManager.refreshShizukuState() + isShizukuStateInitialized = true } onDispose { if (showModeSelector) { PackageQueryManager.unregisterListeners() + isShizukuStateInitialized = false } } } @@ -140,8 +145,14 @@ fun ProfileOverrideScreen(navController: NavController) { } // Auto-disable per-app proxy if Shizuku authorization is revoked (only when using Shizuku mode) - LaunchedEffect(isShizukuAvailable, useRootMode) { - if (showModeSelector && !useRootMode && !isShizukuAvailable && perAppProxyEnabled) { + LaunchedEffect(isShizukuAvailable, useRootMode, isShizukuStateInitialized, perAppProxyEnabled, showModeSelector) { + if ( + showModeSelector && + !useRootMode && + isShizukuStateInitialized && + perAppProxyEnabled && + !PackageQueryManager.isShizukuAvailable() + ) { perAppProxyEnabled = false withContext(Dispatchers.IO) { Settings.perAppProxyEnabled = false