Merge "[Catalyst] Use the AbstractKeyedDataObservable in BatterySaverStore" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
509c1d7834
@@ -21,27 +21,26 @@ import android.os.PowerManager
|
|||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.fuelgauge.BatterySaverReceiver
|
import com.android.settings.fuelgauge.BatterySaverReceiver
|
||||||
import com.android.settings.fuelgauge.BatterySaverReceiver.BatterySaverListener
|
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.KeyValueStore
|
||||||
import com.android.settingslib.datastore.NoOpKeyedObservable
|
|
||||||
import com.android.settingslib.datastore.Permissions
|
import com.android.settingslib.datastore.Permissions
|
||||||
import com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_SETTINGS
|
import com.android.settingslib.fuelgauge.BatterySaverLogging.SAVER_ENABLED_SETTINGS
|
||||||
import com.android.settingslib.fuelgauge.BatterySaverUtils
|
import com.android.settingslib.fuelgauge.BatterySaverUtils
|
||||||
import com.android.settingslib.fuelgauge.BatteryStatus
|
import com.android.settingslib.fuelgauge.BatteryStatus
|
||||||
import com.android.settingslib.fuelgauge.BatteryUtils
|
import com.android.settingslib.fuelgauge.BatteryUtils
|
||||||
import com.android.settingslib.metadata.MainSwitchPreference
|
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.ReadWritePermit
|
||||||
import com.android.settingslib.metadata.SensitivityLevel
|
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.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
// LINT.IfChange
|
// LINT.IfChange
|
||||||
class BatterySaverPreference :
|
class BatterySaverPreference :
|
||||||
MainSwitchPreference(KEY, R.string.battery_saver_master_switch_title),
|
MainSwitchPreference(KEY, R.string.battery_saver_master_switch_title) {
|
||||||
PreferenceLifecycleProvider {
|
|
||||||
|
|
||||||
private var batterySaverReceiver: BatterySaverReceiver? = null
|
|
||||||
|
|
||||||
override fun storage(context: Context) = BatterySaverStore(context)
|
override fun storage(context: Context) = BatterySaverStore(context)
|
||||||
|
|
||||||
@@ -66,34 +65,12 @@ class BatterySaverPreference :
|
|||||||
override fun isEnabled(context: Context) =
|
override fun isEnabled(context: Context) =
|
||||||
!BatteryStatus(BatteryUtils.getBatteryIntent(context)).isPluggedIn
|
!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")
|
@Suppress("UNCHECKED_CAST")
|
||||||
class BatterySaverStore(private val context: Context) :
|
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 contains(key: String) = key == KEY
|
||||||
|
|
||||||
override fun <T : Any> getValue(key: String, valueType: Class<T>) =
|
override fun <T : Any> getValue(key: String, valueType: Class<T>) =
|
||||||
@@ -110,6 +87,30 @@ class BatterySaverPreference :
|
|||||||
|
|
||||||
private fun Context.isPowerSaveMode() =
|
private fun Context.isPowerSaveMode() =
|
||||||
getSystemService(PowerManager::class.java)?.isPowerSaveMode == true
|
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 {
|
companion object {
|
||||||
|
Reference in New Issue
Block a user