mirror of
https://github.com/readrops/Readrops.git
synced 2025-02-03 12:07:35 +01:00
Add preference to disable battery optimization
This commit is contained in:
parent
63867d3acd
commit
67b29d7590
@ -4,6 +4,7 @@
|
|||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".ReadropsApp"
|
android:name=".ReadropsApp"
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
package com.readrops.app.more.preferences
|
package com.readrops.app.more.preferences
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.PowerManager
|
||||||
|
import android.provider.Settings
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
@ -9,10 +15,14 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
|||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.material3.SnackbarHost
|
||||||
|
import androidx.compose.material3.SnackbarHostState
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBar
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@ -21,12 +31,14 @@ import cafe.adriel.voyager.koin.getScreenModel
|
|||||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||||
import com.readrops.app.R
|
import com.readrops.app.R
|
||||||
|
import com.readrops.app.more.preferences.components.BasePreference
|
||||||
import com.readrops.app.more.preferences.components.ListPreferenceWidget
|
import com.readrops.app.more.preferences.components.ListPreferenceWidget
|
||||||
import com.readrops.app.more.preferences.components.PreferenceHeader
|
import com.readrops.app.more.preferences.components.PreferenceHeader
|
||||||
import com.readrops.app.more.preferences.components.SwitchPreferenceWidget
|
import com.readrops.app.more.preferences.components.SwitchPreferenceWidget
|
||||||
import com.readrops.app.sync.SyncWorker
|
import com.readrops.app.sync.SyncWorker
|
||||||
import com.readrops.app.util.components.AndroidScreen
|
import com.readrops.app.util.components.AndroidScreen
|
||||||
import com.readrops.app.util.components.CenteredProgressIndicator
|
import com.readrops.app.util.components.CenteredProgressIndicator
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
|
||||||
class PreferencesScreen : AndroidScreen() {
|
class PreferencesScreen : AndroidScreen() {
|
||||||
@ -38,6 +50,9 @@ class PreferencesScreen : AndroidScreen() {
|
|||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val screenModel = getScreenModel<PreferencesScreenModel>()
|
val screenModel = getScreenModel<PreferencesScreenModel>()
|
||||||
|
|
||||||
|
val coroutineScope = rememberCoroutineScope()
|
||||||
|
val snackbarHostState = remember { SnackbarHostState() }
|
||||||
|
|
||||||
val state by screenModel.state.collectAsStateWithLifecycle()
|
val state by screenModel.state.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
@ -55,7 +70,8 @@ class PreferencesScreen : AndroidScreen() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
},
|
||||||
|
snackbarHost = { SnackbarHost(snackbarHostState) }
|
||||||
) { paddingValues ->
|
) { paddingValues ->
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier.padding(paddingValues)
|
modifier = Modifier.padding(paddingValues)
|
||||||
@ -64,6 +80,7 @@ class PreferencesScreen : AndroidScreen() {
|
|||||||
is PreferencesScreenState.Loading -> {
|
is PreferencesScreenState.Loading -> {
|
||||||
CenteredProgressIndicator()
|
CenteredProgressIndicator()
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val loadedState = (state as PreferencesScreenState.Loaded)
|
val loadedState = (state as PreferencesScreenState.Loaded)
|
||||||
|
|
||||||
@ -99,6 +116,34 @@ class PreferencesScreen : AndroidScreen() {
|
|||||||
onValueChange = { SyncWorker.startPeriodically(context, it) }
|
onValueChange = { SyncWorker.startPeriodically(context, it) }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
BasePreference(
|
||||||
|
title = stringResource(R.string.disable_battery_optimization),
|
||||||
|
subtitle = stringResource(R.string.disable_battery_optimization_subtitle),
|
||||||
|
onClick = {
|
||||||
|
val powerManager =
|
||||||
|
context.getSystemService("power") as PowerManager
|
||||||
|
val packageName = context.packageName
|
||||||
|
|
||||||
|
if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
|
||||||
|
@SuppressLint("BatteryLife")
|
||||||
|
val intent = Intent().apply {
|
||||||
|
action =
|
||||||
|
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
|
||||||
|
data = Uri.parse("package:$packageName")
|
||||||
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
}
|
||||||
|
|
||||||
|
context.startActivity(intent)
|
||||||
|
} else {
|
||||||
|
coroutineScope.launch {
|
||||||
|
snackbarHostState.showSnackbar(context.getString(R.string.battery_optimization_already_disabled))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
PreferenceHeader(text = stringResource(id = R.string.timeline))
|
PreferenceHeader(text = stringResource(id = R.string.timeline))
|
||||||
|
|
||||||
ListPreferenceWidget(
|
ListPreferenceWidget(
|
||||||
|
@ -185,4 +185,7 @@
|
|||||||
<string name="large">Large</string>
|
<string name="large">Large</string>
|
||||||
<string name="item_size">Taille des items</string>
|
<string name="item_size">Taille des items</string>
|
||||||
<string name="background_sync_already_running">Une synchronisation en arrière-plan est déjà en cours</string>
|
<string name="background_sync_already_running">Une synchronisation en arrière-plan est déjà en cours</string>
|
||||||
|
<string name="disable_battery_optimization">Désactiver l\'optimisation de la batterie</string>
|
||||||
|
<string name="disable_battery_optimization_subtitle">Peut aider à éviter que le système n\'empêche la synchronisation d\'arrière-plan</string>
|
||||||
|
<string name="battery_optimization_already_disabled">L\'optimisation de la batterie est déjà optimisée pour cette appli</string>
|
||||||
</resources>
|
</resources>
|
@ -194,4 +194,7 @@
|
|||||||
<string name="large">Large</string>
|
<string name="large">Large</string>
|
||||||
<string name="item_size">Item size</string>
|
<string name="item_size">Item size</string>
|
||||||
<string name="background_sync_already_running">A background synchronization is already running</string>
|
<string name="background_sync_already_running">A background synchronization is already running</string>
|
||||||
|
<string name="disable_battery_optimization">Disable battery optimization</string>
|
||||||
|
<string name="disable_battery_optimization_subtitle">Can help with background synchronization not being killed by the system</string>
|
||||||
|
<string name="battery_optimization_already_disabled">Battery optimization already disabled for this app</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user