diff options
9 files changed, 70 insertions, 38 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/shared/flag/ComposeBouncerFlags.kt b/packages/SystemUI/src/com/android/systemui/bouncer/shared/flag/ComposeBouncerFlags.kt index a1111f68f1ee..d7a4863bde02 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/shared/flag/ComposeBouncerFlags.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/shared/flag/ComposeBouncerFlags.kt @@ -21,6 +21,10 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag object ComposeBouncerFlags { + /** @see [isComposeBouncerOrSceneContainerEnabled] */ + val isEnabled: Boolean + get() = isComposeBouncerOrSceneContainerEnabled() + /** * Returns `true` if the Compose bouncer is enabled or if the scene container framework is * enabled; `false` otherwise. diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt index 7801c00d83b8..60c53863535d 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt @@ -18,6 +18,7 @@ package com.android.systemui.keyguard.domain.interactor import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor +import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor @@ -32,6 +33,7 @@ import com.android.systemui.scene.domain.resolver.NotifShadeSceneFamilyResolver import com.android.systemui.scene.domain.resolver.QuickSettingsSceneFamilyResolver import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.util.kotlin.Utils.Companion.sampleFilter import com.android.systemui.util.kotlin.sample import javax.inject.Inject @@ -44,6 +46,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNot +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.stateIn @@ -58,12 +61,14 @@ constructor( transitionInteractor: KeyguardTransitionInteractor, val dismissInteractor: KeyguardDismissInteractor, @Application private val applicationScope: CoroutineScope, - sceneInteractor: SceneInteractor, - deviceEntryInteractor: DeviceEntryInteractor, - quickSettingsSceneFamilyResolver: QuickSettingsSceneFamilyResolver, - notifShadeSceneFamilyResolver: NotifShadeSceneFamilyResolver, + sceneInteractor: dagger.Lazy<SceneInteractor>, + deviceEntryInteractor: dagger.Lazy<DeviceEntryInteractor>, + quickSettingsSceneFamilyResolver: dagger.Lazy<QuickSettingsSceneFamilyResolver>, + notifShadeSceneFamilyResolver: dagger.Lazy<NotifShadeSceneFamilyResolver>, powerInteractor: PowerInteractor, alternateBouncerInteractor: AlternateBouncerInteractor, + keyguardInteractor: dagger.Lazy<KeyguardInteractor>, + shadeInteractor: dagger.Lazy<ShadeInteractor>, ) { val dismissAction: Flow<DismissAction> = repository.dismissAction @@ -98,15 +103,31 @@ constructor( * device is unlocked. Else, false. */ private val isOnShadeWhileUnlocked: Flow<Boolean> = - combine( - sceneInteractor.currentScene, - deviceEntryInteractor.isUnlocked, - ) { scene, isUnlocked -> - isUnlocked && - (quickSettingsSceneFamilyResolver.includesScene(scene) || - notifShadeSceneFamilyResolver.includesScene(scene)) + if (SceneContainerFlag.isEnabled) { + combine( + sceneInteractor.get().currentScene, + deviceEntryInteractor.get().isUnlocked, + ) { scene, isUnlocked -> + isUnlocked && + (quickSettingsSceneFamilyResolver.get().includesScene(scene) || + notifShadeSceneFamilyResolver.get().includesScene(scene)) + } + .distinctUntilChanged() + } else if (ComposeBouncerFlags.isOnlyComposeBouncerEnabled()) { + shadeInteractor.get().isAnyExpanded.sample( + keyguardInteractor.get().isKeyguardDismissible + ) { isAnyExpanded, isKeyguardDismissible -> + isAnyExpanded && isKeyguardDismissible + } + } else { + flow { + error( + "This should not be used when both SceneContainerFlag " + + "and ComposeBouncerFlag are disabled" + ) } - .distinctUntilChanged() + } + val executeDismissAction: Flow<() -> KeyguardDone> = merge( finishedTransitionToGone, diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissActionBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissActionBinder.kt index 74a7262d7889..69cb6a92137f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissActionBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissActionBinder.kt @@ -17,11 +17,11 @@ package com.android.systemui.keyguard.ui.binder import com.android.keyguard.logging.KeyguardLogger import com.android.systemui.CoreStartable +import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor import com.android.systemui.log.core.LogLevel -import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.util.kotlin.sample import dagger.Lazy import javax.inject.Inject @@ -41,7 +41,7 @@ constructor( ) : CoreStartable { override fun start() { - if (!SceneContainerFlag.isEnabled) { + if (!ComposeBouncerFlags.isEnabled) { return } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt index ac24591d69d7..b55f813a1f84 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt @@ -18,13 +18,12 @@ package com.android.systemui.keyguard.ui.binder import com.android.keyguard.ViewMediatorCallback import com.android.keyguard.logging.KeyguardLogger import com.android.systemui.CoreStartable +import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application -import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.keyguard.domain.interactor.KeyguardDismissInteractor import com.android.systemui.keyguard.shared.model.KeyguardDone import com.android.systemui.log.core.LogLevel -import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.user.domain.interactor.SelectedUserInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope @@ -40,11 +39,10 @@ constructor( private val viewMediatorCallback: ViewMediatorCallback, @Application private val scope: CoroutineScope, private val keyguardLogger: KeyguardLogger, - private val featureFlags: FeatureFlagsClassic, ) : CoreStartable { override fun start() { - if (!SceneContainerFlag.isEnabled) { + if (!ComposeBouncerFlags.isEnabled) { return } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/BouncerToGoneFlows.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/BouncerToGoneFlows.kt index 8485a265fc70..1edfec8f9e68 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/BouncerToGoneFlows.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/BouncerToGoneFlows.kt @@ -18,6 +18,7 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.app.animation.Interpolators.EMPHASIZED_ACCELERATE import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor +import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState @@ -25,7 +26,6 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER import com.android.systemui.keyguard.shared.model.ScrimAlpha import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow -import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.SysuiStatusBarStateController @@ -51,7 +51,7 @@ constructor( ) { /** Common fade for scrim alpha values during *BOUNCER->GONE */ fun scrimAlpha(duration: Duration, fromState: KeyguardState): Flow<ScrimAlpha> { - return if (SceneContainerFlag.isEnabled) { + return if (ComposeBouncerFlags.isEnabled) { keyguardDismissActionInteractor .get() .willAnimateDismissActionOnLockscreen diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToGoneTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToGoneTransitionViewModel.kt index 8811908e1d45..17c678e79d8b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToGoneTransitionViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToGoneTransitionViewModel.kt @@ -17,6 +17,7 @@ package com.android.systemui.keyguard.ui.viewmodel import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor +import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor.Companion.TO_GONE_DURATION import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor @@ -25,7 +26,6 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER import com.android.systemui.keyguard.shared.model.ScrimAlpha import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow -import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.statusbar.SysuiStatusBarStateController import dagger.Lazy import javax.inject.Inject @@ -85,7 +85,7 @@ constructor( /** Bouncer container alpha */ val bouncerAlpha: Flow<Float> = - if (SceneContainerFlag.isEnabled) { + if (ComposeBouncerFlags.isEnabled) { keyguardDismissActionInteractor .get() .willAnimateDismissActionOnLockscreen @@ -110,7 +110,7 @@ constructor( /** Lockscreen alpha */ val lockscreenAlpha: Flow<Float> = - if (SceneContainerFlag.isEnabled) { + if (ComposeBouncerFlags.isEnabled) { keyguardDismissActionInteractor .get() .willAnimateDismissActionOnLockscreen diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index f3b937100db2..1ea26e5727ac 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -61,6 +61,7 @@ import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; +import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags; import com.android.systemui.bouncer.ui.BouncerView; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; @@ -70,8 +71,8 @@ import com.android.systemui.dock.DockManager; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.keyguard.DismissCallbackRegistry; import com.android.systemui.keyguard.KeyguardWmStateRefactor; -import com.android.systemui.keyguard.domain.interactor.KeyguardDismissTransitionInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor; +import com.android.systemui.keyguard.domain.interactor.KeyguardDismissTransitionInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor; import com.android.systemui.keyguard.shared.model.DismissAction; import com.android.systemui.keyguard.shared.model.Edge; @@ -839,7 +840,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb public void dismissWithAction(OnDismissAction r, Runnable cancelAction, boolean afterKeyguardGone, String message) { - if (SceneContainerFlag.isEnabled()) { + if (ComposeBouncerFlags.INSTANCE.isEnabled()) { if (r == null) { return; } @@ -891,7 +892,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb return; } - if (!SceneContainerFlag.isEnabled()) { + if (!ComposeBouncerFlags.INSTANCE.isEnabled()) { mAfterKeyguardGoneAction = r; mKeyguardGoneCancelAction = cancelAction; mDismissActionWillAnimateOnKeyguard = r != null @@ -965,7 +966,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb * Adds a {@param runnable} to be executed after Keyguard is gone. */ public void addAfterKeyguardGoneRunnable(Runnable runnable) { - if (SceneContainerFlag.isEnabled()) { + if (ComposeBouncerFlags.INSTANCE.isEnabled()) { if (runnable != null) { mKeyguardDismissActionInteractor.get().runAfterKeyguardGone(runnable); } @@ -1180,7 +1181,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb // We update the state (which will show the keyguard) only if an animation will run on // the keyguard. If there is no animation, we wait before updating the state so that we // go directly from bouncer to launcher/app. - if (SceneContainerFlag.isEnabled()) { + if (ComposeBouncerFlags.INSTANCE.isEnabled()) { if (mKeyguardDismissActionInteractor.get().runDismissAnimationOnKeyguard()) { updateStates(); } @@ -1307,7 +1308,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } private void executeAfterKeyguardGoneAction() { - if (SceneContainerFlag.isEnabled()) { + if (ComposeBouncerFlags.INSTANCE.isEnabled()) { return; } if (mAfterKeyguardGoneAction != null) { @@ -1703,6 +1704,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb pw.println(" Registered KeyguardViewManagerCallbacks:"); pw.println(" SceneContainerFlag enabled:" + SceneContainerFlag.isEnabled()); + pw.println(" ComposeBouncerFlags enabled:" + + ComposeBouncerFlags.INSTANCE.isEnabled()); for (KeyguardViewManagerCallback callback : mCallbacks) { pw.println(" " + callback); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt index 3cbbb648af94..bea415cbb934 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt @@ -22,8 +22,8 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository import com.android.systemui.authentication.shared.model.AuthenticationMethodModel -import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository +import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor import com.android.systemui.coroutines.collectLastValue import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor import com.android.systemui.flags.EnableSceneContainer @@ -42,6 +42,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.notifShadeSceneFamilyResolver import com.android.systemui.scene.domain.resolver.quickSettingsSceneFamilyResolver import com.android.systemui.scene.shared.model.Scenes +import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -77,12 +78,14 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() { transitionInteractor = kosmos.keyguardTransitionInteractor, dismissInteractor = dismissInteractor, applicationScope = testScope.backgroundScope, - sceneInteractor = kosmos.sceneInteractor, - deviceEntryInteractor = kosmos.deviceEntryInteractor, - quickSettingsSceneFamilyResolver = kosmos.quickSettingsSceneFamilyResolver, - notifShadeSceneFamilyResolver = kosmos.notifShadeSceneFamilyResolver, + sceneInteractor = { kosmos.sceneInteractor }, + deviceEntryInteractor = { kosmos.deviceEntryInteractor }, + quickSettingsSceneFamilyResolver = { kosmos.quickSettingsSceneFamilyResolver }, + notifShadeSceneFamilyResolver = { kosmos.notifShadeSceneFamilyResolver }, powerInteractor = kosmos.powerInteractor, alternateBouncerInteractor = kosmos.alternateBouncerInteractor, + keyguardInteractor = { kosmos.keyguardInteractor }, + shadeInteractor = { kosmos.shadeInteractor }, ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt index 27eadb147055..d920c4f05b03 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorKosmos.kt @@ -25,6 +25,7 @@ import com.android.systemui.power.domain.interactor.powerInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.notifShadeSceneFamilyResolver import com.android.systemui.scene.domain.resolver.quickSettingsSceneFamilyResolver +import com.android.systemui.shade.domain.interactor.shadeInteractor import kotlinx.coroutines.ExperimentalCoroutinesApi @ExperimentalCoroutinesApi @@ -35,11 +36,13 @@ val Kosmos.keyguardDismissActionInteractor by transitionInteractor = keyguardTransitionInteractor, dismissInteractor = keyguardDismissInteractor, applicationScope = testScope.backgroundScope, - sceneInteractor = sceneInteractor, - deviceEntryInteractor = deviceEntryInteractor, - quickSettingsSceneFamilyResolver = quickSettingsSceneFamilyResolver, - notifShadeSceneFamilyResolver = notifShadeSceneFamilyResolver, + sceneInteractor = { sceneInteractor }, + deviceEntryInteractor = { deviceEntryInteractor }, + quickSettingsSceneFamilyResolver = { quickSettingsSceneFamilyResolver }, + notifShadeSceneFamilyResolver = { notifShadeSceneFamilyResolver }, powerInteractor = powerInteractor, alternateBouncerInteractor = alternateBouncerInteractor, + keyguardInteractor = { keyguardInteractor }, + shadeInteractor = { shadeInteractor }, ) } |