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

Commit eacb68c5 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Android (Google) Code Review
Browse files

Merge changes from topics "caitlinshk-battery-extreme", "caitlinshk-battery-qs" into main

* changes:
  [Battery] Add extreme power save to BatteryRepository.
  [Battery] Use existing repository flows for new QS tiles.
parents bc4ddbb1 e715d86a
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.qs.tiles.impl.battery.doman.interactor

import android.os.UserHandle
import android.testing.LeakCheck
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
@@ -25,8 +24,10 @@ import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.tiles.base.domain.model.DataUpdateTrigger
import com.android.systemui.qs.tiles.impl.battery.domain.interactor.BatterySaverTileDataInteractor
import com.android.systemui.statusbar.pipeline.battery.data.repository.batteryRepository
import com.android.systemui.statusbar.policy.batteryController
import com.android.systemui.statusbar.policy.fake
import com.android.systemui.testKosmos
import com.android.systemui.utils.leaks.FakeBatteryController
import com.google.common.truth.Truth
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.toCollection
@@ -40,10 +41,9 @@ import org.junit.runner.RunWith
class BatterySaverTileDataInteractorTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val batteryController = FakeBatteryController(LeakCheck())
    private val batteryController = kosmos.batteryController.fake
    private val testUser = UserHandle.of(1)
    private val underTest =
        BatterySaverTileDataInteractor(testScope.testScheduler, batteryController)
    private val underTest = BatterySaverTileDataInteractor(kosmos.batteryRepository)

    @Test
    fun availability_isTrue() =
@@ -85,11 +85,11 @@ class BatterySaverTileDataInteractorTest : SysuiTestCase() {
            runCurrent()
            Truth.assertThat(data!!.isPluggedIn).isFalse()

            batteryController.isPluggedIn = true
            batteryController.fake._isPluggedIn = true
            runCurrent()
            Truth.assertThat(data!!.isPluggedIn).isTrue()

            batteryController.isPluggedIn = false
            batteryController.fake._isPluggedIn = false
            runCurrent()
            Truth.assertThat(data!!.isPluggedIn).isFalse()
        }
+6 −6
Original line number Diff line number Diff line
@@ -29,10 +29,11 @@ import com.android.systemui.camera.data.repository.fakeCameraSensorPrivacyReposi
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.tiles.base.domain.model.DataUpdateTrigger
import com.android.systemui.statusbar.pipeline.battery.data.repository.batteryRepository
import com.android.systemui.statusbar.policy.batteryController
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.whenever
import com.android.systemui.utils.leaks.FakeBatteryController
import com.android.systemui.utils.leaks.FakeRotationLockController
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.flowOf
@@ -48,7 +49,6 @@ import org.junit.runner.RunWith
class RotationLockTileDataInteractorTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val batteryController = FakeBatteryController(LeakCheck())
    private val rotationController = FakeRotationLockController(LeakCheck())
    private val fakeCameraAutoRotateRepository = kosmos.fakeCameraAutoRotateRepository
    private val fakeCameraSensorPrivacyRepository = kosmos.fakeCameraSensorPrivacyRepository
@@ -71,7 +71,7 @@ class RotationLockTileDataInteractorTest : SysuiTestCase() {
        underTest =
            RotationLockTileDataInteractor(
                rotationController,
                batteryController,
                kosmos.batteryRepository,
                fakeCameraAutoRotateRepository,
                fakeCameraSensorPrivacyRepository,
                packageManager,
@@ -124,11 +124,11 @@ class RotationLockTileDataInteractorTest : SysuiTestCase() {
            runCurrent()
            assertThat(data!!.isCameraRotationEnabled).isTrue()

            batteryController.setPowerSaveMode(true)
            kosmos.batteryController.setPowerSaveMode(true)
            runCurrent()
            assertThat(data!!.isCameraRotationEnabled).isFalse()

            batteryController.setPowerSaveMode(false)
            kosmos.batteryController.setPowerSaveMode(false)
            runCurrent()
            assertThat(data!!.isCameraRotationEnabled).isTrue()
        }
@@ -211,7 +211,7 @@ class RotationLockTileDataInteractorTest : SysuiTestCase() {

    private fun setupControllersToEnableCameraRotation() {
        rotationController.setRotationLocked(true, CALLER)
        batteryController.setPowerSaveMode(false)
        kosmos.batteryController.setPowerSaveMode(false)
        fakeCameraSensorPrivacyRepository.setEnabled(testUser, false)
        fakeCameraAutoRotateRepository.setEnabled(testUser, true)
    }
+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 {
+6 −18
Original line number Diff line number Diff line
@@ -17,41 +17,29 @@
package com.android.systemui.qs.tiles.impl.battery.domain.interactor

import android.os.UserHandle
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.qs.tiles.base.domain.interactor.QSTileDataInteractor
import com.android.systemui.qs.tiles.base.domain.model.DataUpdateTrigger
import com.android.systemui.qs.tiles.impl.battery.domain.model.BatterySaverTileModel
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.util.kotlin.getBatteryLevel
import com.android.systemui.util.kotlin.isBatteryPowerSaveEnabled
import com.android.systemui.util.kotlin.isDevicePluggedIn
import com.android.systemui.statusbar.pipeline.battery.data.repository.BatteryRepository
import javax.inject.Inject
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn

/** Observes BatterySaver mode state changes providing the [BatterySaverTileModel.Standard]. */
open class BatterySaverTileDataInteractor
@Inject
constructor(
    @Background private val bgCoroutineContext: CoroutineContext,
    private val batteryController: BatteryController,
) : QSTileDataInteractor<BatterySaverTileModel> {
constructor(private val batteryRepository: BatteryRepository) :
    QSTileDataInteractor<BatterySaverTileModel> {

    override fun tileData(
        user: UserHandle,
        triggers: Flow<DataUpdateTrigger>,
    ): Flow<BatterySaverTileModel> =
        combine(
            batteryController.isDevicePluggedIn().distinctUntilChanged().flowOn(bgCoroutineContext),
            batteryController
                .isBatteryPowerSaveEnabled()
                .distinctUntilChanged()
                .flowOn(bgCoroutineContext),
            batteryController.getBatteryLevel().distinctUntilChanged().flowOn(bgCoroutineContext),
            batteryRepository.isPluggedIn,
            batteryRepository.isPowerSaveEnabled,
            batteryRepository.level,
        ) {
            isPluggedIn: Boolean,
            isPowerSaverEnabled: Boolean,
+3 −4
Original line number Diff line number Diff line
@@ -26,9 +26,8 @@ import com.android.systemui.qs.tiles.base.domain.interactor.QSTileDataInteractor
import com.android.systemui.qs.tiles.base.domain.model.DataUpdateTrigger
import com.android.systemui.qs.tiles.impl.rotation.domain.model.RotationLockTileModel
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.statusbar.pipeline.battery.data.repository.BatteryRepository
import com.android.systemui.statusbar.policy.RotationLockController
import com.android.systemui.util.kotlin.isBatteryPowerSaveEnabled
import com.android.systemui.util.kotlin.isRotationLockEnabled
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -40,7 +39,7 @@ class RotationLockTileDataInteractor
@Inject
constructor(
    private val rotationLockController: RotationLockController,
    private val batteryController: BatteryController,
    private val batteryRepository: BatteryRepository,
    private val cameraAutoRotateRepository: CameraAutoRotateRepository,
    private val cameraSensorPrivacyRepository: CameraSensorPrivacyRepository,
    private val packageManager: PackageManager,
@@ -54,7 +53,7 @@ constructor(
        combine(
            rotationLockController.isRotationLockEnabled(),
            cameraSensorPrivacyRepository.isEnabled(user),
            batteryController.isBatteryPowerSaveEnabled(),
            batteryRepository.isPowerSaveEnabled,
            cameraAutoRotateRepository.isCameraAutoRotateSettingEnabled(user),
        ) {
            isRotationLockEnabled,
Loading