Merge "Revert "Show bouncer after user switch"" into udc-dev
This commit is contained in:
@@ -531,6 +531,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;
|
||||
|
||||
@@ -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;
|
||||
@@ -559,9 +560,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();
|
||||
}
|
||||
}
|
||||
@@ -569,9 +578,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
|
||||
@@ -2197,72 +2213,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) {
|
||||
@@ -2280,25 +2282,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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -286,11 +285,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<>();
|
||||
|
||||
@@ -306,8 +302,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() {
|
||||
@@ -345,8 +339,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
||||
PrimaryBouncerInteractor primaryBouncerInteractor,
|
||||
BouncerView primaryBouncerView,
|
||||
AlternateBouncerInteractor alternateBouncerInteractor,
|
||||
UdfpsOverlayInteractor udfpsOverlayInteractor,
|
||||
UserTracker userTracker
|
||||
UdfpsOverlayInteractor udfpsOverlayInteractor
|
||||
) {
|
||||
mContext = context;
|
||||
mViewMediatorCallback = callback;
|
||||
@@ -374,7 +367,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
|
||||
@@ -670,21 +662,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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user