diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b19bf59..9d07fab 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,6 +4,15 @@
+
+
+
+
+
+
+
+
+
Unit,
@@ -35,6 +55,31 @@ fun SettingsView(
val viewModel: StorageViewModel = hiltViewModel()
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
+ val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
+ var showBatteryHint by remember {
+ mutableStateOf(!pm.isIgnoringBatteryOptimizations(context.packageName))
+ }
+
+ val intent =
+ Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
+ data = Uri.parse("package:${context.packageName}")
+ }
+
+ val isActivityAvailable: Boolean =
+ if (Build.VERSION.SDK_INT < 33) context.packageManager.queryIntentActivities(
+ intent,
+ PackageManager.MATCH_ALL
+ ).isNotEmpty()
+ else context.packageManager.queryIntentActivities(
+ intent,
+ PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_SYSTEM_ONLY.toLong())
+ ).isNotEmpty()
+
+ val launcher =
+ rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {
+ showBatteryHint = !pm.isIgnoringBatteryOptimizations(context.packageName)
+ }
+
ScaffoldWithTopAppBar(
title = stringResource(R.string.settings),
navigateBack = navigateBack
@@ -43,6 +88,22 @@ fun SettingsView(
modifier = Modifier
.padding(padding)
) {
+ item {
+ AnimatedVisibility(
+ visible = showBatteryHint && isActivityAvailable,
+ exit = shrinkVertically() + fadeOut()
+ ) {
+ PreferencesHintCard(
+ title = stringResource(R.string.disable_battery_optimization),
+ icon = Icons.Outlined.BatterySaver,
+ description = stringResource(R.string.disable_battery_optimization_summary),
+ ) {
+ launcher.launch(intent)
+ showBatteryHint =
+ !pm.isIgnoringBatteryOptimizations(context.packageName)
+ }
+ }
+ }
item {
SettingItem(
title = stringResource(id = R.string.appearance),
@@ -52,13 +113,12 @@ fun SettingsView(
)
}
item {
- val allCaches = uiState.availableSpace +
- uiState.httpCacheSize +
+ val allCaches = uiState.httpCacheSize +
uiState.pagesCache +
uiState.thumbnailsCache
val desc = buildString {
- append((uiState.availableSpace / allCaches) * 100)
- append("% used")
+ append((allCaches / uiState.availableSpace) * 100)
+ append(context.getString(R.string.space_used))
append(" - ")
append(
FileSize.BYTES.freeFormat(
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7eba9d5..48d3407 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,4 +95,8 @@
B free|kB free|MB free|GB free|TB free
Confirm
Space can be cleared:
+ Disable battery optimization
+ Helps with background updates checks
+ Recommended action
+ % used
\ No newline at end of file