Show battery optimization hint

master
Zakhar Timoshenko 2 years ago
parent cdd4ff4eb4
commit 9f13d1e888
Signed by: Xtimms
SSH Key Fingerprint: SHA256:wH6spYepK/A5erBh7ZyAnr1ru9H4eaMVBEuiw6DSpxI

@ -4,6 +4,15 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
</intent>
</queries>
<application
android:name=".App"

@ -1,20 +1,39 @@
package org.xtimms.tokusho.sections.settings
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.PowerManager
import android.provider.Settings
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.BatterySaver
import androidx.compose.material.icons.outlined.Code
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.outlined.Palette
import androidx.compose.material.icons.outlined.Storage
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.xtimms.tokusho.R
import org.xtimms.tokusho.core.components.PreferenceSubtitle
import org.xtimms.tokusho.core.components.PreferencesHintCard
import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
import org.xtimms.tokusho.core.components.SettingItem
import org.xtimms.tokusho.sections.settings.storage.StorageViewModel
@ -22,6 +41,7 @@ import org.xtimms.tokusho.utils.FileSize
const val SETTINGS_DESTINATION = "settings"
@SuppressLint("BatteryLife")
@Composable
fun SettingsView(
navigateBack: () -> 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(

@ -95,4 +95,8 @@
<string name="text_file_sizes_free">B free|kB free|MB free|GB free|TB free</string>
<string name="confirm">Confirm</string>
<string name="free_up_space_summary">Space can be cleared:</string>
<string name="disable_battery_optimization">Disable battery optimization</string>
<string name="disable_battery_optimization_summary">Helps with background updates checks</string>
<string name="recommended_action">Recommended action</string>
<string name="space_used">% used</string>
</resources>
Loading…
Cancel
Save