diff --git a/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt index 2557c436..8ed9b231 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt @@ -109,7 +109,6 @@ fun DashboardScreen( ) } - val context = LocalContext.current var showAndroid11Dialog by rememberSaveable { mutableStateOf(false) } val installAppsPermissionLauncher = rememberLauncherForActivityResult(RequestInstallAppsContract) { granted -> @@ -121,7 +120,7 @@ fun DashboardScreen( showAndroid11Dialog = false }, onContinue = { - installAppsPermissionLauncher.launch(context.packageName) + installAppsPermissionLauncher.launch(androidContext.packageName) } ) @@ -239,6 +238,7 @@ fun DashboardScreen( } } + val showBatteryOptimizationsWarning by vm.showBatteryOptimizationsWarningFlow.collectAsStateWithLifecycle(false) Notifications( if (!Aapt.supportsDevice()) { { @@ -250,7 +250,7 @@ fun DashboardScreen( ) } } else null, - if (vm.showBatteryOptimizationsWarning) { + if (showBatteryOptimizationsWarning) { { NotificationCard( isWarning = true, diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt index 303bd06a..e524c83e 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt @@ -24,7 +24,9 @@ import app.revanced.manager.network.api.ReVancedAPI import app.revanced.manager.util.PM import app.revanced.manager.util.toast import app.revanced.manager.util.uiSafe +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch @@ -56,14 +58,19 @@ class DashboardViewModel( var updatedManagerVersion: String? by mutableStateOf(null) private set - var showBatteryOptimizationsWarning by mutableStateOf(false) - private set + val showBatteryOptimizationsWarningFlow = flow { + while (true) { + // There is no callback for this, so we have to poll it. + val result = !powerManager.isIgnoringBatteryOptimizations(app.packageName) + emit(result) + if (!result) return@flow + delay(500L) + } + } init { viewModelScope.launch { checkForManagerUpdates() - showBatteryOptimizationsWarning = - !powerManager.isIgnoringBatteryOptimizations(app.packageName) } }