Merge "Revert "Show bouncer after user switch"" into udc-dev
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 25cda98..db38d34 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -531,6 +531,7 @@
public void setOnDismissAction(ActivityStarter.OnDismissAction action, Runnable cancelAction) {
if (mCancelAction != null) {
mCancelAction.run();
+ mCancelAction = null;
}
mDismissAction = action;
mCancelAction = cancelAction;
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index e24d0ed..416b237 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -53,6 +53,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.UserInfo;
import android.graphics.Matrix;
import android.hardware.biometrics.BiometricSourceType;
import android.media.AudioAttributes;
@@ -559,9 +560,17 @@
@Override
public void onUserSwitching(int userId) {
if (DEBUG) Log.d(TAG, String.format("onUserSwitching %d", userId));
+ // Note that the mLockPatternUtils user has already been updated from setCurrentUser.
+ // We need to force a reset of the views, since lockNow (called by
+ // ActivityManagerService) will not reconstruct the keyguard if it is already showing.
synchronized (KeyguardViewMediator.this) {
resetKeyguardDonePendingLocked();
- dismiss(null /* callback */, null /* message */);
+ if (mLockPatternUtils.isLockScreenDisabled(userId)) {
+ // If we are switching to a user that has keyguard disabled, dismiss keyguard.
+ dismiss(null /* callback */, null /* message */);
+ } else {
+ resetStateLocked();
+ }
adjustStatusBarLocked();
}
}
@@ -569,9 +578,16 @@
@Override
public void onUserSwitchComplete(int userId) {
if (DEBUG) Log.d(TAG, String.format("onUserSwitchComplete %d", userId));
- // We are calling dismiss again and with a delay as there are race conditions
- // in some scenarios caused by async layout listeners
- new Handler().postDelayed(() -> dismiss(null /* callback */, null /* message */), 500);
+ if (userId != UserHandle.USER_SYSTEM) {
+ UserInfo info = UserManager.get(mContext).getUserInfo(userId);
+ // Don't try to dismiss if the user has Pin/Pattern/Password set
+ if (info == null || mLockPatternUtils.isSecure(userId)) {
+ return;
+ } else if (info.isGuest() || info.isDemo()) {
+ // If we just switched to a guest, try to dismiss keyguard.
+ dismiss(null /* callback */, null /* message */);
+ }
+ }
}
@Override
@@ -2197,72 +2213,58 @@
private Handler mHandler = new Handler(Looper.myLooper(), null, true /*async*/) {
@Override
public void handleMessage(Message msg) {
- String message = "";
switch (msg.what) {
case SHOW:
- message = "SHOW";
handleShow((Bundle) msg.obj);
break;
case HIDE:
- message = "HIDE";
handleHide();
break;
case RESET:
- message = "RESET";
handleReset();
break;
case VERIFY_UNLOCK:
- message = "VERIFY_UNLOCK";
Trace.beginSection("KeyguardViewMediator#handleMessage VERIFY_UNLOCK");
handleVerifyUnlock();
Trace.endSection();
break;
case NOTIFY_STARTED_GOING_TO_SLEEP:
- message = "NOTIFY_STARTED_GOING_TO_SLEEP";
handleNotifyStartedGoingToSleep();
break;
case NOTIFY_FINISHED_GOING_TO_SLEEP:
- message = "NOTIFY_FINISHED_GOING_TO_SLEEP";
handleNotifyFinishedGoingToSleep();
break;
case NOTIFY_STARTED_WAKING_UP:
- message = "NOTIFY_STARTED_WAKING_UP";
Trace.beginSection(
"KeyguardViewMediator#handleMessage NOTIFY_STARTED_WAKING_UP");
handleNotifyStartedWakingUp();
Trace.endSection();
break;
case KEYGUARD_DONE:
- message = "KEYGUARD_DONE";
Trace.beginSection("KeyguardViewMediator#handleMessage KEYGUARD_DONE");
handleKeyguardDone();
Trace.endSection();
break;
case KEYGUARD_DONE_DRAWING:
- message = "KEYGUARD_DONE_DRAWING";
Trace.beginSection("KeyguardViewMediator#handleMessage KEYGUARD_DONE_DRAWING");
handleKeyguardDoneDrawing();
Trace.endSection();
break;
case SET_OCCLUDED:
- message = "SET_OCCLUDED";
Trace.beginSection("KeyguardViewMediator#handleMessage SET_OCCLUDED");
handleSetOccluded(msg.arg1 != 0, msg.arg2 != 0);
Trace.endSection();
break;
case KEYGUARD_TIMEOUT:
- message = "KEYGUARD_TIMEOUT";
synchronized (KeyguardViewMediator.this) {
doKeyguardLocked((Bundle) msg.obj);
}
break;
case DISMISS:
- message = "DISMISS";
- final DismissMessage dismissMsg = (DismissMessage) msg.obj;
- handleDismiss(dismissMsg.getCallback(), dismissMsg.getMessage());
+ final DismissMessage message = (DismissMessage) msg.obj;
+ handleDismiss(message.getCallback(), message.getMessage());
break;
case START_KEYGUARD_EXIT_ANIM:
- message = "START_KEYGUARD_EXIT_ANIM";
Trace.beginSection(
"KeyguardViewMediator#handleMessage START_KEYGUARD_EXIT_ANIM");
synchronized (KeyguardViewMediator.this) {
@@ -2280,25 +2282,21 @@
Trace.endSection();
break;
case CANCEL_KEYGUARD_EXIT_ANIM:
- message = "CANCEL_KEYGUARD_EXIT_ANIM";
Trace.beginSection(
"KeyguardViewMediator#handleMessage CANCEL_KEYGUARD_EXIT_ANIM");
handleCancelKeyguardExitAnimation();
Trace.endSection();
break;
case KEYGUARD_DONE_PENDING_TIMEOUT:
- message = "KEYGUARD_DONE_PENDING_TIMEOUT";
Trace.beginSection("KeyguardViewMediator#handleMessage"
+ " KEYGUARD_DONE_PENDING_TIMEOUT");
Log.w(TAG, "Timeout while waiting for activity drawn!");
Trace.endSection();
break;
case SYSTEM_READY:
- message = "SYSTEM_READY";
handleSystemReady();
break;
}
- Log.d(TAG, "KeyguardViewMediator queue processing message: " + message);
}
};
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 d496cfa..49b58df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -69,7 +69,6 @@
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.navigationbar.TaskbarDelegate;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
@@ -286,11 +285,8 @@
private final boolean mUdfpsNewTouchDetectionEnabled;
private final UdfpsOverlayInteractor mUdfpsOverlayInteractor;
- @VisibleForTesting
- OnDismissAction mAfterKeyguardGoneAction;
-
- @VisibleForTesting
- Runnable mKeyguardGoneCancelAction;
+ private OnDismissAction mAfterKeyguardGoneAction;
+ private Runnable mKeyguardGoneCancelAction;
private boolean mDismissActionWillAnimateOnKeyguard;
private final ArrayList<Runnable> mAfterKeyguardGoneRunnables = new ArrayList<>();
@@ -306,8 +302,6 @@
@Nullable private KeyguardBypassController mBypassController;
@Nullable private OccludingAppBiometricUI mOccludingAppBiometricUI;
- private UserTracker mUserTracker;
-
@Nullable private TaskbarDelegate mTaskbarDelegate;
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@@ -345,8 +339,7 @@
PrimaryBouncerInteractor primaryBouncerInteractor,
BouncerView primaryBouncerView,
AlternateBouncerInteractor alternateBouncerInteractor,
- UdfpsOverlayInteractor udfpsOverlayInteractor,
- UserTracker userTracker
+ UdfpsOverlayInteractor udfpsOverlayInteractor
) {
mContext = context;
mViewMediatorCallback = callback;
@@ -374,7 +367,6 @@
featureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM);
mUdfpsNewTouchDetectionEnabled = featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION);
mUdfpsOverlayInteractor = udfpsOverlayInteractor;
- mUserTracker = userTracker;
}
@Override
@@ -670,21 +662,14 @@
if (afterKeyguardGone) {
// we'll handle the dismiss action after keyguard is gone, so just show the
// bouncer
- if (mLockPatternUtils.isSecure(mUserTracker.getUserId())) {
- mPrimaryBouncerInteractor.show(true);
- }
+ mPrimaryBouncerInteractor.show(/* isScrimmed= */true);
} else {
- if (mLockPatternUtils.isSecure(mUserTracker.getUserId())) {
- // after authentication success, run dismiss action with the option to defer
- // hiding the keyguard based on the return value of the OnDismissAction
- mPrimaryBouncerInteractor.setDismissAction(
- mAfterKeyguardGoneAction, mKeyguardGoneCancelAction);
- mPrimaryBouncerInteractor.show(true);
- } else {
- if (mAfterKeyguardGoneAction != null) {
- mAfterKeyguardGoneAction.onDismiss();
- }
- }
+ // after authentication success, run dismiss action with the option to defer
+ // hiding the keyguard based on the return value of the OnDismissAction
+ mPrimaryBouncerInteractor.setDismissAction(
+ mAfterKeyguardGoneAction, mKeyguardGoneCancelAction);
+ mPrimaryBouncerInteractor.show(/* isScrimmed= */true);
+ // bouncer will handle the dismiss action, so we no longer need to track it here
mAfterKeyguardGoneAction = null;
mKeyguardGoneCancelAction = null;
}
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 baeb188..14aee4e 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
@@ -20,7 +20,6 @@
import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -74,7 +73,6 @@
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.navigationbar.TaskbarDelegate;
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
-import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.ShadeController;
@@ -194,8 +192,7 @@
mPrimaryBouncerInteractor,
mBouncerView,
mAlternateBouncerInteractor,
- mUdfpsOverlayInteractor,
- mock(UserTracker.class)) {
+ mUdfpsOverlayInteractor) {
@Override
public ViewRootImpl getViewRootImpl() {
return mViewRootImpl;
@@ -219,34 +216,14 @@
}
@Test
- public void dismissWithAction_AfterKeyguardGoneSetToFalse_DismissAction_Set() {
+ public void dismissWithAction_AfterKeyguardGoneSetToFalse() {
OnDismissAction action = () -> false;
Runnable cancelAction = () -> {
};
- when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
-
mStatusBarKeyguardViewManager.dismissWithAction(
action, cancelAction, false /* afterKeyguardGone */);
-
verify(mPrimaryBouncerInteractor).setDismissAction(eq(action), eq(cancelAction));
verify(mPrimaryBouncerInteractor).show(eq(true));
- assertNull(mStatusBarKeyguardViewManager.mAfterKeyguardGoneAction);
- assertNull(mStatusBarKeyguardViewManager.mKeyguardGoneCancelAction);
- }
-
- @Test
- public void dismissWithAction_AfterKeyguardGoneSetToFalse_DismissAction_Called() {
- OnDismissAction action = mock(OnDismissAction.class);
- Runnable cancelAction = () -> {
- };
- when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
-
- mStatusBarKeyguardViewManager.dismissWithAction(
- action, cancelAction, false /* afterKeyguardGone */);
-
- verify(action).onDismiss();
- assertNull(mStatusBarKeyguardViewManager.mAfterKeyguardGoneAction);
- assertNull(mStatusBarKeyguardViewManager.mKeyguardGoneCancelAction);
}
@Test
@@ -703,8 +680,7 @@
mPrimaryBouncerInteractor,
mBouncerView,
mAlternateBouncerInteractor,
- mUdfpsOverlayInteractor,
- mock(UserTracker.class)) {
+ mUdfpsOverlayInteractor) {
@Override
public ViewRootImpl getViewRootImpl() {
return mViewRootImpl;