Revert "Show bouncer after user switch"

Revert submission 22301242-userswitch-bouncer

Reason for revert: seems to breaks flicker tests, investigated in b/277902000

Reverted changes: /q/submissionid:22301242-userswitch-bouncer

Change-Id: I13f401d1aa259b62cf1764f3613547c023bcb0bd
This commit is contained in:
Paul Hobbs
2023-04-12 17:33:49 +00:00
committed by Android (Google) Code Review
parent 262cef4f10
commit 5af2a11925
4 changed files with 36 additions and 76 deletions

View File

@@ -524,6 +524,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
public void setOnDismissAction(ActivityStarter.OnDismissAction action, Runnable cancelAction) {
if (mCancelAction != null) {
mCancelAction.run();
mCancelAction = null;
}
mDismissAction = action;
mCancelAction = cancelAction;

View File

@@ -53,6 +53,7 @@ import android.content.Context;
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;
@@ -557,9 +558,17 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
@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();
}
}
@@ -567,9 +576,16 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
@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
@@ -2182,72 +2198,58 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
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) {
@@ -2265,25 +2267,21 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
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);
}
};

View File

@@ -69,7 +69,6 @@ import com.android.systemui.navigationbar.NavigationBarView;
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;
@@ -287,11 +286,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
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<>();
@@ -307,8 +303,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Nullable private KeyguardBypassController mBypassController;
@Nullable private OccludingAppBiometricUI mOccludingAppBiometricUI;
private UserTracker mUserTracker;
@Nullable private TaskbarDelegate mTaskbarDelegate;
private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() {
@@ -346,8 +340,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
PrimaryBouncerInteractor primaryBouncerInteractor,
BouncerView primaryBouncerView,
AlternateBouncerInteractor alternateBouncerInteractor,
UdfpsOverlayInteractor udfpsOverlayInteractor,
UserTracker userTracker
UdfpsOverlayInteractor udfpsOverlayInteractor
) {
mContext = context;
mViewMediatorCallback = callback;
@@ -376,7 +369,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
featureFlags.isEnabled(Flags.WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM);
mUdfpsNewTouchDetectionEnabled = featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION);
mUdfpsOverlayInteractor = udfpsOverlayInteractor;
mUserTracker = userTracker;
}
@Override
@@ -701,21 +693,14 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
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;
}

View File

@@ -20,7 +20,6 @@ import static com.android.systemui.keyguard.shared.constants.KeyguardBouncerCons
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.keyguard.domain.interactor.PrimaryBouncerInteractor;
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 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mPrimaryBouncerInteractor,
mBouncerView,
mAlternateBouncerInteractor,
mUdfpsOverlayInteractor,
mock(UserTracker.class)) {
mUdfpsOverlayInteractor) {
@Override
public ViewRootImpl getViewRootImpl() {
return mViewRootImpl;
@@ -219,34 +216,14 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
}
@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 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mPrimaryBouncerInteractor,
mBouncerView,
mAlternateBouncerInteractor,
mUdfpsOverlayInteractor,
mock(UserTracker.class)) {
mUdfpsOverlayInteractor) {
@Override
public ViewRootImpl getViewRootImpl() {
return mViewRootImpl;