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

Commit f64730ca authored by brycelee's avatar brycelee
Browse files

Only enable low light behavior by config when locked.

This changelist adds a configuration that determines if low light
behavior should be active before the device has been unlocked.

Test: atest LowLightBehaviorCoreStartableTest
Fixes: 411522943
Flag: EXEMPT bugfix
Change-Id: I23f4d72d0beaa548fc8de2a176d67d981d3bb980
parent 0c6eeab0
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.systemui.lowlight

import android.content.res.mockResources
import android.platform.test.annotations.EnableFlags
import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -37,12 +38,14 @@ import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.lowlight.data.repository.lowLightRepository
import com.android.systemui.lowlight.data.repository.lowLightSettingsRepository
import com.android.systemui.lowlight.domain.interactor.lowLightInteractor
import com.android.systemui.lowlight.domain.interactor.lowLightSettingInteractor
import com.android.systemui.lowlight.shared.model.LowLightDisplayBehavior
import com.android.systemui.lowlight.shell.lowLightBehaviorShellCommand
import com.android.systemui.lowlight.shell.lowLightShellCommand
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.settings.userTracker
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.fakeUserRepository
@@ -54,6 +57,7 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -68,6 +72,7 @@ class LowLightBehaviorCoreStartableTest : SysuiTestCase() {
        Kosmos.Fixture {
            LowLightBehaviorCoreStartable(
                lowLightInteractor = lowLightInteractor,
                lowLightSettingsInteractor = lowLightSettingInteractor,
                dreamSettingsInteractor = dreamSettingsInteractorKosmos,
                displayStateInteractor = displayStateInteractor,
                logger = logger,
@@ -98,6 +103,11 @@ class LowLightBehaviorCoreStartableTest : SysuiTestCase() {
        fakeUserRepository.setUserUnlocked(selectedUserInteractor.getSelectedUserId(), unlocked)
    }

    private fun Kosmos.setAllowLowLightWhenLocked(allowed: Boolean) {
        whenever(mockResources.getBoolean(R.bool.config_allowLowLightBehaviorWhenLocked))
            .thenReturn(allowed)
    }

    private val action = FakeActivatable()

    @Before
@@ -148,6 +158,28 @@ class LowLightBehaviorCoreStartableTest : SysuiTestCase() {
            assertThat(action.activationCount).isEqualTo(1)
        }

    @Test
    fun testWhenAllowLowLightBehaviorWhenLockedAndUserLocked_lowLightBehaviorActivates() =
        kosmos.runTest {
            setUserUnlocked(false)
            setAllowLowLightWhenLocked(true)
            underTest.start()
            setDisplayOn(true)

            assertThat(action.activationCount).isEqualTo(1)
        }

    @Test
    fun testWhenDisallowLowLightBehaviorWhenLockedAndUserLocked_LowLightBehaviorDoesNotActivate() =
        kosmos.runTest {
            setUserUnlocked(false)
            setAllowLowLightWhenLocked(false)
            underTest.start()
            setDisplayOn(true)

            assertThat(action.activationCount).isEqualTo(0)
        }

    @Test
    fun testSetAmbientLowLightWhenDisabledInLowLight() =
        kosmos.runTest {
+3 −0
Original line number Diff line number Diff line
@@ -1116,6 +1116,9 @@
    <!-- The dream component used when the device is low light environment. -->
    <string translatable="false" name="config_lowLightDreamComponent"/>

    <!-- Determines whether low light should be allowed pre-unlock -->
    <bool translatable="false" name="config_allowLowLightBehaviorWhenLocked">false</bool>

    <!-- Configuration for wallpaper focal area -->
    <bool name="center_align_focal_area_shape">false</bool>
    <string name="focal_area_target" translatable="false" />
+7 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.dreams.domain.interactor.DreamSettingsInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff
import com.android.systemui.lowlight.domain.interactor.LowLightInteractor
import com.android.systemui.lowlight.domain.interactor.LowLightSettingsInteractor
import com.android.systemui.lowlight.shared.model.LowLightActionEntry
import com.android.systemui.lowlight.shared.model.LowLightDisplayBehavior
import com.android.systemui.lowlight.shared.model.ScreenState
@@ -63,6 +64,7 @@ constructor(
    private val dreamSettingsInteractor: DreamSettingsInteractor,
    displayStateInteractor: DisplayStateInteractor,
    private val lowLightInteractor: LowLightInteractor,
    private val lowLightSettingsInteractor: LowLightSettingsInteractor,
    private val logger: LowLightLogger,
    @Background private val scope: CoroutineScope,
    private val userLockedInteractor: UserLockedInteractor,
@@ -168,7 +170,11 @@ constructor(
                        ),
                        anyOf(
                            isLowLight,
                            not(userLockedInteractor.isUserUnlocked(UserHandle.CURRENT)),
                            if (lowLightSettingsInteractor.allowLowLightBehaviorWhenLocked) {
                                not(userLockedInteractor.isUserUnlocked(UserHandle.CURRENT))
                            } else {
                                flowOf(false)
                            },
                        ),
                    )
                } else {
+7 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.provider.Settings
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.lowlight.shared.model.LowLightDisplayBehavior
import com.android.systemui.res.R
import com.android.systemui.util.kotlin.emitOnStart
import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
@@ -57,6 +58,8 @@ interface LowLightSettingsRepository {

    /** Sets the {@link LowLightDisplayBehavior} for the given user. */
    fun setLowLightDisplayBehavior(user: UserInfo, behavior: LowLightDisplayBehavior)

    val allowLowLightBehaviorWhenLocked: Boolean
}

class LowLightSettingsRepositoryImpl
@@ -133,6 +136,10 @@ constructor(
        )
    }

    override val allowLowLightBehaviorWhenLocked by lazy {
        resources.getBoolean(R.bool.config_allowLowLightBehaviorWhenLocked)
    }

    private fun Int.toLowLightDisplayBehavior(): LowLightDisplayBehavior {
        return when (this) {
            Settings.Secure.LOW_LIGHT_DISPLAY_BEHAVIOR_NO_DREAM -> LowLightDisplayBehavior.NO_DREAM
+3 −0
Original line number Diff line number Diff line
@@ -43,4 +43,7 @@ constructor(
        userInteractor.selectedUserInfo.flatMapLatestConflated { user ->
            settingsRepository.getLowLightDisplayBehaviorEnabled(user)
        }

    val allowLowLightBehaviorWhenLocked: Boolean
        get() = settingsRepository.allowLowLightBehaviorWhenLocked
}
Loading