Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +25 −11 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor; import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor; import com.android.systemui.dock.DockManager; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardWmStateRefactor; import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor; Loading Loading @@ -104,6 +103,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.concurrency.DelayableExecutor; import com.android.systemui.util.kotlin.JavaAdapter; import dagger.Lazy; Loading Loading @@ -179,6 +179,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private float mFraction = -1f; private boolean mTracking = false; private boolean mBouncerShowingOverDream; private int mAttemptsToShowBouncer = 0; private DelayableExecutor mExecutor; private final PrimaryBouncerExpansionCallback mExpansionCallback = new PrimaryBouncerExpansionCallback() { Loading Loading @@ -315,8 +317,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private boolean mLastScreenOffAnimationPlaying; private float mQsExpansion; private FeatureFlags mFlags; final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>(); private boolean mIsBackAnimationEnabled; private final UdfpsOverlayInteractor mUdfpsOverlayInteractor; Loading Loading @@ -399,9 +399,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb JavaAdapter javaAdapter, Lazy<SceneInteractor> sceneInteractorLazy, StatusBarKeyguardViewManagerInteractor statusBarKeyguardViewManagerInteractor, @Main DelayableExecutor executor, Lazy<DeviceEntryInteractor> deviceEntryInteractorLazy ) { mContext = context; mExecutor = executor; mViewMediatorCallback = callback; mLockPatternUtils = lockPatternUtils; mConfigurationController = configurationController; Loading Loading @@ -711,13 +713,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb * {@link #needsFullscreenBouncer()}. */ protected void showBouncerOrKeyguard(boolean hideBouncerWhenShowing, boolean isFalsingReset) { boolean isDozing = mDozing; if (Flags.simPinRaceConditionOnRestart()) { KeyguardState toState = mKeyguardTransitionInteractor.getTransitionState().getValue() .getTo(); isDozing = mDozing || toState == KeyguardState.DOZING || toState == KeyguardState.AOD; } if (needsFullscreenBouncer() && !isDozing) { if (needsFullscreenBouncer() && !mDozing) { // The keyguard might be showing (already). So we need to hide it. if (!primaryBouncerIsShowing()) { if (SceneContainerFlag.isEnabled()) { Loading @@ -727,9 +723,22 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } else { if (Flags.simPinRaceConditionOnRestart()) { if (mPrimaryBouncerInteractor.show(/* isScrimmed= */ true)) { mAttemptsToShowBouncer = 0; mCentralSurfaces.hideKeyguard(); } else { if (mAttemptsToShowBouncer > 6) { mAttemptsToShowBouncer = 0; Log.e(TAG, "Too many failed attempts to show bouncer, showing " + "keyguard instead"); mCentralSurfaces.showKeyguard(); } else { Log.v(TAG, "Failed to show bouncer, attempt #: " + mAttemptsToShowBouncer++); mExecutor.executeDelayed(() -> showBouncerOrKeyguard(hideBouncerWhenShowing, isFalsingReset), 500); } } } else { mCentralSurfaces.hideKeyguard(); Loading Loading @@ -1874,6 +1883,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb || mode == KeyguardSecurityModel.SecurityMode.SimPuk; } @VisibleForTesting void setAttemptsToShowBouncer(int attempts) { mAttemptsToShowBouncer = attempts; } /** * Delegate used to send show and hide events to an alternate authentication method instead of * the regular pin/pattern/password bouncer. Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +8 −0 Original line number Diff line number Diff line Loading @@ -108,7 +108,9 @@ import com.android.systemui.statusbar.domain.interactor.StatusBarKeyguardViewMan 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.concurrency.FakeExecutor; import com.android.systemui.util.kotlin.JavaAdapter; import com.android.systemui.util.time.FakeSystemClock; import com.google.common.truth.Truth; Loading Loading @@ -175,6 +177,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mBouncerExpansionCallback; private FakeKeyguardStateController mKeyguardStateController = spy(new FakeKeyguardStateController()); private final FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); @Mock private ViewRootImpl mViewRootImpl; Loading Loading @@ -238,6 +241,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mock(JavaAdapter.class), () -> mSceneInteractor, mock(StatusBarKeyguardViewManagerInteractor.class), mExecutor, () -> mDeviceEntryInteractor) { @Override public ViewRootImpl getViewRootImpl() { Loading Loading @@ -760,6 +764,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mock(JavaAdapter.class), () -> mSceneInteractor, mock(StatusBarKeyguardViewManagerInteractor.class), mExecutor, () -> mDeviceEntryInteractor) { @Override public ViewRootImpl getViewRootImpl() { Loading Loading @@ -1084,6 +1089,9 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { .thenReturn(KeyguardState.LOCKSCREEN); reset(mCentralSurfaces); // Advance past reattempts mStatusBarKeyguardViewManager.setAttemptsToShowBouncer(10); mStatusBarKeyguardViewManager.showBouncerOrKeyguard(false, false); verify(mPrimaryBouncerInteractor).show(true); verify(mCentralSurfaces).showKeyguard(); Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +25 −11 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor; import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor; import com.android.systemui.dock.DockManager; import com.android.systemui.dreams.DreamOverlayStateController; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardWmStateRefactor; import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor; import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor; Loading Loading @@ -104,6 +103,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.concurrency.DelayableExecutor; import com.android.systemui.util.kotlin.JavaAdapter; import dagger.Lazy; Loading Loading @@ -179,6 +179,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private float mFraction = -1f; private boolean mTracking = false; private boolean mBouncerShowingOverDream; private int mAttemptsToShowBouncer = 0; private DelayableExecutor mExecutor; private final PrimaryBouncerExpansionCallback mExpansionCallback = new PrimaryBouncerExpansionCallback() { Loading Loading @@ -315,8 +317,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private boolean mLastScreenOffAnimationPlaying; private float mQsExpansion; private FeatureFlags mFlags; final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>(); private boolean mIsBackAnimationEnabled; private final UdfpsOverlayInteractor mUdfpsOverlayInteractor; Loading Loading @@ -399,9 +399,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb JavaAdapter javaAdapter, Lazy<SceneInteractor> sceneInteractorLazy, StatusBarKeyguardViewManagerInteractor statusBarKeyguardViewManagerInteractor, @Main DelayableExecutor executor, Lazy<DeviceEntryInteractor> deviceEntryInteractorLazy ) { mContext = context; mExecutor = executor; mViewMediatorCallback = callback; mLockPatternUtils = lockPatternUtils; mConfigurationController = configurationController; Loading Loading @@ -711,13 +713,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb * {@link #needsFullscreenBouncer()}. */ protected void showBouncerOrKeyguard(boolean hideBouncerWhenShowing, boolean isFalsingReset) { boolean isDozing = mDozing; if (Flags.simPinRaceConditionOnRestart()) { KeyguardState toState = mKeyguardTransitionInteractor.getTransitionState().getValue() .getTo(); isDozing = mDozing || toState == KeyguardState.DOZING || toState == KeyguardState.AOD; } if (needsFullscreenBouncer() && !isDozing) { if (needsFullscreenBouncer() && !mDozing) { // The keyguard might be showing (already). So we need to hide it. if (!primaryBouncerIsShowing()) { if (SceneContainerFlag.isEnabled()) { Loading @@ -727,9 +723,22 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } else { if (Flags.simPinRaceConditionOnRestart()) { if (mPrimaryBouncerInteractor.show(/* isScrimmed= */ true)) { mAttemptsToShowBouncer = 0; mCentralSurfaces.hideKeyguard(); } else { if (mAttemptsToShowBouncer > 6) { mAttemptsToShowBouncer = 0; Log.e(TAG, "Too many failed attempts to show bouncer, showing " + "keyguard instead"); mCentralSurfaces.showKeyguard(); } else { Log.v(TAG, "Failed to show bouncer, attempt #: " + mAttemptsToShowBouncer++); mExecutor.executeDelayed(() -> showBouncerOrKeyguard(hideBouncerWhenShowing, isFalsingReset), 500); } } } else { mCentralSurfaces.hideKeyguard(); Loading Loading @@ -1874,6 +1883,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb || mode == KeyguardSecurityModel.SecurityMode.SimPuk; } @VisibleForTesting void setAttemptsToShowBouncer(int attempts) { mAttemptsToShowBouncer = attempts; } /** * Delegate used to send show and hide events to an alternate authentication method instead of * the regular pin/pattern/password bouncer. Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +8 −0 Original line number Diff line number Diff line Loading @@ -108,7 +108,9 @@ import com.android.systemui.statusbar.domain.interactor.StatusBarKeyguardViewMan 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.concurrency.FakeExecutor; import com.android.systemui.util.kotlin.JavaAdapter; import com.android.systemui.util.time.FakeSystemClock; import com.google.common.truth.Truth; Loading Loading @@ -175,6 +177,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mBouncerExpansionCallback; private FakeKeyguardStateController mKeyguardStateController = spy(new FakeKeyguardStateController()); private final FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); @Mock private ViewRootImpl mViewRootImpl; Loading Loading @@ -238,6 +241,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mock(JavaAdapter.class), () -> mSceneInteractor, mock(StatusBarKeyguardViewManagerInteractor.class), mExecutor, () -> mDeviceEntryInteractor) { @Override public ViewRootImpl getViewRootImpl() { Loading Loading @@ -760,6 +764,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mock(JavaAdapter.class), () -> mSceneInteractor, mock(StatusBarKeyguardViewManagerInteractor.class), mExecutor, () -> mDeviceEntryInteractor) { @Override public ViewRootImpl getViewRootImpl() { Loading Loading @@ -1084,6 +1089,9 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { .thenReturn(KeyguardState.LOCKSCREEN); reset(mCentralSurfaces); // Advance past reattempts mStatusBarKeyguardViewManager.setAttemptsToShowBouncer(10); mStatusBarKeyguardViewManager.showBouncerOrKeyguard(false, false); verify(mPrimaryBouncerInteractor).show(true); verify(mCentralSurfaces).showKeyguard(); Loading