diff options
4 files changed, 33 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt index 7263ae96b3a8..cb1571e7d702 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt @@ -44,6 +44,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch @@ -287,7 +288,7 @@ constructor( if (KeyguardWmStateRefactor.isEnabled) { // When the refactor is enabled, we no longer use isKeyguardGoingAway. scope.launch { - swipeToDismissInteractor.dismissFling.collect { _ -> + swipeToDismissInteractor.dismissFling.filterNotNull().collect { _ -> startTransitionTo(KeyguardState.GONE) } } 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 66b16e357d91..d1055c77ab8f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -23,7 +23,6 @@ import static com.android.systemui.bouncer.shared.constants.KeyguardBouncerConst import static com.android.systemui.plugins.ActivityStarter.OnDismissAction; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK; import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING; -import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; import static com.android.systemui.util.kotlin.JavaAdapterKt.combineFlows; import android.content.Context; @@ -98,6 +97,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.unfold.FoldAodAnimationController; import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; +import com.android.systemui.util.kotlin.JavaAdapter; import dagger.Lazy; @@ -348,6 +348,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private Lazy<KeyguardSurfaceBehindInteractor> mSurfaceBehindInteractor; private Lazy<KeyguardDismissActionInteractor> mKeyguardDismissActionInteractor; + private final JavaAdapter mJavaAdapter; + @Inject public StatusBarKeyguardViewManager( Context context, @@ -378,7 +380,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb Lazy<WindowManagerLockscreenVisibilityInteractor> wmLockscreenVisibilityInteractor, Lazy<KeyguardDismissActionInteractor> keyguardDismissActionInteractorLazy, SelectedUserInteractor selectedUserInteractor, - Lazy<KeyguardSurfaceBehindInteractor> surfaceBehindInteractor + Lazy<KeyguardSurfaceBehindInteractor> surfaceBehindInteractor, + JavaAdapter javaAdapter ) { mContext = context; mViewMediatorCallback = callback; @@ -411,6 +414,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mKeyguardDismissActionInteractor = keyguardDismissActionInteractorLazy; mSelectedUserInteractor = selectedUserInteractor; mSurfaceBehindInteractor = surfaceBehindInteractor; + mJavaAdapter = javaAdapter; } KeyguardTransitionInteractor mKeyguardTransitionInteractor; @@ -481,8 +485,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb if (KeyguardWmStateRefactor.isEnabled()) { // Show the keyguard views whenever we've told WM that the lockscreen is visible. - collectFlow( - getViewRootImpl().getView(), + mJavaAdapter.alwaysCollectFlow( combineFlows( mWmLockscreenVisibilityInteractor.get().getLockscreenVisibility(), mSurfaceBehindInteractor.get().isAnimatingSurface(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt index 6d8e7aa0703c..6aebe365dc8c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt @@ -126,7 +126,7 @@ class FromLockscreenTransitionInteractorTest : SysuiTestCase() { keyguardRepository.setKeyguardDismissible(true) runCurrent() shadeRepository.setCurrentFling( - FlingInfo(expand = true) // Not a dismiss fling (expand = true). + FlingInfo(expand = false) // Is a dismiss fling upward (expand = false). ) runCurrent() @@ -153,4 +153,22 @@ class FromLockscreenTransitionInteractorTest : SysuiTestCase() { assertThatRepository(transitionRepository).noTransitionsStarted() } + + @Test + @DisableFlags(Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR) + fun testDoesNotTransitionToGone_whenDismissFling_emitsNull() = + testScope.runTest { + underTest.start() + verify(transitionRepository, never()).startTransition(any()) + + keyguardRepository.setKeyguardDismissible(true) + runCurrent() + + // The fling is null when it a) initializes b) ends and in either case we should not + // swipe to unlock. + shadeRepository.setCurrentFling(null) + runCurrent() + + assertThatRepository(transitionRepository).noTransitionsStarted() + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index bd7406ad004b..3666248d1783 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -97,6 +97,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.unfold.SysUIUnfoldComponent; import com.android.systemui.user.domain.interactor.SelectedUserInteractor; +import com.android.systemui.util.kotlin.JavaAdapter; import com.google.common.truth.Truth; @@ -222,7 +223,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { () -> mock(WindowManagerLockscreenVisibilityInteractor.class), () -> mock(KeyguardDismissActionInteractor.class), mSelectedUserInteractor, - () -> mock(KeyguardSurfaceBehindInteractor.class)) { + () -> mock(KeyguardSurfaceBehindInteractor.class), + mock(JavaAdapter.class)) { @Override public ViewRootImpl getViewRootImpl() { return mViewRootImpl; @@ -730,7 +732,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { () -> mock(WindowManagerLockscreenVisibilityInteractor.class), () -> mock(KeyguardDismissActionInteractor.class), mSelectedUserInteractor, - () -> mock(KeyguardSurfaceBehindInteractor.class)) { + () -> mock(KeyguardSurfaceBehindInteractor.class), + mock(JavaAdapter.class)) { @Override public ViewRootImpl getViewRootImpl() { return mViewRootImpl; |