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