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

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

[Battery] Use un-deprecated BatteryInteractor if flag is on.

Bug: 434194794
Flag: com.android.systemui.status_bar_universal_battery_data_source
Test: Verify dream shows if phone is charging with flag both off and on
Test: atest CommunalAutoOpenInteractorTest
FromDreamingTransitionInteractorTest
LowLightBehaviorCoreStartableTest

Change-Id: If38ad8b11f9f945934b50d21ccf6d056bad71d29
parent c54c959c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -382,6 +382,16 @@ flag {
    }
}

flag {
    name: "status_bar_universal_battery_data_source"
    namespace: "systemui"
    description: "Refactors SysUI to always use the battery data source in status bar"
    bug: "434194794"
    metadata {
      purpose: PURPOSE_BUGFIX
    }
}

flag {
  name: "status_bar_system_status_icons_in_compose"
  namespace: "systemui"
+128 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.communal.domain.interactor

import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -39,6 +40,9 @@ import com.android.systemui.kosmos.advanceTimeBy
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.statusbar.pipeline.battery.shared.StatusBarUniversalBatteryDataSource
import com.android.systemui.statusbar.policy.batteryController
import com.android.systemui.statusbar.policy.fake
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.FakeUserRepository.Companion.MAIN_USER_ID
import com.android.systemui.user.data.repository.fakeUserRepository
@@ -72,7 +76,8 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() {
    }

    @Test
    fun testStartWhileCharging() =
    @DisableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartWhileCharging_universalBatteryFlagOff() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)
@@ -96,7 +101,33 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() {
        }

    @Test
    fun testStartWhileDocked() =
    @EnableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartWhileCharging_universalBatteryFlagOn() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)

            fakeSettings.putIntForUser(
                Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB,
                Settings.Secure.GLANCEABLE_HUB_START_CHARGING,
                MAIN_USER_ID,
            )

            batteryController.fake._isPluggedIn = false
            assertThat(shouldAutoOpen).isFalse()
            assertThat(suppressionReason)
                .isEqualTo(
                    SuppressionReason.ReasonWhenToAutoShow(FEATURE_AUTO_OPEN or FEATURE_MANUAL_OPEN)
                )

            batteryController.fake._isPluggedIn = true
            assertThat(shouldAutoOpen).isTrue()
            assertThat(suppressionReason).isNull()
        }

    @Test
    @DisableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartWhileDocked_universalBatteryFlagOff() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)
@@ -123,7 +154,36 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() {
        }

    @Test
    fun testStartWhilePostured() =
    @EnableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartWhileDocked_universalBatteryFlagOn() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)

            fakeSettings.putIntForUser(
                Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB,
                Settings.Secure.GLANCEABLE_HUB_START_DOCKED,
                MAIN_USER_ID,
            )

            batteryController.fake._isPluggedIn = true
            fakeDockManager.setIsDocked(false)

            assertThat(shouldAutoOpen).isFalse()
            assertThat(suppressionReason)
                .isEqualTo(
                    SuppressionReason.ReasonWhenToAutoShow(FEATURE_AUTO_OPEN or FEATURE_MANUAL_OPEN)
                )

            fakeDockManager.setIsDocked(true)
            fakeDockManager.setDockEvent(DockManager.STATE_DOCKED)
            assertThat(shouldAutoOpen).isTrue()
            assertThat(suppressionReason).isNull()
        }

    @Test
    @DisableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartWhilePostured_universalBatteryFlagOff() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)
@@ -161,7 +221,47 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() {
        }

    @Test
    fun testStartNever() =
    @EnableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartWhilePostured_universalBatteryFlagOn() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)

            fakeSettings.putIntForUser(
                Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB,
                Settings.Secure.GLANCEABLE_HUB_START_CHARGING_UPRIGHT,
                MAIN_USER_ID,
            )

            batteryController.fake._isPluggedIn = true
            posturingRepository.fake.emitPositionState(
                PositionState(
                    stationary = ConfidenceLevel.Positive(confidence = 1f),
                    orientation = ConfidenceLevel.Negative(confidence = 1f),
                )
            )

            assertThat(shouldAutoOpen).isFalse()
            assertThat(suppressionReason)
                .isEqualTo(
                    SuppressionReason.ReasonWhenToAutoShow(FEATURE_AUTO_OPEN or FEATURE_MANUAL_OPEN)
                )

            advanceTimeBy(1.milliseconds)
            posturingRepository.fake.emitPositionState(
                PositionState(
                    stationary = ConfidenceLevel.Positive(confidence = 1f),
                    orientation = ConfidenceLevel.Positive(confidence = 1f),
                )
            )
            advanceTimeBySlidingWindowAndRun()
            assertThat(shouldAutoOpen).isTrue()
            assertThat(suppressionReason).isNull()
        }

    @Test
    @DisableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartNever_universalBatteryFlagOff() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)
@@ -176,6 +276,30 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() {
            posturingRepository.fake.emitPositionState(PositionState())
            fakeDockManager.setIsDocked(true)

            assertThat(shouldAutoOpen).isFalse()
            assertThat(suppressionReason)
                .isEqualTo(
                    SuppressionReason.ReasonWhenToAutoShow(FEATURE_AUTO_OPEN or FEATURE_MANUAL_OPEN)
                )
        }

    @Test
    @EnableFlags(StatusBarUniversalBatteryDataSource.FLAG_NAME)
    fun testStartNever_universalBatteryFlagOn() =
        kosmos.runTest {
            val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen)
            val suppressionReason by collectLastValue(underTest.suppressionReason)

            fakeSettings.putIntForUser(
                Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB,
                Settings.Secure.GLANCEABLE_HUB_START_NEVER,
                MAIN_USER_ID,
            )

            batteryController.fake._isPluggedIn = true
            posturingRepository.fake.emitPositionState(PositionState())
            fakeDockManager.setIsDocked(true)

            assertThat(shouldAutoOpen).isFalse()
            assertThat(suppressionReason)
                .isEqualTo(
+8 −1
Original line number Diff line number Diff line
@@ -50,6 +50,9 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
import com.android.systemui.statusbar.pipeline.battery.shared.StatusBarUniversalBatteryDataSource
import com.android.systemui.statusbar.policy.batteryController
import com.android.systemui.statusbar.policy.fake
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.settings.fakeSettings
@@ -215,7 +218,11 @@ class FromDreamingTransitionInteractorTest(flags: FlagsParameterization?) : Sysu
                    1,
                    user.id,
                )
                if (StatusBarUniversalBatteryDataSource.isEnabled) {
                    batteryController.fake._isPluggedIn = true
                } else {
                    batteryRepositoryDeprecated.fake.setDevicePluggedIn(true)
                }
            } else {
                whenever(dreamManager.canStartDreaming(anyBoolean())).thenReturn(true)
            }
+10 −1
Original line number Diff line number Diff line
@@ -49,6 +49,10 @@ import com.android.systemui.lowlightclock.LowLightLogger
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.res.R
import com.android.systemui.statusbar.pipeline.battery.domain.interactor.batteryInteractor
import com.android.systemui.statusbar.pipeline.battery.shared.StatusBarUniversalBatteryDataSource
import com.android.systemui.statusbar.policy.batteryController
import com.android.systemui.statusbar.policy.fake
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.user.domain.interactor.selectedUserInteractor
@@ -88,6 +92,7 @@ class LowLightBehaviorCoreStartableTest : SysuiTestCase() {
                lowLightShellCommand = lowLightShellCommand,
                scope = backgroundScope,
                batteryInteractorDeprecated = batteryInteractorDeprecated,
                batteryInteractor = batteryInteractor,
            )
        }

@@ -96,8 +101,12 @@ class LowLightBehaviorCoreStartableTest : SysuiTestCase() {
    }

    private fun Kosmos.setBatteryPluggedIn(pluggedIn: Boolean) {
        if (StatusBarUniversalBatteryDataSource.isEnabled) {
            batteryController.fake._isPluggedIn = pluggedIn
        } else {
            batteryRepositoryDeprecated.fake.setDevicePluggedIn(pluggedIn)
        }
    }

    private fun Kosmos.setDreamEnabled(enabled: Boolean) {
        fakeSettings.putBoolForUser(
+12 −6
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.common.data.repository

import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.statusbar.pipeline.battery.shared.StatusBarUniversalBatteryDataSource
import com.android.systemui.statusbar.policy.BatteryController
import com.android.systemui.util.kotlin.isDevicePluggedIn
import javax.inject.Inject
@@ -39,12 +40,17 @@ interface BatteryRepositoryDeprecated {
)
class BatteryRepositoryDeprecatedImpl
@Inject
constructor(@Background bgScope: CoroutineScope, batteryController: BatteryController) :
    BatteryRepositoryDeprecated {
constructor(
    @Background private val bgScope: CoroutineScope,
    private val batteryController: BatteryController,
) : BatteryRepositoryDeprecated {

    /** Returns {@code true} if the device is currently plugged in or wireless charging. */
    override val isDevicePluggedIn: Flow<Boolean> =
        batteryController
    override val isDevicePluggedIn: Flow<Boolean>
        get() {
            StatusBarUniversalBatteryDataSource.assertInLegacyMode()
            return batteryController
                .isDevicePluggedIn()
                .stateIn(bgScope, SharingStarted.WhileSubscribed(), batteryController.isPluggedIn)
        }
}
Loading