Skip to content

Commit f93085f

Browse files
kitadai31oSumAtrIX
authored andcommitted
fix: Do not poll battery optimization status (#2491)
1 parent 40a4317 commit f93085f

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.net.Uri
66
import android.provider.Settings
77
import androidx.activity.compose.BackHandler
88
import androidx.activity.compose.rememberLauncherForActivityResult
9+
import androidx.activity.result.contract.ActivityResultContracts
910
import androidx.compose.foundation.clickable
1011
import androidx.compose.foundation.layout.Arrangement
1112
import androidx.compose.foundation.layout.Column
@@ -264,9 +265,6 @@ fun DashboardScreen(
264265
}
265266
}
266267

267-
val showBatteryOptimizationsWarning by vm.showBatteryOptimizationsWarningFlow.collectAsStateWithLifecycle(
268-
false
269-
)
270268
Notifications(
271269
if (!Aapt.supportsDevice()) {
272270
{
@@ -278,16 +276,23 @@ fun DashboardScreen(
278276
)
279277
}
280278
} else null,
281-
if (showBatteryOptimizationsWarning) {
279+
if (vm.showBatteryOptimizationsWarning) {
282280
{
281+
val batteryOptimizationsLauncher =
282+
rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
283+
vm.updateBatteryOptimizationsWarning()
284+
}
283285
NotificationCard(
284286
isWarning = true,
285287
icon = Icons.Default.BatteryAlert,
286288
text = stringResource(R.string.battery_optimization_notification),
287289
onClick = {
288-
androidContext.startActivity(Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
289-
data = Uri.parse("package:${androidContext.packageName}")
290-
})
290+
batteryOptimizationsLauncher.launch(
291+
Intent(
292+
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
293+
Uri.fromParts("package", androidContext.packageName, null)
294+
)
295+
)
291296
}
292297
)
293298
}

app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ import app.revanced.manager.network.api.ReVancedAPI
2424
import app.revanced.manager.util.PM
2525
import app.revanced.manager.util.toast
2626
import app.revanced.manager.util.uiSafe
27-
import kotlinx.coroutines.delay
2827
import kotlinx.coroutines.flow.first
29-
import kotlinx.coroutines.flow.flow
3028
import kotlinx.coroutines.flow.map
3129
import kotlinx.coroutines.launch
3230

@@ -58,19 +56,13 @@ class DashboardViewModel(
5856

5957
var updatedManagerVersion: String? by mutableStateOf(null)
6058
private set
61-
val showBatteryOptimizationsWarningFlow = flow {
62-
while (true) {
63-
// There is no callback for this, so we have to poll it.
64-
val result = !powerManager.isIgnoringBatteryOptimizations(app.packageName)
65-
emit(result)
66-
if (!result) return@flow
67-
delay(500L)
68-
}
69-
}
59+
var showBatteryOptimizationsWarning by mutableStateOf(false)
60+
private set
7061

7162
init {
7263
viewModelScope.launch {
7364
checkForManagerUpdates()
65+
updateBatteryOptimizationsWarning()
7466
}
7567
}
7668

@@ -90,6 +82,10 @@ class DashboardViewModel(
9082
}
9183
}
9284

85+
fun updateBatteryOptimizationsWarning() {
86+
showBatteryOptimizationsWarning = !powerManager.isIgnoringBatteryOptimizations(app.packageName)
87+
}
88+
9389
fun setShowManagerUpdateDialogOnLaunch(value: Boolean) {
9490
viewModelScope.launch {
9591
prefs.showManagerUpdateDialogOnLaunch.update(value)

0 commit comments

Comments
 (0)