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

Commit e715d86a authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[Battery] Add extreme power save to BatteryRepository.

Bug: 434194794
Flag: com.android.systemui.qs_new_tiles
Test: atest BatteryRepositoryTest
Change-Id: I08342b72e7d9b74242b227a4aeaec3bfe1a1dcc3
parent 0234daad
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -82,6 +82,18 @@ class BatteryRepositoryTest : SysuiTestCase() {
            assertThat(latest).isTrue()
        }

    @Test
    fun extremePowerSave() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.isExtremePowerSaveEnabled)

            assertThat(latest).isFalse()

            batteryController.fake._isExtremePowerSave = true

            assertThat(latest).isTrue()
        }

    @Test
    fun defend() =
        kosmos.runTest {
+24 −0
Original line number Diff line number Diff line
@@ -55,6 +55,9 @@ interface BatteryRepository {
    /** Is power saver enabled */
    val isPowerSaveEnabled: Flow<Boolean>

    /** Is extreme power saver enabled */
    val isExtremePowerSaveEnabled: Flow<Boolean>

    /** Battery defender means the device is plugged in but not charging to protect the battery */
    val isBatteryDefenderEnabled: Flow<Boolean>

@@ -112,6 +115,10 @@ constructor(
                            trySend { prev -> prev.copy(isPowerSaveEnabled = isPowerSave) }
                        }

                        override fun onExtremeBatterySaverChanged(isExtreme: Boolean) {
                            trySend { prev -> prev.copy(isExtremePowerSaveEnabled = isExtreme) }
                        }

                        override fun onIsBatteryDefenderChanged(isBatteryDefender: Boolean) {
                            trySend { prev ->
                                prev.copy(isBatteryDefenderEnabled = isBatteryDefender)
@@ -168,6 +175,21 @@ constructor(
            )
            .stateIn(scope, SharingStarted.WhileSubscribed(), batteryState.value.isPowerSaveEnabled)

    override val isExtremePowerSaveEnabled =
        batteryState
            .map { it.isExtremePowerSaveEnabled }
            .distinctUntilChanged()
            .logDiffsForTable(
                tableLogBuffer = tableLog,
                columnName = COL_EXTREME_POWER_SAVE,
                initialValue = batteryState.value.isExtremePowerSaveEnabled,
            )
            .stateIn(
                scope,
                SharingStarted.WhileSubscribed(),
                batteryState.value.isExtremePowerSaveEnabled,
            )

    override val isBatteryDefenderEnabled =
        batteryState
            .map { it.isBatteryDefenderEnabled }
@@ -267,6 +289,7 @@ constructor(
    companion object {
        private const val COL_PLUGGED_IN = "pluggedIn"
        private const val COL_POWER_SAVE = "powerSave"
        private const val COL_EXTREME_POWER_SAVE = "extremePowerSave"
        private const val COL_DEFEND = "defend"
        private const val COL_INCOMPATIBLE_CHARGING = "incompatibleCharging"
        private const val COL_LEVEL = "level"
@@ -281,6 +304,7 @@ private data class BatteryCallbackState(
    val level: Int? = null,
    val isPluggedIn: Boolean = false,
    val isPowerSaveEnabled: Boolean = false,
    val isExtremePowerSaveEnabled: Boolean = false,
    val isBatteryDefenderEnabled: Boolean = false,
    val isStateUnknown: Boolean = false,
    val isIncompatibleCharging: Boolean = false,
+0 −14
Original line number Diff line number Diff line
@@ -42,17 +42,3 @@ fun BatteryController.isDevicePluggedIn(): Flow<Boolean> {
        }
        .onStart { emit(isPluggedIn) }
}

fun BatteryController.isExtremePowerSaverEnabled(): Flow<Boolean> {
    return conflatedCallbackFlow {
            val batteryCallback =
                object : BatteryController.BatteryStateChangeCallback {
                    override fun onExtremeBatterySaverChanged(isExtreme: Boolean) {
                        trySend(isExtreme)
                    }
                }
            addCallback(batteryCallback)
            awaitClose { removeCallback(batteryCallback) }
        }
        .onStart { emit(isExtremeSaverOn) }
}
+8 −0
Original line number Diff line number Diff line
@@ -43,6 +43,14 @@ class FakeBatteryControllerImpl : BatteryController {
            }
        }

    var _isExtremePowerSave = false
        set(value) {
            if (field != value) {
                field = value
                listeners.forEach { it.onExtremeBatterySaverChanged(field) }
            }
        }

    var _isPluggedIn = false
        set(value) {
            if (field != value) {