Loading src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt +34 −33 Original line number Diff line number Diff line Loading @@ -21,27 +21,26 @@ import android.os.PowerManager import com.android.settings.R import com.android.settings.fuelgauge.BatterySaverReceiver import com.android.settings.fuelgauge.BatterySaverReceiver.BatterySaverListener import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.Permissions import com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_SETTINGS import com.android.settingslib.fuelgauge.BatterySaverUtils import com.android.settingslib.fuelgauge.BatteryStatus import com.android.settingslib.fuelgauge.BatteryUtils import com.android.settingslib.metadata.MainSwitchPreference import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SensitivityLevel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.launch // LINT.IfChange class BatterySaverPreference : MainSwitchPreference(KEY, R.string.battery_saver_master_switch_title), PreferenceLifecycleProvider { private var batterySaverReceiver: BatterySaverReceiver? = null MainSwitchPreference(KEY, R.string.battery_saver_master_switch_title) { override fun storage(context: Context) = BatterySaverStore(context) Loading @@ -66,34 +65,12 @@ class BatterySaverPreference : override fun isEnabled(context: Context) = !BatteryStatus(BatteryUtils.getBatteryIntent(context)).isPluggedIn override fun onStart(context: PreferenceLifecycleContext) { BatterySaverReceiver(context).apply { batterySaverReceiver = this setBatterySaverListener( object : BatterySaverListener { override fun onPowerSaveModeChanged() { context.lifecycleScope.launch { delay(SWITCH_ANIMATION_DURATION) context.notifyPreferenceChange(KEY) } } override fun onBatteryChanged(pluggedIn: Boolean) = context.notifyPreferenceChange(KEY) } ) setListening(true) } } override fun onStop(context: PreferenceLifecycleContext) { batterySaverReceiver?.setListening(false) batterySaverReceiver = null } @Suppress("UNCHECKED_CAST") class BatterySaverStore(private val context: Context) : NoOpKeyedObservable<String>(), KeyValueStore { AbstractKeyedDataObservable<String>(), KeyValueStore, BatterySaverListener { private lateinit var batterySaverReceiver: BatterySaverReceiver private lateinit var scope: CoroutineScope override fun contains(key: String) = key == KEY override fun <T : Any> getValue(key: String, valueType: Class<T>) = Loading @@ -110,6 +87,30 @@ class BatterySaverPreference : private fun Context.isPowerSaveMode() = getSystemService(PowerManager::class.java)?.isPowerSaveMode == true override fun onFirstObserverAdded() { scope = CoroutineScope(Dispatchers.Main) batterySaverReceiver = BatterySaverReceiver(context).apply { setBatterySaverListener(this@BatterySaverStore) setListening(true) } } override fun onLastObserverRemoved() { scope.cancel() batterySaverReceiver.setListening(false) } override fun onPowerSaveModeChanged() { scope.launch { delay(SWITCH_ANIMATION_DURATION) notifyChange(KEY, DataChangeReason.UPDATE) } } override fun onBatteryChanged(pluggedIn: Boolean) = notifyChange(KEY, DataChangeReason.UPDATE) } companion object { Loading Loading
src/com/android/settings/fuelgauge/batterysaver/BatterySaverPreference.kt +34 −33 Original line number Diff line number Diff line Loading @@ -21,27 +21,26 @@ import android.os.PowerManager import com.android.settings.R import com.android.settings.fuelgauge.BatterySaverReceiver import com.android.settings.fuelgauge.BatterySaverReceiver.BatterySaverListener import com.android.settingslib.datastore.AbstractKeyedDataObservable import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.NoOpKeyedObservable import com.android.settingslib.datastore.Permissions import com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_SETTINGS import com.android.settingslib.fuelgauge.BatterySaverUtils import com.android.settingslib.fuelgauge.BatteryStatus import com.android.settingslib.fuelgauge.BatteryUtils import com.android.settingslib.metadata.MainSwitchPreference import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.SensitivityLevel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.launch // LINT.IfChange class BatterySaverPreference : MainSwitchPreference(KEY, R.string.battery_saver_master_switch_title), PreferenceLifecycleProvider { private var batterySaverReceiver: BatterySaverReceiver? = null MainSwitchPreference(KEY, R.string.battery_saver_master_switch_title) { override fun storage(context: Context) = BatterySaverStore(context) Loading @@ -66,34 +65,12 @@ class BatterySaverPreference : override fun isEnabled(context: Context) = !BatteryStatus(BatteryUtils.getBatteryIntent(context)).isPluggedIn override fun onStart(context: PreferenceLifecycleContext) { BatterySaverReceiver(context).apply { batterySaverReceiver = this setBatterySaverListener( object : BatterySaverListener { override fun onPowerSaveModeChanged() { context.lifecycleScope.launch { delay(SWITCH_ANIMATION_DURATION) context.notifyPreferenceChange(KEY) } } override fun onBatteryChanged(pluggedIn: Boolean) = context.notifyPreferenceChange(KEY) } ) setListening(true) } } override fun onStop(context: PreferenceLifecycleContext) { batterySaverReceiver?.setListening(false) batterySaverReceiver = null } @Suppress("UNCHECKED_CAST") class BatterySaverStore(private val context: Context) : NoOpKeyedObservable<String>(), KeyValueStore { AbstractKeyedDataObservable<String>(), KeyValueStore, BatterySaverListener { private lateinit var batterySaverReceiver: BatterySaverReceiver private lateinit var scope: CoroutineScope override fun contains(key: String) = key == KEY override fun <T : Any> getValue(key: String, valueType: Class<T>) = Loading @@ -110,6 +87,30 @@ class BatterySaverPreference : private fun Context.isPowerSaveMode() = getSystemService(PowerManager::class.java)?.isPowerSaveMode == true override fun onFirstObserverAdded() { scope = CoroutineScope(Dispatchers.Main) batterySaverReceiver = BatterySaverReceiver(context).apply { setBatterySaverListener(this@BatterySaverStore) setListening(true) } } override fun onLastObserverRemoved() { scope.cancel() batterySaverReceiver.setListening(false) } override fun onPowerSaveModeChanged() { scope.launch { delay(SWITCH_ANIMATION_DURATION) notifyChange(KEY, DataChangeReason.UPDATE) } } override fun onBatteryChanged(pluggedIn: Boolean) = notifyChange(KEY, DataChangeReason.UPDATE) } companion object { Loading