show current app battery usage mode in summary of App battery usage item
This commit is contained in:
@@ -35,6 +35,7 @@ import com.android.settings.R
|
|||||||
import com.android.settings.Utils
|
import com.android.settings.Utils
|
||||||
import com.android.settings.core.SubSettingLauncher
|
import com.android.settings.core.SubSettingLauncher
|
||||||
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail
|
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail
|
||||||
|
import com.android.settings.fuelgauge.BatteryOptimizeUtils
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryChartPreferenceController
|
import com.android.settings.fuelgauge.batteryusage.BatteryChartPreferenceController
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry
|
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry
|
||||||
import com.android.settingslib.spa.widget.preference.Preference
|
import com.android.settingslib.spa.widget.preference.Preference
|
||||||
@@ -43,6 +44,7 @@ import com.android.settingslib.spaprivileged.model.app.installed
|
|||||||
import com.android.settingslib.spaprivileged.model.app.userHandle
|
import com.android.settingslib.spaprivileged.model.app.userHandle
|
||||||
import com.android.settingslib.spaprivileged.model.app.userId
|
import com.android.settingslib.spaprivileged.model.app.userId
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
@@ -63,7 +65,7 @@ fun AppBatteryPreference(app: ApplicationInfo) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class AppBatteryPresenter(private val context: Context, private val app: ApplicationInfo) {
|
private class AppBatteryPresenter(private val context: Context, private val app: ApplicationInfo) {
|
||||||
private var batteryDiffEntryState: LoadingState<BatteryDiffEntry?>
|
private var batteryDiffEntryState: LoadingState<Pair<BatteryDiffEntry?, Int>>
|
||||||
by mutableStateOf(LoadingState.Loading)
|
by mutableStateOf(LoadingState.Loading)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -82,13 +84,18 @@ private class AppBatteryPresenter(private val context: Context, private val app:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun getBatteryDiffEntry(): BatteryDiffEntry? = withContext(Dispatchers.IO) {
|
private suspend fun getBatteryDiffEntry(): Pair<BatteryDiffEntry?, Int> = withContext(Dispatchers.IO) {
|
||||||
|
val batteryDiffEntry = async {
|
||||||
BatteryChartPreferenceController.getAppBatteryUsageData(
|
BatteryChartPreferenceController.getAppBatteryUsageData(
|
||||||
context, app.packageName, app.userId
|
context, app.packageName, app.userId
|
||||||
).also {
|
).also {
|
||||||
Log.d(TAG, "loadBatteryDiffEntries():\n$it")
|
Log.d(TAG, "loadBatteryDiffEntries():\n$it")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val optimizationMode = BatteryOptimizeUtils(context, app.uid, app.packageName)
|
||||||
|
.getAppOptimizationMode(false, false);
|
||||||
|
Pair(batteryDiffEntry.await(), optimizationMode)
|
||||||
|
}
|
||||||
|
|
||||||
val enabled = { batteryDiffEntryState is LoadingState.Done }
|
val enabled = { batteryDiffEntryState is LoadingState.Done }
|
||||||
|
|
||||||
@@ -97,7 +104,31 @@ private class AppBatteryPresenter(private val context: Context, private val app:
|
|||||||
batteryDiffEntryState.let { batteryDiffEntryState ->
|
batteryDiffEntryState.let { batteryDiffEntryState ->
|
||||||
when (batteryDiffEntryState) {
|
when (batteryDiffEntryState) {
|
||||||
is LoadingState.Loading -> context.getString(R.string.summary_placeholder)
|
is LoadingState.Loading -> context.getString(R.string.summary_placeholder)
|
||||||
is LoadingState.Done -> batteryDiffEntryState.result.getSummary()
|
is LoadingState.Done -> {
|
||||||
|
val optimizationMode = when (batteryDiffEntryState.result.second) {
|
||||||
|
BatteryOptimizeUtils.MODE_RESTRICTED ->
|
||||||
|
R.string.manager_battery_usage_restricted_title
|
||||||
|
BatteryOptimizeUtils.MODE_UNRESTRICTED ->
|
||||||
|
R.string.manager_battery_usage_unrestricted_title
|
||||||
|
BatteryOptimizeUtils.MODE_OPTIMIZED ->
|
||||||
|
R.string.manager_battery_usage_optimized_title
|
||||||
|
else -> 0
|
||||||
|
}
|
||||||
|
val b = StringBuilder()
|
||||||
|
val bde = batteryDiffEntryState.result.first
|
||||||
|
if (optimizationMode != 0) {
|
||||||
|
b.append(context.getString(optimizationMode))
|
||||||
|
}
|
||||||
|
|
||||||
|
val bdeSummary = bde.getSummary()
|
||||||
|
if (b.isNotEmpty() && bdeSummary.isNotEmpty()) {
|
||||||
|
b.append('\n')
|
||||||
|
b.append(bdeSummary)
|
||||||
|
return@let b.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
return@let bdeSummary
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else ""
|
} else ""
|
||||||
@@ -111,7 +142,7 @@ private class AppBatteryPresenter(private val context: Context, private val app:
|
|||||||
} ?: context.getString(R.string.no_battery_summary)
|
} ?: context.getString(R.string.no_battery_summary)
|
||||||
|
|
||||||
fun startActivity() {
|
fun startActivity() {
|
||||||
batteryDiffEntryState.resultOrNull?.run {
|
batteryDiffEntryState.resultOrNull?.first?.run {
|
||||||
startBatteryDetailPage()
|
startBatteryDetailPage()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user