Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4084b560 authored by Fan Wu's avatar Fan Wu Committed by Android (Google) Code Review
Browse files

Merge "Update BatteryHeaderPreference with storage and read permit" into main

parents 8ff5f0cf 0dc50c45
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
        android:title="@string/summary_placeholder"
        android:selectable="false"
        android:paddingBottom="0px"
        android:persistent="false"
        settings:controller="com.android.settings.fuelgauge.BatteryHeaderPreferenceController" />

    <com.android.settings.fuelgauge.BatteryHeaderTextPreference
+41 −10
Original line number Diff line number Diff line
@@ -22,21 +22,27 @@ import androidx.preference.Preference
import com.android.settings.R
import com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_NOT_PRESENT
import com.android.settingslib.Utils
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.NoOpKeyedObservable
import com.android.settingslib.fuelgauge.BatteryUtils
import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.preference.PreferenceBinding
import com.android.settingslib.widget.UsageProgressBarPreference

// LINT.IfChange
class BatteryHeaderPreference :
    PersistentPreference<Int>,
    PreferenceMetadata,
    PreferenceBinding,
    PreferenceLifecycleProvider {
    PreferenceLifecycleProvider,
    RangeValue {

    @VisibleForTesting
    var batteryBroadcastReceiver: BatteryBroadcastReceiver? = null
    @VisibleForTesting var batteryBroadcastReceiver: BatteryBroadcastReceiver? = null

    override val key: String
        get() = KEY
@@ -58,7 +64,8 @@ class BatteryHeaderPreference :

    override fun onCreate(context: PreferenceLifecycleContext) {
        super.onCreate(context)
        batteryBroadcastReceiver = BatteryBroadcastReceiver(context).apply {
        batteryBroadcastReceiver =
            BatteryBroadcastReceiver(context).apply {
                setBatteryChangedListener {
                    if (it != BATTERY_NOT_PRESENT) {
                        context.notifyPreferenceChange(KEY)
@@ -69,14 +76,38 @@ class BatteryHeaderPreference :

    override fun onStart(context: PreferenceLifecycleContext) {
        super.onStart(context)
        batteryBroadcastReceiver?.register();
        batteryBroadcastReceiver?.register()
    }

    override fun onStop(context: PreferenceLifecycleContext) {
        super.onStop(context)
        batteryBroadcastReceiver?.unRegister();
        batteryBroadcastReceiver?.unRegister()
    }

    override fun storage(context: Context): KeyValueStore =
        object : NoOpKeyedObservable<String>(), KeyValueStore {
            override fun contains(key: String) = BatteryUtils.getBatteryIntent(context) != null

            @Suppress("UNCHECKED_CAST")
            override fun <T : Any> getValue(key: String, valueType: Class<T>): T? {
                val batteryIntent = BatteryUtils.getBatteryIntent(context) ?: return null
                return Utils.getBatteryLevel(batteryIntent) as T
            }

            override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) =
                throw UnsupportedOperationException()
        }

    override fun getMinValue(context: Context): Int = 0

    override fun getMaxValue(context: Context): Int = 100

    override fun getReadPermit(context: Context, myUid: Int, callingUid: Int) =
        ReadWritePermit.ALLOW

    override fun getWritePermit(context: Context, value: Int?, myUid: Int, callingUid: Int) =
        ReadWritePermit.DISALLOW

    companion object {
        private const val KEY = "battery_header"
        private const val BATTERY_MAX_LEVEL: Long = 100L