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

Commit 22bcee4a authored by Bryce Lee's avatar Bryce Lee
Browse files

Support transitioning from doze to dream from button press.

This changelist enables going directly from dozing to dreaming from a
power button press. This is accomplished by initiating a dream rather
than waking up. Transitions are suppressed in SystemUI by tracking
the wake reason.

Test: atest DozingToDreamingTransitionViewModelTest
Bug: 389155961
Flag: com.android.systemui.glanceable_hub_v2
Change-Id: Id7621b5466caec2863e76e0257197afa86a4064c
parent 58c5cc13
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.keyguard.ui.viewmodel

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.collectValues
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith

@SmallTest
@RunWith(AndroidJUnit4::class)
class DozingToDreamingTransitionViewModelTest : SysuiTestCase() {
    val kosmos = testKosmos()

    val underTest by lazy { kosmos.dozingToDreamingTransitionViewModel }

    @Test
    fun notificationShadeAlpha() =
        kosmos.runTest {
            val values by collectValues(underTest.notificationAlpha)
            assertThat(values).isEmpty()

            fakeKeyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.DOZING,
                to = KeyguardState.DREAMING,
                testScope,
            )

            assertThat(values).isNotEmpty()
            values.forEach { assertThat(it).isEqualTo(0) }
        }
}
+8 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ constructor(
                    val isKeyguardOccludedLegacy = keyguardInteractor.isKeyguardOccluded.value
                    val primaryBouncerShowing = keyguardInteractor.primaryBouncerShowing.value
                    val isKeyguardGoingAway = keyguardInteractor.isKeyguardGoingAway.value
                    val canStartDreaming = dreamManager.canStartDreaming(false)

                    if (!deviceEntryInteractor.isLockscreenEnabled()) {
                        if (!SceneContainerFlag.isEnabled) {
@@ -197,6 +198,13 @@ constructor(
                        if (!SceneContainerFlag.isEnabled) {
                            transitionToGlanceableHub()
                        }
                    } else if (canStartDreaming) {
                        // If we're waking up to dream, transition directly to dreaming without
                        // showing the lockscreen.
                        startTransitionTo(
                            KeyguardState.DREAMING,
                            ownerReason = "moving from doze to dream",
                        )
                    } else {
                        startTransitionTo(KeyguardState.LOCKSCREEN)
                    }
+2 −0
Original line number Diff line number Diff line
@@ -39,4 +39,6 @@ constructor(animationFlow: KeyguardTransitionAnimationFlow) {
        )

    val lockscreenAlpha: Flow<Float> = transitionAnimation.immediatelyTransitionTo(0f)
    // Notifications should not be shown while transitioning to dream.
    val notificationAlpha = transitionAnimation.immediatelyTransitionTo(0f)
}
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.systemui.keyguard.ui.viewmodel.AodToGoneTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.AodToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.AodToOccludedTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.AodToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToDreamingTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToGlanceableHubTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToOccludedTransitionViewModel
@@ -136,6 +137,7 @@ constructor(
    private val aodToLockscreenTransitionViewModel: AodToLockscreenTransitionViewModel,
    private val aodToOccludedTransitionViewModel: AodToOccludedTransitionViewModel,
    private val aodToPrimaryBouncerTransitionViewModel: AodToPrimaryBouncerTransitionViewModel,
    private val dozingToDreamingTransitionViewModel: DozingToDreamingTransitionViewModel,
    dozingToGlanceableHubTransitionViewModel: DozingToGlanceableHubTransitionViewModel,
    private val dozingToLockscreenTransitionViewModel: DozingToLockscreenTransitionViewModel,
    private val dozingToOccludedTransitionViewModel: DozingToOccludedTransitionViewModel,
@@ -572,6 +574,7 @@ constructor(
            aodToLockscreenTransitionViewModel.notificationAlpha,
            aodToOccludedTransitionViewModel.lockscreenAlpha(viewState),
            aodToPrimaryBouncerTransitionViewModel.notificationAlpha,
            dozingToDreamingTransitionViewModel.notificationAlpha,
            dozingToLockscreenTransitionViewModel.lockscreenAlpha,
            dozingToOccludedTransitionViewModel.lockscreenAlpha(viewState),
            dozingToPrimaryBouncerTransitionViewModel.notificationAlpha,
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.keyguard.ui.viewmodel.aodToGoneTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.aodToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.aodToOccludedTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.aodToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToDreamingTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToGlanceableHubTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToOccludedTransitionViewModel
@@ -81,6 +82,7 @@ val Kosmos.sharedNotificationContainerViewModel by Fixture {
        aodToLockscreenTransitionViewModel = aodToLockscreenTransitionViewModel,
        aodToOccludedTransitionViewModel = aodToOccludedTransitionViewModel,
        aodToPrimaryBouncerTransitionViewModel = aodToPrimaryBouncerTransitionViewModel,
        dozingToDreamingTransitionViewModel = dozingToDreamingTransitionViewModel,
        dozingToGlanceableHubTransitionViewModel = dozingToGlanceableHubTransitionViewModel,
        dozingToLockscreenTransitionViewModel = dozingToLockscreenTransitionViewModel,
        dozingToOccludedTransitionViewModel = dozingToOccludedTransitionViewModel,
Loading