diff options
85 files changed, 556 insertions, 323 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java b/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java index 207f3440d38b..58bbdeb35ea0 100644 --- a/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java +++ b/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java @@ -45,6 +45,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.keyguard.dagger.KeyguardBouncerScope; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import java.util.NoSuchElementException; @@ -63,6 +64,7 @@ public class AdminSecondaryLockScreenController { private Handler mHandler; private IKeyguardClient mClient; private KeyguardSecurityCallback mKeyguardCallback; + private SelectedUserInteractor mSelectedUserInteractor; private final ServiceConnection mConnection = new ServiceConnection() { @Override @@ -76,7 +78,7 @@ public class AdminSecondaryLockScreenController { } catch (RemoteException e) { // Failed to link to death, just dismiss and unbind the service for now. Log.e(TAG, "Lost connection to secondary lockscreen service", e); - dismiss(KeyguardUpdateMonitor.getCurrentUser()); + dismiss(mSelectedUserInteractor.getSelectedUserId()); } } } @@ -110,7 +112,7 @@ public class AdminSecondaryLockScreenController { mView.setChildSurfacePackage(surfacePackage); } else { mHandler.post(() -> { - dismiss(KeyguardUpdateMonitor.getCurrentUser()); + dismiss(mSelectedUserInteractor.getSelectedUserId()); }); } } @@ -131,7 +133,7 @@ public class AdminSecondaryLockScreenController { protected SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { - final int userId = KeyguardUpdateMonitor.getCurrentUser(); + final int userId = mSelectedUserInteractor.getSelectedUserId(); mUpdateMonitor.registerCallback(mUpdateCallback); if (mClient != null) { @@ -158,7 +160,7 @@ public class AdminSecondaryLockScreenController { private AdminSecondaryLockScreenController(Context context, KeyguardSecurityContainer parent, KeyguardUpdateMonitor updateMonitor, KeyguardSecurityCallback callback, - @Main Handler handler) { + @Main Handler handler, SelectedUserInteractor selectedUserInteractor) { mContext = context; mHandler = handler; mParent = parent; @@ -166,6 +168,7 @@ public class AdminSecondaryLockScreenController { mKeyguardCallback = callback; mView = new AdminSecurityView(mContext, mSurfaceHolderCallback); mView.setId(View.generateViewId()); + mSelectedUserInteractor = selectedUserInteractor; } /** @@ -218,13 +221,13 @@ public class AdminSecondaryLockScreenController { } } catch (RemoteException e) { Log.e(TAG, "Error in onCreateKeyguardSurface", e); - dismiss(KeyguardUpdateMonitor.getCurrentUser()); + dismiss(mSelectedUserInteractor.getSelectedUserId()); } } private void dismiss(int userId) { mHandler.removeCallbacksAndMessages(null); - if (mView.isAttachedToWindow() && userId == KeyguardUpdateMonitor.getCurrentUser()) { + if (mView.isAttachedToWindow() && userId == mSelectedUserInteractor.getSelectedUserId()) { hide(); if (mKeyguardCallback != null) { mKeyguardCallback.dismiss(/* securityVerified= */ true, userId, @@ -265,19 +268,24 @@ public class AdminSecondaryLockScreenController { private final KeyguardSecurityContainer mParent; private final KeyguardUpdateMonitor mUpdateMonitor; private final Handler mHandler; + private final SelectedUserInteractor mSelectedUserInteractor; @Inject - public Factory(Context context, KeyguardSecurityContainer parent, - KeyguardUpdateMonitor updateMonitor, @Main Handler handler) { + public Factory(Context context, + KeyguardSecurityContainer parent, + KeyguardUpdateMonitor updateMonitor, + @Main Handler handler, + SelectedUserInteractor selectedUserInteractor) { mContext = context; mParent = parent; mUpdateMonitor = updateMonitor; mHandler = handler; + mSelectedUserInteractor = selectedUserInteractor; } public AdminSecondaryLockScreenController create(KeyguardSecurityCallback callback) { return new AdminSecondaryLockScreenController(mContext, mParent, mUpdateMonitor, - callback, mHandler); + callback, mHandler, mSelectedUserInteractor); } } } diff --git a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java index f7e8eb492584..5de370f22eb8 100644 --- a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java +++ b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java @@ -43,6 +43,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.shade.ShadeController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.EmergencyDialerConstants; import com.android.systemui.util.ViewController; @@ -67,6 +68,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { private LockPatternUtils mLockPatternUtils; private Executor mMainExecutor; private Executor mBackgroundExecutor; + private SelectedUserInteractor mSelectedUserInteractor; private final KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { @@ -96,7 +98,8 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { ShadeController shadeController, @Nullable TelecomManager telecomManager, MetricsLogger metricsLogger, LockPatternUtils lockPatternUtils, - Executor mainExecutor, Executor backgroundExecutor) { + Executor mainExecutor, Executor backgroundExecutor, + SelectedUserInteractor selectedUserInteractor) { super(view); mConfigurationController = configurationController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; @@ -109,6 +112,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { mLockPatternUtils = lockPatternUtils; mMainExecutor = mainExecutor; mBackgroundExecutor = backgroundExecutor; + mSelectedUserInteractor = selectedUserInteractor; } @Override @@ -142,7 +146,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { mBackgroundExecutor.execute(() -> { boolean isInCall = mTelecomManager != null && mTelecomManager.isInCall(); boolean isSecure = mLockPatternUtils - .isSecure(KeyguardUpdateMonitor.getCurrentUser()); + .isSecure(mSelectedUserInteractor.getSelectedUserId()); mMainExecutor.execute(() -> mView.updateEmergencyCallButton( /* isInCall= */ isInCall, /* hasTelephonyRadio= */ getContext().getPackageManager() @@ -192,7 +196,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { getContext().startActivityAsUser(emergencyDialIntent, ActivityOptions.makeCustomAnimation(getContext(), 0, 0).toBundle(), - new UserHandle(KeyguardUpdateMonitor.getCurrentUser())); + new UserHandle(mSelectedUserInteractor.getSelectedUserId())); } }); }); @@ -218,6 +222,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { private final LockPatternUtils mLockPatternUtils; private final Executor mMainExecutor; private final Executor mBackgroundExecutor; + private final SelectedUserInteractor mSelectedUserInteractor; @Inject public Factory(ConfigurationController configurationController, @@ -227,7 +232,8 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { @Nullable TelecomManager telecomManager, MetricsLogger metricsLogger, LockPatternUtils lockPatternUtils, @Main Executor mainExecutor, - @Background Executor backgroundExecutor) { + @Background Executor backgroundExecutor, + SelectedUserInteractor selectedUserInteractor) { mConfigurationController = configurationController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; @@ -240,6 +246,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { mLockPatternUtils = lockPatternUtils; mMainExecutor = mainExecutor; mBackgroundExecutor = backgroundExecutor; + mSelectedUserInteractor = selectedUserInteractor; } /** Construct an {@link com.android.keyguard.EmergencyButtonController}. */ @@ -247,7 +254,7 @@ public class EmergencyButtonController extends ViewController<EmergencyButton> { return new EmergencyButtonController(view, mConfigurationController, mKeyguardUpdateMonitor, mTelephonyManager, mPowerManager, mActivityTaskManager, mShadeController, mTelecomManager, mMetricsLogger, mLockPatternUtils, - mMainExecutor, mBackgroundExecutor); + mMainExecutor, mBackgroundExecutor, mSelectedUserInteractor); } } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java index 167bd59d4e8d..dad440083f70 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java @@ -34,10 +34,11 @@ import com.android.internal.widget.LockscreenCredential; import com.android.keyguard.EmergencyButtonController.EmergencyButtonCallback; import com.android.keyguard.KeyguardAbsKeyInputView.KeyDownListener; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingClassifier; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import java.util.HashMap; import java.util.Map; @@ -80,9 +81,9 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey KeyguardMessageAreaController.Factory messageAreaControllerFactory, LatencyTracker latencyTracker, FalsingCollector falsingCollector, EmergencyButtonController emergencyButtonController, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, SelectedUserInteractor selectedUserInteractor) { super(view, securityMode, keyguardSecurityCallback, emergencyButtonController, - messageAreaControllerFactory, featureFlags); + messageAreaControllerFactory, featureFlags, selectedUserInteractor); mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; mLatencyTracker = latencyTracker; @@ -104,7 +105,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey mEmergencyButtonController.setEmergencyButtonCallback(mEmergencyButtonCallback); // if the user is currently locked out, enforce it. long deadline = mLockPatternUtils.getLockoutAttemptDeadline( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.getSelectedUserId()); if (shouldLockout(deadline)) { handleAttemptLockout(deadline); } @@ -175,7 +176,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey } void onPasswordChecked(int userId, boolean matched, int timeoutMs, boolean isValidPassword) { - boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; + boolean dismissKeyguard = mSelectedUserInteractor.getSelectedUserId() == userId; if (matched) { getKeyguardSecurityCallback().reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { @@ -212,7 +213,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey mPendingLockCheck.cancel(false); } - final int userId = KeyguardUpdateMonitor.getCurrentUser(); + final int userId = mSelectedUserInteractor.getSelectedUserId(); if (password.size() <= MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT) { // to avoid accidental lockout, only count attempts that are long enough to be a // real password. This may require some tweaking. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardBiometricLockoutLogger.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardBiometricLockoutLogger.kt index e6a2bfa1af12..d26caa985431 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardBiometricLockoutLogger.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardBiometricLockoutLogger.kt @@ -29,6 +29,7 @@ import com.android.keyguard.KeyguardBiometricLockoutLogger.PrimaryAuthRequiredEv import com.android.systemui.CoreStartable import com.android.systemui.dagger.SysUISingleton import com.android.systemui.log.SessionTracker +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import java.io.PrintWriter import javax.inject.Inject @@ -42,7 +43,8 @@ import javax.inject.Inject class KeyguardBiometricLockoutLogger @Inject constructor( private val uiEventLogger: UiEventLogger, private val keyguardUpdateMonitor: KeyguardUpdateMonitor, - private val sessionTracker: SessionTracker + private val sessionTracker: SessionTracker, + private val selectedUserInteractor: SelectedUserInteractor ) : CoreStartable { private var fingerprintLockedOut = false private var faceLockedOut = false @@ -52,7 +54,7 @@ class KeyguardBiometricLockoutLogger @Inject constructor( override fun start() { mKeyguardUpdateMonitorCallback.onStrongAuthStateChanged( - KeyguardUpdateMonitor.getCurrentUser()) + selectedUserInteractor.getSelectedUserId()) keyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback) } @@ -79,7 +81,7 @@ class KeyguardBiometricLockoutLogger @Inject constructor( } override fun onStrongAuthStateChanged(userId: Int) { - if (userId != KeyguardUpdateMonitor.getCurrentUser()) { + if (userId != selectedUserInteractor.getSelectedUserId()) { return } val strongAuthFlags = keyguardUpdateMonitor.strongAuthTracker diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java index 29ce18c60833..b3094838452a 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java @@ -29,7 +29,6 @@ import android.view.inputmethod.InputMethodManager; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; import com.android.systemui.bouncer.ui.BouncerMessageView; import com.android.systemui.bouncer.ui.binder.BouncerMessageViewBinder; @@ -38,7 +37,9 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.log.BouncerLogger; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.ViewController; import com.android.systemui.util.concurrency.DelayableExecutor; @@ -51,7 +52,6 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> private final SecurityMode mSecurityMode; private final KeyguardSecurityCallback mKeyguardSecurityCallback; - private final EmergencyButton mEmergencyButton; private final EmergencyButtonController mEmergencyButtonController; private boolean mPaused; protected KeyguardMessageAreaController<BouncerKeyguardMessageArea> mMessageAreaController; @@ -61,18 +61,20 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> // state for the current security method. private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() {}; private final FeatureFlags mFeatureFlags; + protected final SelectedUserInteractor mSelectedUserInteractor; protected KeyguardInputViewController(T view, SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback, EmergencyButtonController emergencyButtonController, @Nullable KeyguardMessageAreaController.Factory messageAreaControllerFactory, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + SelectedUserInteractor selectedUserInteractor) { super(view); mSecurityMode = securityMode; mKeyguardSecurityCallback = keyguardSecurityCallback; - mEmergencyButton = view == null ? null : view.findViewById(R.id.emergency_call_button); mEmergencyButtonController = emergencyButtonController; mFeatureFlags = featureFlags; + mSelectedUserInteractor = selectedUserInteractor; if (messageAreaControllerFactory != null) { try { BouncerKeyguardMessageArea kma = view.requireViewById(R.id.bouncer_message_area); @@ -207,6 +209,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> private final DevicePostureController mDevicePostureController; private final KeyguardViewController mKeyguardViewController; private final FeatureFlags mFeatureFlags; + private final SelectedUserInteractor mSelectedUserInteractor; @Inject public Factory(KeyguardUpdateMonitor keyguardUpdateMonitor, @@ -219,7 +222,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> EmergencyButtonController.Factory emergencyButtonControllerFactory, DevicePostureController devicePostureController, KeyguardViewController keyguardViewController, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, SelectedUserInteractor selectedUserInteractor) { mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; mLatencyTracker = latencyTracker; @@ -234,6 +237,7 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> mDevicePostureController = devicePostureController; mKeyguardViewController = keyguardViewController; mFeatureFlags = featureFlags; + mSelectedUserInteractor = selectedUserInteractor; } /** Create a new {@link KeyguardInputViewController}. */ @@ -248,32 +252,32 @@ public abstract class KeyguardInputViewController<T extends KeyguardInputView> mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mLatencyTracker, mFalsingCollector, emergencyButtonController, mMessageAreaControllerFactory, - mDevicePostureController, mFeatureFlags); + mDevicePostureController, mFeatureFlags, mSelectedUserInteractor); } else if (keyguardInputView instanceof KeyguardPasswordView) { return new KeyguardPasswordViewController((KeyguardPasswordView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, mInputMethodManager, emergencyButtonController, mMainExecutor, mResources, mFalsingCollector, mKeyguardViewController, - mDevicePostureController, mFeatureFlags); + mDevicePostureController, mFeatureFlags, mSelectedUserInteractor); } else if (keyguardInputView instanceof KeyguardPINView) { return new KeyguardPinViewController((KeyguardPINView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, mLiftToActivateListener, emergencyButtonController, mFalsingCollector, - mDevicePostureController, mFeatureFlags); + mDevicePostureController, mFeatureFlags, mSelectedUserInteractor); } else if (keyguardInputView instanceof KeyguardSimPinView) { return new KeyguardSimPinViewController((KeyguardSimPinView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, mLiftToActivateListener, mTelephonyManager, mFalsingCollector, - emergencyButtonController, mFeatureFlags); + emergencyButtonController, mFeatureFlags, mSelectedUserInteractor); } else if (keyguardInputView instanceof KeyguardSimPukView) { return new KeyguardSimPukViewController((KeyguardSimPukView) keyguardInputView, mKeyguardUpdateMonitor, securityMode, mLockPatternUtils, keyguardSecurityCallback, mMessageAreaControllerFactory, mLatencyTracker, mLiftToActivateListener, mTelephonyManager, mFalsingCollector, - emergencyButtonController, mFeatureFlags); + emergencyButtonController, mFeatureFlags, mSelectedUserInteractor); } throw new RuntimeException("Unable to find controller for " + keyguardInputView); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java index 959cf6fb8565..96fe6490ca46 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java @@ -39,11 +39,12 @@ import android.widget.TextView.OnEditorActionListener; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.DelayableExecutor; import java.util.List; @@ -112,10 +113,11 @@ public class KeyguardPasswordViewController FalsingCollector falsingCollector, KeyguardViewController keyguardViewController, DevicePostureController postureController, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + SelectedUserInteractor selectedUserInteractor) { super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, messageAreaControllerFactory, latencyTracker, falsingCollector, - emergencyButtonController, featureFlags); + emergencyButtonController, featureFlags, selectedUserInteractor); mKeyguardSecurityCallback = keyguardSecurityCallback; mInputMethodManager = inputMethodManager; mPostureController = postureController; @@ -132,7 +134,8 @@ public class KeyguardPasswordViewController @Override protected void onViewAttached() { super.onViewAttached(); - mPasswordEntry.setTextOperationUser(UserHandle.of(KeyguardUpdateMonitor.getCurrentUser())); + mPasswordEntry.setTextOperationUser( + UserHandle.of(mSelectedUserInteractor.getSelectedUserId())); mPasswordEntry.setKeyListener(TextKeyListener.getInstance()); mPasswordEntry.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); @@ -187,7 +190,8 @@ public class KeyguardPasswordViewController @Override void resetState() { - mPasswordEntry.setTextOperationUser(UserHandle.of(KeyguardUpdateMonitor.getCurrentUser())); + mPasswordEntry.setTextOperationUser( + UserHandle.of(mSelectedUserInteractor.getSelectedUserId())); mMessageAreaController.setMessage(getInitialMessageResId()); final boolean wasDisabled = mPasswordEntry.isEnabled(); mView.setPasswordEntryEnabled(true); @@ -280,7 +284,7 @@ public class KeyguardPasswordViewController final boolean shouldIncludeAuxiliarySubtypes) { final List<InputMethodInfo> enabledImis = imm.getEnabledInputMethodListAsUser( - UserHandle.of(KeyguardUpdateMonitor.getCurrentUser())); + UserHandle.of(mSelectedUserInteractor.getSelectedUserId())); // Number of the filtered IMEs int filteredImisCount = 0; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java index 57151ae32db0..db7ff888356c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java @@ -36,11 +36,12 @@ import com.android.internal.widget.LockPatternView.Cell; import com.android.internal.widget.LockscreenCredential; import com.android.keyguard.EmergencyButtonController.EmergencyButtonCallback; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingClassifier; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import java.util.HashMap; import java.util.List; @@ -110,7 +111,7 @@ public class KeyguardPatternViewController mPendingLockCheck.cancel(false); } - final int userId = KeyguardUpdateMonitor.getCurrentUser(); + final int userId = mSelectedUserInteractor.getSelectedUserId(); if (pattern.size() < LockPatternUtils.MIN_PATTERN_REGISTER_FAIL) { // Treat single-sized patterns as erroneous taps. if (pattern.size() == 1) { @@ -163,7 +164,7 @@ public class KeyguardPatternViewController private void onPatternChecked(int userId, boolean matched, int timeoutMs, boolean isValidPattern) { - boolean dismissKeyguard = KeyguardUpdateMonitor.getCurrentUser() == userId; + boolean dismissKeyguard = mSelectedUserInteractor.getSelectedUserId() == userId; if (matched) { getKeyguardSecurityCallback().reportUnlockAttempt(userId, true, 0); if (dismissKeyguard) { @@ -198,9 +199,10 @@ public class KeyguardPatternViewController FalsingCollector falsingCollector, EmergencyButtonController emergencyButtonController, KeyguardMessageAreaController.Factory messageAreaControllerFactory, - DevicePostureController postureController, FeatureFlags featureFlags) { + DevicePostureController postureController, FeatureFlags featureFlags, + SelectedUserInteractor selectedUserInteractor) { super(view, securityMode, keyguardSecurityCallback, emergencyButtonController, - messageAreaControllerFactory, featureFlags); + messageAreaControllerFactory, featureFlags, selectedUserInteractor); mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; mLatencyTracker = latencyTracker; @@ -223,7 +225,7 @@ public class KeyguardPatternViewController mLockPatternView.setOnPatternListener(new UnlockPatternListener()); mLockPatternView.setSaveEnabled(false); mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled( - KeyguardUpdateMonitor.getCurrentUser())); + mSelectedUserInteractor.getSelectedUserId())); mLockPatternView.setOnTouchListener((v, event) -> { if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { mFalsingCollector.avoidGesture(); @@ -243,7 +245,7 @@ public class KeyguardPatternViewController mPostureController.addCallback(mPostureCallback); // if the user is currently locked out, enforce it. long deadline = mLockPatternUtils.getLockoutAttemptDeadline( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.getSelectedUserId()); if (deadline != 0) { handleAttemptLockout(deadline); } @@ -266,7 +268,7 @@ public class KeyguardPatternViewController public void reset() { // reset lock pattern mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled( - KeyguardUpdateMonitor.getCurrentUser())); + mSelectedUserInteractor.getSelectedUserId())); mLockPatternView.enableInput(); mLockPatternView.setEnabled(true); mLockPatternView.clearPattern(); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java index aacf8662b2b8..b7d1171431a8 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java @@ -25,9 +25,10 @@ import android.view.View.OnTouchListener; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; +import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; public abstract class KeyguardPinBasedInputViewController<T extends KeyguardPinBasedInputView> extends KeyguardAbsKeyInputViewController<T> { @@ -60,10 +61,11 @@ public abstract class KeyguardPinBasedInputViewController<T extends KeyguardPinB LiftToActivateListener liftToActivateListener, EmergencyButtonController emergencyButtonController, FalsingCollector falsingCollector, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + SelectedUserInteractor selectedUserInteractor) { super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, messageAreaControllerFactory, latencyTracker, falsingCollector, - emergencyButtonController, featureFlags); + emergencyButtonController, featureFlags, selectedUserInteractor); mLiftToActivateListener = liftToActivateListener; mFalsingCollector = falsingCollector; mPasswordEntry = mView.findViewById(mView.getPasswordTextViewId()); @@ -74,7 +76,7 @@ public abstract class KeyguardPinBasedInputViewController<T extends KeyguardPinB super.onViewAttached(); boolean showAnimations = !mLockPatternUtils - .isPinEnhancedPrivacyEnabled(KeyguardUpdateMonitor.getCurrentUser()); + .isPinEnhancedPrivacyEnabled(mSelectedUserInteractor.getSelectedUserId()); mPasswordEntry.setShowPassword(showAnimations); for (NumPadKey button : mView.getButtons()) { button.setOnTouchListener((v, event) -> { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java index 9a788688c9d1..947d90f488d1 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinViewController.java @@ -23,11 +23,12 @@ import android.view.View; import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; +import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.DevicePostureController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; public class KeyguardPinViewController extends KeyguardPinBasedInputViewController<KeyguardPINView> { @@ -55,17 +56,17 @@ public class KeyguardPinViewController EmergencyButtonController emergencyButtonController, FalsingCollector falsingCollector, DevicePostureController postureController, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, SelectedUserInteractor selectedUserInteractor) { super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, messageAreaControllerFactory, latencyTracker, liftToActivateListener, - emergencyButtonController, falsingCollector, featureFlags); + emergencyButtonController, falsingCollector, featureFlags, selectedUserInteractor); mKeyguardUpdateMonitor = keyguardUpdateMonitor; mPostureController = postureController; mLockPatternUtils = lockPatternUtils; mFeatureFlags = featureFlags; view.setIsLockScreenLandscapeEnabled(mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE)); mBackspaceKey = view.findViewById(R.id.delete_button); - mPinLength = mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser()); + mPinLength = mLockPatternUtils.getPinLength(selectedUserInteractor.getSelectedUserId()); } @Override @@ -124,7 +125,7 @@ public class KeyguardPinViewController private void updateAutoConfirmationState() { mDisabledAutoConfirmation = mLockPatternUtils.getCurrentFailedPasswordAttempts( - KeyguardUpdateMonitor.getCurrentUser()) >= MIN_FAILED_PIN_ATTEMPTS; + mSelectedUserInteractor.getSelectedUserId()) >= MIN_FAILED_PIN_ATTEMPTS; updateOKButtonVisibility(); updateBackSpaceVisibility(); updatePinHinting(); @@ -179,7 +180,8 @@ public class KeyguardPinViewController */ private boolean isAutoPinConfirmEnabledInSettings() { //Checks if user has enabled the auto confirm in Settings - return mLockPatternUtils.isAutoPinConfirmEnabled(KeyguardUpdateMonitor.getCurrentUser()) + return mLockPatternUtils.isAutoPinConfirmEnabled( + mSelectedUserInteractor.getSelectedUserId()) && mPinLength != LockPatternUtils.PIN_LENGTH_UNAVAILABLE; } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index 15bb2f85307a..7101ed599b86 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -157,23 +157,25 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private int mCurrentUser = UserHandle.USER_NULL; private UserSwitcherController.UserSwitchCallback mUserSwitchCallback = new UserSwitcherController.UserSwitchCallback() { - @Override - public void onUserSwitched() { - if (mCurrentUser == KeyguardUpdateMonitor.getCurrentUser()) { - return; - } - mCurrentUser = KeyguardUpdateMonitor.getCurrentUser(); - showPrimarySecurityScreen(false); - if (mCurrentSecurityMode != SecurityMode.SimPin - && mCurrentSecurityMode != SecurityMode.SimPuk) { - reinflateViewFlipper((l) -> {}); - } - } - }; + @Override + public void onUserSwitched() { + if (mCurrentUser == mSelectedUserInteractor.getSelectedUserId()) { + return; + } + mCurrentUser = mSelectedUserInteractor.getSelectedUserId(); + showPrimarySecurityScreen(false); + if (mCurrentSecurityMode != SecurityMode.SimPin + && mCurrentSecurityMode != SecurityMode.SimPuk) { + reinflateViewFlipper((l) -> { + }); + } + } + }; @VisibleForTesting final Gefingerpoken mGlobalTouchListener = new Gefingerpoken() { private MotionEvent mTouchDown; + @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return false; @@ -267,7 +269,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard ThreadUtils.postOnBackgroundThread(() -> { try { Thread.sleep(5000); - } catch (InterruptedException ignored) { } + } catch (InterruptedException ignored) { + } System.gc(); System.runFinalization(); System.gc(); @@ -281,7 +284,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mMetricsLogger.write(new LogMaker(MetricsEvent.BOUNCER) .setType(success ? MetricsEvent.TYPE_SUCCESS : MetricsEvent.TYPE_FAILURE)); mUiEventLogger.log(success ? BouncerUiEvent.BOUNCER_PASSWORD_SUCCESS - : BouncerUiEvent.BOUNCER_PASSWORD_FAILURE, getSessionId()); + : BouncerUiEvent.BOUNCER_PASSWORD_FAILURE, getSessionId()); } @Override @@ -404,7 +407,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } mKeyguardSecurityCallback.dismiss( false /* authenticated */, - KeyguardUpdateMonitor.getCurrentUser(), + mSelectedUserInteractor.getSelectedUserId(), /* bypassSecondaryLockScreen */ false, SecurityMode.Invalid ); @@ -425,7 +428,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final Provider<JavaAdapter> mJavaAdapter; private final DeviceProvisionedController mDeviceProvisionedController; private final Lazy<PrimaryBouncerInteractor> mPrimaryBouncerInteractor; - @Nullable private Job mSceneTransitionCollectionJob; + @Nullable + private Job mSceneTransitionCollectionJob; @Inject public KeyguardSecurityContainerController(KeyguardSecurityContainer view, @@ -520,7 +524,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard // When the scene framework says that the lockscreen has been dismissed, dismiss the // keyguard here, revealing the underlying app or launcher: mSceneTransitionCollectionJob = mJavaAdapter.get().alwaysCollectFlow( - mDeviceEntryInteractor.get().isDeviceEntered(), + mDeviceEntryInteractor.get().isDeviceEntered(), isDeviceEntered -> { if (isDeviceEntered) { final int selectedUserId = mSelectedUserInteractor.getSelectedUserId(); @@ -548,7 +552,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } } - /** */ + /** */ public void onPause() { if (DEBUG) { Log.d(TAG, String.format("screen off, instance %s at %s", @@ -586,12 +590,13 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** * Shows the primary security screen for the user. This will be either the multi-selector * or the user's security method. + * * @param turningOff true if the device is being turned off */ public void showPrimarySecurityScreen(boolean turningOff) { if (DEBUG) Log.d(TAG, "show()"); SecurityMode securityMode = whitelistIpcs(() -> mSecurityModel.getSecurityMode( - KeyguardUpdateMonitor.getCurrentUser())); + mSelectedUserInteractor.getSelectedUserId())); if (DEBUG) Log.v(TAG, "showPrimarySecurityScreen(turningOff=" + turningOff + ")"); showSecurityScreen(securityMode); } @@ -671,6 +676,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** * Dismisses the keyguard by going to the next screen or making it gone. + * * @param targetUserId a user that needs to be the foreground user at the dismissal completion. * @return True if the keyguard is done. */ @@ -716,7 +722,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard } /** - * Resets the state of the views. + * Resets the state of the views. */ public void reset() { mView.reset(); @@ -748,7 +754,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard getCurrentSecurityController(controller -> controller.onResume(reason)); } mView.onResume( - mSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()), + mSecurityModel.getSecurityMode(mSelectedUserInteractor.getSelectedUserId()), mKeyguardStateController.isFaceAuthEnabled()); } @@ -764,7 +770,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** * Show the bouncer and start appear animations. - * */ public void appear() { // We might still be collapsed and the view didn't have time to layout yet or still @@ -823,13 +828,16 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** * Shows the next security screen if there is one. - * @param authenticated true if the user entered the correct authentication - * @param targetUserId a user that needs to be the foreground user at the finish (if called) - * completion. + * + * @param authenticated true if the user entered the correct authentication + * @param targetUserId a user that needs to be the foreground user at the finish + * (if called) + * completion. * @param bypassSecondaryLockScreen true if the user is allowed to bypass the secondary - * secondary lock screen requirement, if any. - * @param expectedSecurityMode SecurityMode that is invoking this request. SecurityMode.Invalid - * indicates that no check should be done + * secondary lock screen requirement, if any. + * @param expectedSecurityMode SecurityMode that is invoking this request. + * SecurityMode.Invalid + * indicates that no check should be done * @return true if keyguard is done */ public boolean showNextSecurityScreenOrFinish(boolean authenticated, int targetUserId, @@ -879,7 +887,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard // Shortcut for SIM PIN/PUK to go to directly to user's security screen or home SecurityMode securityMode = mSecurityModel.getSecurityMode(targetUserId); boolean isLockscreenDisabled = mLockPatternUtils.isLockScreenDisabled( - KeyguardUpdateMonitor.getCurrentUser()) + mSelectedUserInteractor.getSelectedUserId()) || !mDeviceProvisionedController.isUserSetup(targetUserId); if (securityMode == SecurityMode.None && isLockscreenDisabled) { @@ -955,6 +963,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard * Allows the media keys to work when the keyguard is showing. * The media keys should be of no interest to the actual keyguard view(s), * so intercepting them here should not be of any harm. + * * @param event The key event * @return whether the event was consumed as a media key. */ @@ -1050,8 +1059,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard /** * Switches to the given security view unless it's already being shown, in which case * this is a no-op. - * - * @param securityMode */ @VisibleForTesting void showSecurityScreen(SecurityMode securityMode) { @@ -1230,6 +1237,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard * Fades and translates in/out the security screen. * Fades in as expansion approaches 0. * Animation duration is between 0.33f and 0.67f of panel expansion fraction. + * * @param fraction amount of the screen that should show. */ public void setExpansion(float fraction) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java index d2d051735643..6e242084d68c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java @@ -43,6 +43,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; public class KeyguardSimPinViewController extends KeyguardPinBasedInputViewController<KeyguardSimPinView> { @@ -83,10 +84,11 @@ public class KeyguardSimPinViewController KeyguardMessageAreaController.Factory messageAreaControllerFactory, LatencyTracker latencyTracker, LiftToActivateListener liftToActivateListener, TelephonyManager telephonyManager, FalsingCollector falsingCollector, - EmergencyButtonController emergencyButtonController, FeatureFlags featureFlags) { + EmergencyButtonController emergencyButtonController, FeatureFlags featureFlags, + SelectedUserInteractor selectedUserInteractor) { super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, messageAreaControllerFactory, latencyTracker, liftToActivateListener, - emergencyButtonController, falsingCollector, featureFlags); + emergencyButtonController, falsingCollector, featureFlags, selectedUserInteractor); mKeyguardUpdateMonitor = keyguardUpdateMonitor; mTelephonyManager = telephonyManager; mSimImageView = mView.findViewById(R.id.keyguard_sim); @@ -168,7 +170,7 @@ public class KeyguardSimPinViewController mRemainingAttempts = -1; mShowDefaultMessage = true; getKeyguardSecurityCallback().dismiss( - true, KeyguardUpdateMonitor.getCurrentUser(), + true, mSelectedUserInteractor.getSelectedUserId(), SecurityMode.SimPin); } else { mShowDefaultMessage = false; diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java index b52a36b8199e..13f9d3e1038e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java @@ -40,6 +40,7 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; public class KeyguardSimPukViewController extends KeyguardPinBasedInputViewController<KeyguardSimPukView> { @@ -70,7 +71,8 @@ public class KeyguardSimPukViewController if (simState == TelephonyManager.SIM_STATE_READY) { mRemainingAttempts = -1; mShowDefaultMessage = true; - getKeyguardSecurityCallback().dismiss(true, KeyguardUpdateMonitor.getCurrentUser(), + getKeyguardSecurityCallback().dismiss( + true, mSelectedUserInteractor.getSelectedUserId(), SecurityMode.SimPuk); } else { resetState(); @@ -87,10 +89,11 @@ public class KeyguardSimPukViewController KeyguardMessageAreaController.Factory messageAreaControllerFactory, LatencyTracker latencyTracker, LiftToActivateListener liftToActivateListener, TelephonyManager telephonyManager, FalsingCollector falsingCollector, - EmergencyButtonController emergencyButtonController, FeatureFlags featureFlags) { + EmergencyButtonController emergencyButtonController, FeatureFlags featureFlags, + SelectedUserInteractor selectedUserInteractor) { super(view, keyguardUpdateMonitor, securityMode, lockPatternUtils, keyguardSecurityCallback, messageAreaControllerFactory, latencyTracker, liftToActivateListener, - emergencyButtonController, falsingCollector, featureFlags); + emergencyButtonController, falsingCollector, featureFlags, selectedUserInteractor); mKeyguardUpdateMonitor = keyguardUpdateMonitor; mTelephonyManager = telephonyManager; mSimImageView = mView.findViewById(R.id.keyguard_sim); @@ -284,7 +287,7 @@ public class KeyguardSimPukViewController mShowDefaultMessage = true; getKeyguardSecurityCallback().dismiss( - true, KeyguardUpdateMonitor.getCurrentUser(), + true, mSelectedUserInteractor.getSelectedUserId(), SecurityMode.SimPuk); } else { mShowDefaultMessage = false; diff --git a/packages/SystemUI/src/com/android/systemui/LatencyTester.java b/packages/SystemUI/src/com/android/systemui/LatencyTester.java index b33d50137155..c860979afb10 100644 --- a/packages/SystemUI/src/com/android/systemui/LatencyTester.java +++ b/packages/SystemUI/src/com/android/systemui/LatencyTester.java @@ -31,7 +31,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; -import com.android.systemui.statusbar.phone.BiometricUnlockController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.concurrency.DelayableExecutor; @@ -53,25 +53,25 @@ public class LatencyTester implements CoreStartable { private static final String ACTION_FACE_WAKE = "com.android.systemui.latency.ACTION_FACE_WAKE"; - private final BiometricUnlockController mBiometricUnlockController; private final BroadcastDispatcher mBroadcastDispatcher; private final DeviceConfigProxy mDeviceConfigProxy; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final SelectedUserInteractor mSelectedUserInteractor; private boolean mEnabled; @Inject public LatencyTester( - BiometricUnlockController biometricUnlockController, BroadcastDispatcher broadcastDispatcher, DeviceConfigProxy deviceConfigProxy, @Main DelayableExecutor mainExecutor, - KeyguardUpdateMonitor keyguardUpdateMonitor + KeyguardUpdateMonitor keyguardUpdateMonitor, + SelectedUserInteractor selectedUserInteractor ) { - mBiometricUnlockController = biometricUnlockController; mBroadcastDispatcher = broadcastDispatcher; mDeviceConfigProxy = deviceConfigProxy; mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mSelectedUserInteractor = selectedUserInteractor; updateEnabled(); mDeviceConfigProxy.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_LATENCY_TRACKER, @@ -87,11 +87,11 @@ public class LatencyTester implements CoreStartable { return; } if (type == BiometricSourceType.FACE) { - mKeyguardUpdateMonitor.onFaceAuthenticated(KeyguardUpdateMonitor.getCurrentUser(), + mKeyguardUpdateMonitor.onFaceAuthenticated(mSelectedUserInteractor.getSelectedUserId(), true); } else if (type == BiometricSourceType.FINGERPRINT) { mKeyguardUpdateMonitor.onFingerprintAuthenticated( - KeyguardUpdateMonitor.getCurrentUser(), true); + mSelectedUserInteractor.getSelectedUserId(), true); } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index c9e4cbe30a2c..92eacf10e424 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -97,6 +97,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.Execution; import com.android.systemui.util.time.SystemClock; @@ -167,6 +168,7 @@ public class UdfpsController implements DozeReceiver, Dumpable { @NonNull private final AlternateBouncerInteractor mAlternateBouncerInteractor; @NonNull private final InputManager mInputManager; @NonNull private final UdfpsKeyguardAccessibilityDelegate mUdfpsKeyguardAccessibilityDelegate; + @NonNull private final SelectedUserInteractor mSelectedUserInteractor; private final boolean mIgnoreRefreshRate; // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple @@ -281,7 +283,8 @@ public class UdfpsController implements DozeReceiver, Dumpable { mPrimaryBouncerInteractor, mAlternateBouncerInteractor, mUdfpsKeyguardAccessibilityDelegate, - mUdfpsKeyguardViewModels + mUdfpsKeyguardViewModels, + mSelectedUserInteractor ))); } @@ -644,7 +647,8 @@ public class UdfpsController implements DozeReceiver, Dumpable { @NonNull InputManager inputManager, @NonNull KeyguardFaceAuthInteractor keyguardFaceAuthInteractor, @NonNull UdfpsKeyguardAccessibilityDelegate udfpsKeyguardAccessibilityDelegate, - @NonNull Provider<UdfpsKeyguardViewModels> udfpsKeyguardViewModelsProvider) { + @NonNull Provider<UdfpsKeyguardViewModels> udfpsKeyguardViewModelsProvider, + @NonNull SelectedUserInteractor selectedUserInteractor) { mContext = context; mExecution = execution; mVibrator = vibrator; @@ -687,6 +691,7 @@ public class UdfpsController implements DozeReceiver, Dumpable { mAlternateBouncerInteractor = alternateBouncerInteractor; mInputManager = inputManager; mUdfpsKeyguardAccessibilityDelegate = udfpsKeyguardAccessibilityDelegate; + mSelectedUserInteractor = selectedUserInteractor; mTouchProcessor = singlePointerTouchProcessor; mSessionTracker = sessionTracker; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt index 7130bfb462e3..272e0f21e74a 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt @@ -44,7 +44,6 @@ import android.view.accessibility.AccessibilityManager.TouchExplorationStateChan import androidx.annotation.LayoutRes import androidx.annotation.VisibleForTesting import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.res.R import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams import com.android.systemui.biometrics.ui.controller.UdfpsKeyguardViewController @@ -56,12 +55,14 @@ import com.android.systemui.flags.Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS import com.android.systemui.keyguard.ui.adapter.UdfpsKeyguardViewControllerAdapter import com.android.systemui.keyguard.ui.viewmodel.UdfpsKeyguardViewModels import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.res.R import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import kotlinx.coroutines.ExperimentalCoroutinesApi import javax.inject.Provider @@ -78,31 +79,32 @@ const val SETTING_REMOVE_ENROLLMENT_UI = "udfps_overlay_remove_enrollment_ui" @ExperimentalCoroutinesApi @UiThread class UdfpsControllerOverlay @JvmOverloads constructor( - private val context: Context, - private val inflater: LayoutInflater, - private val windowManager: WindowManager, - private val accessibilityManager: AccessibilityManager, - private val statusBarStateController: StatusBarStateController, - private val statusBarKeyguardViewManager: StatusBarKeyguardViewManager, - private val keyguardUpdateMonitor: KeyguardUpdateMonitor, - private val dialogManager: SystemUIDialogManager, - private val dumpManager: DumpManager, - private val transitionController: LockscreenShadeTransitionController, - private val configurationController: ConfigurationController, - private val keyguardStateController: KeyguardStateController, - private val unlockedScreenOffAnimationController: UnlockedScreenOffAnimationController, - private var udfpsDisplayModeProvider: UdfpsDisplayModeProvider, - val requestId: Long, - @ShowReason val requestReason: Int, - private val controllerCallback: IUdfpsOverlayControllerCallback, - private val onTouch: (View, MotionEvent, Boolean) -> Boolean, - private val activityLaunchAnimator: ActivityLaunchAnimator, - private val featureFlags: FeatureFlags, - private val primaryBouncerInteractor: PrimaryBouncerInteractor, - private val alternateBouncerInteractor: AlternateBouncerInteractor, - private val isDebuggable: Boolean = Build.IS_DEBUGGABLE, - private val udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate, - private val udfpsKeyguardViewModels: Provider<UdfpsKeyguardViewModels>, + private val context: Context, + private val inflater: LayoutInflater, + private val windowManager: WindowManager, + private val accessibilityManager: AccessibilityManager, + private val statusBarStateController: StatusBarStateController, + private val statusBarKeyguardViewManager: StatusBarKeyguardViewManager, + private val keyguardUpdateMonitor: KeyguardUpdateMonitor, + private val dialogManager: SystemUIDialogManager, + private val dumpManager: DumpManager, + private val transitionController: LockscreenShadeTransitionController, + private val configurationController: ConfigurationController, + private val keyguardStateController: KeyguardStateController, + private val unlockedScreenOffAnimationController: UnlockedScreenOffAnimationController, + private var udfpsDisplayModeProvider: UdfpsDisplayModeProvider, + val requestId: Long, + @ShowReason val requestReason: Int, + private val controllerCallback: IUdfpsOverlayControllerCallback, + private val onTouch: (View, MotionEvent, Boolean) -> Boolean, + private val activityLaunchAnimator: ActivityLaunchAnimator, + private val featureFlags: FeatureFlags, + private val primaryBouncerInteractor: PrimaryBouncerInteractor, + private val alternateBouncerInteractor: AlternateBouncerInteractor, + private val isDebuggable: Boolean = Build.IS_DEBUGGABLE, + private val udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate, + private val udfpsKeyguardViewModels: Provider<UdfpsKeyguardViewModels>, + private val selectedUserInteractor: SelectedUserInteractor, ) { /** The view, when [isShowing], or null. */ var overlayView: UdfpsView? = null @@ -268,6 +270,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor( primaryBouncerInteractor, alternateBouncerInteractor, udfpsKeyguardAccessibilityDelegate, + selectedUserInteractor, ) } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt index 3d5be6fb9f8c..d7df0e585dcf 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerLegacy.kt @@ -45,6 +45,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import java.io.PrintWriter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job @@ -68,6 +69,7 @@ open class UdfpsKeyguardViewControllerLegacy( primaryBouncerInteractor: PrimaryBouncerInteractor, private val alternateBouncerInteractor: AlternateBouncerInteractor, private val udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate, + private val selectedUserInteractor: SelectedUserInteractor, ) : UdfpsAnimationViewController<UdfpsKeyguardViewLegacy>( view, @@ -384,7 +386,7 @@ open class UdfpsKeyguardViewControllerLegacy( } if ( keyguardUpdateMonitor.getUserUnlockedWithBiometric( - KeyguardUpdateMonitor.getCurrentUser() + selectedUserInteractor.getSelectedUserId() ) ) { // If the device was unlocked by a biometric, immediately hide the UDFPS icon to avoid diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt index 2a1047ac6f76..38043b4020e5 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractor.kt @@ -17,13 +17,13 @@ package com.android.systemui.biometrics.domain.interactor import android.view.MotionEvent -import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.awaitClose @@ -35,11 +35,16 @@ import kotlinx.coroutines.flow.stateIn @SysUISingleton class UdfpsOverlayInteractor @Inject -constructor(private val authController: AuthController, @Application scope: CoroutineScope) { +constructor( + private val authController: AuthController, + private val selectedUserInteractor: SelectedUserInteractor, + @Application scope: CoroutineScope +) { /** Whether a touch is within the under-display fingerprint sensor area */ fun isTouchWithinUdfpsArea(ev: MotionEvent): Boolean { - val isUdfpsEnrolled = authController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser()) + val isUdfpsEnrolled = + authController.isUdfpsEnrolled(selectedUserInteractor.getSelectedUserId()) val isWithinOverlayBounds = udfpsOverlayParams.value.overlayBounds.contains(ev.rawX.toInt(), ev.rawY.toInt()) return isUdfpsEnrolled && isWithinOverlayBounds diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt index 6e26fe952749..2bd62587834d 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractor.kt @@ -28,7 +28,6 @@ import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitorCallback import com.android.systemui.DejankUtils -import com.android.systemui.res.R import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN @@ -41,8 +40,10 @@ import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.res.R import com.android.systemui.shared.system.SysUiStatsLog import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow @@ -73,6 +74,7 @@ constructor( private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val trustRepository: TrustRepository, @Application private val applicationScope: CoroutineScope, + private val selectedUserInteractor: SelectedUserInteractor, ) { private val passiveAuthBouncerDelay = context.resources.getInteger(R.integer.primary_bouncer_passive_auth_delay).toLong() @@ -384,7 +386,7 @@ constructor( /** Returns whether the bouncer should be full screen. */ private fun needsFullscreenBouncer(): Boolean { val mode: KeyguardSecurityModel.SecurityMode = - keyguardSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()) + keyguardSecurityModel.getSecurityMode(selectedUserInteractor.getSelectedUserId()) return mode == KeyguardSecurityModel.SecurityMode.SimPin || mode == KeyguardSecurityModel.SecurityMode.SimPuk } diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt index 36e5db4c62e0..ac3d4b6c853b 100644 --- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/KeyguardBouncerViewBinder.kt @@ -26,7 +26,6 @@ import com.android.keyguard.KeyguardMessageAreaController import com.android.keyguard.KeyguardSecurityContainerController import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardSecurityView -import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.dagger.KeyguardBouncerComponent import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_VISIBLE @@ -37,6 +36,7 @@ import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransition import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.log.BouncerLogger import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch @@ -53,6 +53,7 @@ object KeyguardBouncerViewBinder { bouncerMessageInteractor: BouncerMessageInteractor, bouncerLogger: BouncerLogger, featureFlags: FeatureFlags, + selectedUserInteractor: SelectedUserInteractor, ) { // Builds the KeyguardSecurityContainerController from bouncer view group. val securityContainerController: KeyguardSecurityContainerController = @@ -84,7 +85,7 @@ object KeyguardBouncerViewBinder { override fun showNextSecurityScreenOrFinish(): Boolean { return securityContainerController.dismiss( - KeyguardUpdateMonitor.getCurrentUser() + selectedUserInteractor.getSelectedUserId() ) } @@ -220,7 +221,7 @@ object KeyguardBouncerViewBinder { launch { viewModel.keyguardAuthenticated.collect { securityContainerController.finish( - KeyguardUpdateMonitor.getCurrentUser() + selectedUserInteractor.getSelectedUserId() ) viewModel.notifyKeyguardAuthenticated() } diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt index b2680950d9c5..b39716c9c330 100644 --- a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt @@ -27,17 +27,16 @@ import android.content.pm.ResolveInfo import android.os.RemoteException import android.util.Log import android.view.WindowManager -import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.ActivityIntentHelper import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.plugins.ActivityStarter -import com.android.systemui.settings.UserTracker import com.android.systemui.shared.system.ActivityManagerKt.isInForeground import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import java.util.concurrent.Executor import javax.inject.Inject @@ -59,7 +58,7 @@ class CameraGestureHelper @Inject constructor( private val cameraIntents: CameraIntentsWrapper, private val contentResolver: ContentResolver, @Main private val uiExecutor: Executor, - private val userTracker: UserTracker + private val selectedUserInteractor: SelectedUserInteractor, ) { /** * Whether the camera application can be launched for the camera launch gesture. @@ -72,12 +71,12 @@ class CameraGestureHelper @Inject constructor( val resolveInfo: ResolveInfo? = packageManager.resolveActivityAsUser( getStartCameraIntent(), PackageManager.MATCH_DEFAULT_ONLY, - KeyguardUpdateMonitor.getCurrentUser() + selectedUserInteractor.getSelectedUserId() ) val resolvedPackage = resolveInfo?.activityInfo?.packageName return (resolvedPackage != null && (statusBarState != StatusBarState.SHADE || - !activityManager.isInForeground(resolvedPackage))) + !activityManager.isInForeground(resolvedPackage))) } /** @@ -89,7 +88,7 @@ class CameraGestureHelper @Inject constructor( val intent: Intent = getStartCameraIntent() intent.putExtra(CameraIntents.EXTRA_LAUNCH_SOURCE, source) val wouldLaunchResolverActivity = activityIntentHelper.wouldLaunchResolverActivity( - intent, KeyguardUpdateMonitor.getCurrentUser() + intent, selectedUserInteractor.getSelectedUserId() ) if (CameraIntents.isSecureCameraIntent(intent) && !wouldLaunchResolverActivity) { uiExecutor.execute { @@ -102,7 +101,7 @@ class CameraGestureHelper @Inject constructor( val activityOptions = ActivityOptions.makeBasic() activityOptions.setDisallowEnterPictureInPictureWhileLaunching(true) activityOptions.rotationAnimationHint = - WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS + WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS try { activityTaskManager.startActivityAsUser( null, @@ -116,7 +115,7 @@ class CameraGestureHelper @Inject constructor( Intent.FLAG_ACTIVITY_NEW_TASK, null, activityOptions.toBundle(), - userTracker.userId, + selectedUserInteractor.getSelectedUserId(), ) } catch (e: RemoteException) { Log.w( diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java index 39c01f759654..a6b073da2530 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java @@ -37,12 +37,15 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.sensors.ThresholdSensorEvent; import com.android.systemui.util.time.SystemClock; +import dagger.Lazy; + import java.util.Collections; import javax.inject.Inject; @@ -66,6 +69,7 @@ class FalsingCollectorImpl implements FalsingCollector { private final DockManager mDockManager; private final DelayableExecutor mMainExecutor; private final SystemClock mSystemClock; + private final Lazy<SelectedUserInteractor> mUserInteractor; private int mState; private boolean mShowingAod; @@ -93,7 +97,7 @@ class FalsingCollectorImpl implements FalsingCollector { public void onBiometricAuthenticated(int userId, BiometricSourceType biometricSourceType, boolean isStrongBiometric) { - if (userId == KeyguardUpdateMonitor.getCurrentUser() + if (userId == mUserInteractor.get().getSelectedUserId() && biometricSourceType == BiometricSourceType.FACE) { mFalsingDataProvider.setJustUnlockedWithFace(true); } @@ -136,7 +140,8 @@ class FalsingCollectorImpl implements FalsingCollector { BatteryController batteryController, DockManager dockManager, @Main DelayableExecutor mainExecutor, - SystemClock systemClock) { + SystemClock systemClock, + Lazy<SelectedUserInteractor> userInteractor) { mFalsingDataProvider = falsingDataProvider; mFalsingManager = falsingManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; @@ -148,6 +153,7 @@ class FalsingCollectorImpl implements FalsingCollector { mDockManager = dockManager; mMainExecutor = mainExecutor; mSystemClock = systemClock; + mUserInteractor = userInteractor; mProximitySensor.setTag(PROXIMITY_SENSOR_TAG); mProximitySensor.setDelay(SensorManager.SENSOR_DELAY_GAME); diff --git a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java index bf4fba89ca55..0bf50693344a 100644 --- a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +++ b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java @@ -26,11 +26,13 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.types.ExtractionType; import com.android.internal.colorextraction.types.Tonal; -import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; + +import dagger.Lazy; import java.io.PrintWriter; import java.util.Arrays; @@ -48,19 +50,22 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, private boolean mHasMediaArtwork; private final GradientColors mNeutralColorsLock; private final GradientColors mBackdropColors; + private Lazy<SelectedUserInteractor> mUserInteractor; @Inject public SysuiColorExtractor( Context context, ConfigurationController configurationController, - DumpManager dumpManager) { + DumpManager dumpManager, + Lazy<SelectedUserInteractor> userInteractor) { this( context, new Tonal(context), configurationController, context.getSystemService(WallpaperManager.class), dumpManager, - false /* immediately */); + false /* immediately */, + userInteractor); } @VisibleForTesting @@ -70,7 +75,8 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, ConfigurationController configurationController, WallpaperManager wallpaperManager, DumpManager dumpManager, - boolean immediately) { + boolean immediately, + Lazy<SelectedUserInteractor> userInteractor) { super(context, type, immediately, wallpaperManager); mTonal = type instanceof Tonal ? (Tonal) type : new Tonal(context); mNeutralColorsLock = new GradientColors(); @@ -79,6 +85,7 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, mBackdropColors = new GradientColors(); mBackdropColors.setMainColor(Color.BLACK); + mUserInteractor = userInteractor; // Listen to all users instead of only the current one. if (wallpaperManager.isWallpaperSupported()) { @@ -100,7 +107,7 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, @Override public void onColorsChanged(WallpaperColors colors, int which, int userId) { - if (userId != KeyguardUpdateMonitor.getCurrentUser()) { + if (userId != mUserInteractor.get().getSelectedUserId()) { // Colors do not belong to current user, ignoring. return; } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java b/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java index 5eb9808ebd7c..9c13a8c82b11 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeAuthRemover.java @@ -18,6 +18,7 @@ package com.android.systemui.doze; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.doze.dagger.DozeScope; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import javax.inject.Inject; @@ -28,16 +29,19 @@ import javax.inject.Inject; public class DozeAuthRemover implements DozeMachine.Part { private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final SelectedUserInteractor mSelectedUserInteractor; @Inject - public DozeAuthRemover(KeyguardUpdateMonitor keyguardUpdateMonitor) { + public DozeAuthRemover(KeyguardUpdateMonitor keyguardUpdateMonitor, + SelectedUserInteractor selectedUserInteractor) { mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mSelectedUserInteractor = selectedUserInteractor; } @Override public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) { if (newState == DozeMachine.State.DOZE || newState == DozeMachine.State.DOZE_AOD) { - int currentUser = KeyguardUpdateMonitor.getCurrentUser(); + int currentUser = mSelectedUserInteractor.getSelectedUserId(); if (mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(currentUser)) { mKeyguardUpdateMonitor.clearBiometricRecognized(); } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java index 7da2cf150147..ba579188a8c9 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java @@ -31,13 +31,13 @@ import android.view.Display; import androidx.annotation.Nullable; -import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.UdfpsController; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.WrappedService; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.wakelock.SettableWakeLock; import com.android.systemui.util.wakelock.WakeLock; @@ -81,6 +81,7 @@ public class DozeScreenState implements DozeMachine.Part { @Nullable private UdfpsController mUdfpsController; private final DozeLog mDozeLog; private final DozeScreenBrightness mDozeScreenBrightness; + private final SelectedUserInteractor mSelectedUserInteractor; private int mPendingScreenState = Display.STATE_UNKNOWN; private SettableWakeLock mWakeLock; @@ -95,7 +96,8 @@ public class DozeScreenState implements DozeMachine.Part { AuthController authController, Provider<UdfpsController> udfpsControllerProvider, DozeLog dozeLog, - DozeScreenBrightness dozeScreenBrightness) { + DozeScreenBrightness dozeScreenBrightness, + SelectedUserInteractor selectedUserInteractor) { mDozeService = service; mHandler = handler; mParameters = parameters; @@ -105,6 +107,7 @@ public class DozeScreenState implements DozeMachine.Part { mUdfpsControllerProvider = udfpsControllerProvider; mDozeLog = dozeLog; mDozeScreenBrightness = dozeScreenBrightness; + mSelectedUserInteractor = selectedUserInteractor; updateUdfpsController(); if (mUdfpsController == null) { @@ -113,7 +116,7 @@ public class DozeScreenState implements DozeMachine.Part { } private void updateUdfpsController() { - if (mAuthController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser())) { + if (mAuthController.isUdfpsEnrolled(mSelectedUserInteractor.getSelectedUserId())) { mUdfpsController = mUdfpsControllerProvider.get(); } else { mUdfpsController = null; diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index 07efbfef732b..d66a6f754dab 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -48,12 +48,11 @@ import com.android.internal.R; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; -import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.biometrics.AuthController; import com.android.systemui.plugins.SensorManagerPlugin; -import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.DevicePostureController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.settings.SecureSettings; @@ -101,7 +100,7 @@ public class DozeSensors { private final SecureSettings mSecureSettings; private final DevicePostureController mDevicePostureController; private final AuthController mAuthController; - private final UserTracker mUserTracker; + private final SelectedUserInteractor mSelectedUserInteractor; private final boolean mScreenOffUdfpsEnabled; // Sensors @@ -158,7 +157,7 @@ public class DozeSensors { SecureSettings secureSettings, AuthController authController, DevicePostureController devicePostureController, - UserTracker userTracker + SelectedUserInteractor selectedUserInteractor ) { mSensorManager = sensorManager; mConfig = config; @@ -171,15 +170,15 @@ public class DozeSensors { mProximitySensor.setTag(TAG); mSelectivelyRegisterProxSensors = dozeParameters.getSelectivelyRegisterSensorsUsingProx(); mListeningProxSensors = !mSelectivelyRegisterProxSensors; + mSelectedUserInteractor = selectedUserInteractor; mScreenOffUdfpsEnabled = - config.screenOffUdfpsEnabled(KeyguardUpdateMonitor.getCurrentUser()); + config.screenOffUdfpsEnabled(mSelectedUserInteractor.getSelectedUserId()); mDevicePostureController = devicePostureController; mDevicePosture = mDevicePostureController.getDevicePosture(); mAuthController = authController; - mUserTracker = userTracker; mUdfpsEnrolled = - mAuthController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser()); + mAuthController.isUdfpsEnrolled(mSelectedUserInteractor.getSelectedUserId()); mAuthController.addCallback(mAuthControllerCallback); mTriggerSensors = new TriggerSensor[] { new TriggerSensor( @@ -255,7 +254,7 @@ public class DozeSensors { new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE, mConfig.wakeScreenGestureAvailable() - && mConfig.alwaysOnEnabled(mUserTracker.getUserId()), + && mConfig.alwaysOnEnabled(mSelectedUserInteractor.getSelectedUserId()), DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE, false /* reports touch coordinates */, false /* touchscreen */ @@ -296,12 +295,13 @@ public class DozeSensors { private boolean udfpsLongPressConfigured() { return mUdfpsEnrolled - && (mConfig.alwaysOnEnabled(mUserTracker.getUserId()) || mScreenOffUdfpsEnabled); + && (mConfig.alwaysOnEnabled(mSelectedUserInteractor.getSelectedUserId()) + || mScreenOffUdfpsEnabled); } private boolean quickPickUpConfigured() { return mUdfpsEnrolled - && mConfig.quickPickupSensorEnabled(KeyguardUpdateMonitor.getCurrentUser()); + && mConfig.quickPickupSensorEnabled(mSelectedUserInteractor.getSelectedUserId()); } /** @@ -471,7 +471,7 @@ public class DozeSensors { private final ContentObserver mSettingsObserver = new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange, Collection<Uri> uris, int flags, int userId) { - if (userId != mUserTracker.getUserId()) { + if (userId != mSelectedUserInteractor.getSelectedUserId()) { return; } for (TriggerSensor s : mTriggerSensors) { @@ -697,13 +697,13 @@ public class DozeSensors { } protected boolean enabledBySetting() { - if (!mConfig.enabled(mUserTracker.getUserId())) { + if (!mConfig.enabled(mSelectedUserInteractor.getSelectedUserId())) { return false; } else if (TextUtils.isEmpty(mSetting)) { return true; } return mSecureSettings.getIntForUser(mSetting, mSettingDefault ? 1 : 0, - mUserTracker.getUserId()) != 0; + mSelectedUserInteractor.getSelectedUserId()) != 0; } @Override @@ -873,7 +873,7 @@ public class DozeSensors { private void updateUdfpsEnrolled() { mUdfpsEnrolled = mAuthController.isUdfpsEnrolled( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.getSelectedUserId()); for (TriggerSensor sensor : mTriggerSensors) { if (REASON_SENSOR_QUICK_PICKUP == sensor.mPulseReason) { sensor.setConfigured(quickPickUpConfigured()); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 85272a609588..073ab085c5b6 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -50,6 +50,7 @@ import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.DevicePostureController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.Assert; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximityCheck; @@ -102,6 +103,7 @@ public class DozeTriggers implements DozeMachine.Part { private final AuthController mAuthController; private final KeyguardStateController mKeyguardStateController; private final UserTracker mUserTracker; + private final SelectedUserInteractor mSelectedUserInteractor; private final UiEventLogger mUiEventLogger; private long mNotificationPulseTime; @@ -201,7 +203,8 @@ public class DozeTriggers implements DozeMachine.Part { SessionTracker sessionTracker, KeyguardStateController keyguardStateController, DevicePostureController devicePostureController, - UserTracker userTracker) { + UserTracker userTracker, + SelectedUserInteractor selectedUserInteractor) { mContext = context; mDozeHost = dozeHost; mConfig = config; @@ -213,7 +216,7 @@ public class DozeTriggers implements DozeMachine.Part { mDozeSensors = new DozeSensors(mContext.getResources(), mSensorManager, dozeParameters, config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, proximitySensor, - secureSettings, authController, devicePostureController, userTracker); + secureSettings, authController, devicePostureController, selectedUserInteractor); mDockManager = dockManager; mProxCheck = proxCheck; mDozeLog = dozeLog; @@ -222,6 +225,7 @@ public class DozeTriggers implements DozeMachine.Part { mUiEventLogger = uiEventLogger; mKeyguardStateController = keyguardStateController; mUserTracker = userTracker; + mSelectedUserInteractor = selectedUserInteractor; } @Override @@ -246,7 +250,7 @@ public class DozeTriggers implements DozeMachine.Part { return; } mNotificationPulseTime = SystemClock.elapsedRealtime(); - if (!mConfig.pulseOnNotificationEnabled(mUserTracker.getUserId())) { + if (!mConfig.pulseOnNotificationEnabled(mSelectedUserInteractor.getSelectedUserId())) { runIfNotNull(onPulseSuppressedListener); mDozeLog.tracePulseDropped("pulseOnNotificationsDisabled"); return; diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java index c6c1f79c7113..5cc2e0aa811c 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java @@ -134,6 +134,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.telephony.TelephonyListenerManager; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.EmergencyDialerConstants; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.settings.GlobalSettings; @@ -195,6 +196,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene private final IDreamManager mDreamManager; private final DevicePolicyManager mDevicePolicyManager; private final LockPatternUtils mLockPatternUtils; + private final SelectedUserInteractor mSelectedUserInteractor; private final TelephonyListenerManager mTelephonyListenerManager; private final KeyguardStateController mKeyguardStateController; private final BroadcastDispatcher mBroadcastDispatcher; @@ -364,7 +366,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene PackageManager packageManager, ShadeController shadeController, KeyguardUpdateMonitor keyguardUpdateMonitor, - DialogLaunchAnimator dialogLaunchAnimator) { + DialogLaunchAnimator dialogLaunchAnimator, + SelectedUserInteractor selectedUserInteractor) { mContext = context; mWindowManagerFuncs = windowManagerFuncs; mAudioManager = audioManager; @@ -399,6 +402,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mShadeController = shadeController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mDialogLaunchAnimator = dialogLaunchAnimator; + mSelectedUserInteractor = selectedUserInteractor; // receive broadcasts IntentFilter filter = new IntentFilter(); @@ -713,7 +717,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mUiEventLogger, mShadeController, mKeyguardUpdateMonitor, - mLockPatternUtils); + mLockPatternUtils, + mSelectedUserInteractor); dialog.setOnDismissListener(this); dialog.setOnShowListener(this); @@ -2222,6 +2227,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene private GestureDetector mGestureDetector; private final ShadeController mShadeController; private KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private SelectedUserInteractor mSelectedUserInteractor; private LockPatternUtils mLockPatternUtils; private float mWindowDimAmount; @@ -2300,7 +2306,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene UiEventLogger uiEventLogger, ShadeController shadeController, KeyguardUpdateMonitor keyguardUpdateMonitor, - LockPatternUtils lockPatternUtils) { + LockPatternUtils lockPatternUtils, + SelectedUserInteractor selectedUserInteractor) { // We set dismissOnDeviceLock to false because we have a custom broadcast receiver to // dismiss this dialog when the device is locked. super(context, themeRes, false /* dismissOnDeviceLock */); @@ -2321,6 +2328,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; mGestureDetector = new GestureDetector(mContext, mGestureListener); + mSelectedUserInteractor = selectedUserInteractor; } @Override @@ -2453,10 +2461,10 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene } // If user entered from the lock screen and smart lock was enabled, disable it - int user = KeyguardUpdateMonitor.getCurrentUser(); + int user = mSelectedUserInteractor.getSelectedUserId(); boolean userHasTrust = mKeyguardUpdateMonitor.getUserHasTrust(user); if (mKeyguardShowing && userHasTrust) { - mLockPatternUtils.requireCredentialEntry(KeyguardUpdateMonitor.getCurrentUser()); + mLockPatternUtils.requireCredentialEntry(user); showSmartLockDisabledMessage(); } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt index ad2ec69b77ce..f1649fb2851e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt @@ -18,7 +18,6 @@ package com.android.systemui.keyguard.domain.interactor import android.animation.ValueAnimator import com.android.keyguard.KeyguardSecurityModel -import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.flags.FeatureFlags @@ -27,19 +26,20 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel import com.android.systemui.power.domain.interactor.PowerInteractor +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.Utils.Companion.toQuad import com.android.systemui.util.kotlin.Utils.Companion.toQuint import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import com.android.wm.shell.animation.Interpolators +import javax.inject.Inject +import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch -import javax.inject.Inject -import kotlin.time.Duration.Companion.milliseconds @SysUISingleton class FromPrimaryBouncerTransitionInteractor @@ -51,6 +51,7 @@ constructor( private val keyguardInteractor: KeyguardInteractor, private val flags: FeatureFlags, private val keyguardSecurityModel: KeyguardSecurityModel, + private val selectedUserInteractor: SelectedUserInteractor, private val powerInteractor: PowerInteractor, ) : TransitionInteractor( @@ -132,7 +133,7 @@ constructor( .collect { ( isBouncerShowing, - isAwake, + isAwake, lastStartedTransitionStep, occluded, isActiveDreamLockscreenHosted) -> @@ -162,8 +163,7 @@ constructor( ), ::toQuad ) - .collect { - (isBouncerShowing, isAsleep, lastStartedTransitionStep, isAodAvailable) + .collect { (isBouncerShowing, isAsleep, lastStartedTransitionStep, isAodAvailable) -> if ( !isBouncerShowing && @@ -181,25 +181,24 @@ constructor( private fun listenForPrimaryBouncerToDreamingLockscreenHosted() { scope.launch { keyguardInteractor.primaryBouncerShowing - .sample( - combine( - keyguardInteractor.isActiveDreamLockscreenHosted, - transitionInteractor.startedKeyguardTransitionStep, - ::Pair - ), - ::toTriple - ) - .collect { (isBouncerShowing, - isActiveDreamLockscreenHosted, - lastStartedTransitionStep) -> - if ( - !isBouncerShowing && - isActiveDreamLockscreenHosted && - lastStartedTransitionStep.to == KeyguardState.PRIMARY_BOUNCER - ) { - startTransitionTo(KeyguardState.DREAMING_LOCKSCREEN_HOSTED) - } + .sample( + combine( + keyguardInteractor.isActiveDreamLockscreenHosted, + transitionInteractor.startedKeyguardTransitionStep, + ::Pair + ), + ::toTriple + ) + .collect { + (isBouncerShowing, isActiveDreamLockscreenHosted, lastStartedTransitionStep) -> + if ( + !isBouncerShowing && + isActiveDreamLockscreenHosted && + lastStartedTransitionStep.to == KeyguardState.PRIMARY_BOUNCER + ) { + startTransitionTo(KeyguardState.DREAMING_LOCKSCREEN_HOSTED) } + } } } @@ -221,7 +220,7 @@ constructor( ) { val securityMode = keyguardSecurityModel.getSecurityMode( - KeyguardUpdateMonitor.getCurrentUser() + selectedUserInteractor.getSelectedUserId() ) // IME for password requires a slightly faster animation val duration = diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt index 17e8bb320912..628e912253eb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractor.kt @@ -27,12 +27,12 @@ import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.kotlin.Utils.Companion.toQuad import com.android.systemui.util.kotlin.sample +import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge -import javax.inject.Inject /** Encapsulates business logic for requesting the keyguard to dismiss/finish/done. */ @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt index 5075a0766c2c..87d8164e1cb9 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardDismissBinder.kt @@ -26,9 +26,9 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardDismissInteractor import com.android.systemui.keyguard.shared.model.KeyguardDone import com.android.systemui.log.core.LogLevel import com.android.systemui.user.domain.interactor.SelectedUserInteractor +import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject /** Handles keyguard dismissal requests. */ @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java index 6f5e41f626de..04263882d3a8 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java @@ -47,7 +47,6 @@ import android.view.WindowManager.LayoutParams; import android.view.WindowManagerGlobal; import com.android.internal.annotations.VisibleForTesting; -import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; import com.android.systemui.biometrics.AuthController; import com.android.systemui.colorextraction.SysuiColorExtractor; @@ -72,6 +71,7 @@ import com.android.systemui.statusbar.phone.StatusBarWindowCallback; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import dagger.Lazy; @@ -112,6 +112,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW private final KeyguardBypassController mKeyguardBypassController; private final Executor mBackgroundExecutor; private final AuthController mAuthController; + private final Lazy<SelectedUserInteractor> mUserInteractor; private final Lazy<ShadeInteractor> mShadeInteractorLazy; private ViewGroup mWindowRootView; private LayoutParams mLp; @@ -157,7 +158,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW AuthController authController, ShadeExpansionStateManager shadeExpansionStateManager, Lazy<ShadeInteractor> shadeInteractorLazy, - ShadeWindowLogger logger) { + ShadeWindowLogger logger, + Lazy<SelectedUserInteractor> userInteractor) { mContext = context; mWindowRootViewComponentFactory = windowRootViewComponentFactory; mWindowManager = windowManager; @@ -174,6 +176,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW mScreenOffAnimationController = screenOffAnimationController; dumpManager.registerDumpable(this); mAuthController = authController; + mUserInteractor = userInteractor; mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed(); mLockScreenDisplayTimeout = context.getResources() .getInteger(R.integer.config_lockScreenDisplayTimeout); @@ -348,7 +351,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW boolean onKeyguard = state.statusBarState == StatusBarState.KEYGUARD && !state.keyguardFadingAway && !state.keyguardGoingAway; if (onKeyguard - && mAuthController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser())) { + && mAuthController.isUdfpsEnrolled(mUserInteractor.get().getSelectedUserId())) { // both max and min display refresh rate must be set to take effect: mLpChanged.preferredMaxDisplayRefreshRate = mKeyguardPreferredRefreshRate; mLpChanged.preferredMinDisplayRefreshRate = mKeyguardPreferredRefreshRate; diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java index d05dfe2c11c1..09514404d4db 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java @@ -36,7 +36,6 @@ import com.android.keyguard.LockIconViewController; import com.android.keyguard.dagger.KeyguardBouncerComponent; import com.android.systemui.Dumpable; import com.android.systemui.animation.ActivityLaunchAnimator; -import com.android.systemui.back.domain.interactor.BackActionInteractor; import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor; import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; @@ -55,7 +54,6 @@ import com.android.systemui.keyguard.shared.model.TransitionState; import com.android.systemui.keyguard.shared.model.TransitionStep; import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel; import com.android.systemui.log.BouncerLogger; -import com.android.systemui.power.domain.interactor.PowerInteractor; import com.android.systemui.res.R; import com.android.systemui.shared.animation.DisableSubpixelTextTransitionListener; import com.android.systemui.statusbar.DragDownHelper; @@ -75,6 +73,7 @@ import com.android.systemui.statusbar.phone.PhoneStatusBarViewController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.window.StatusBarWindowStateController; import com.android.systemui.unfold.UnfoldTransitionProgressProvider; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.time.SystemClock; import java.io.PrintWriter; @@ -128,8 +127,6 @@ public class NotificationShadeWindowViewController implements Dumpable { private final CentralSurfaces mService; private final DozeServiceHost mDozeServiceHost; private final DozeScrimController mDozeScrimController; - private final BackActionInteractor mBackActionInteractor; - private final PowerInteractor mPowerInteractor; private final NotificationShadeWindowController mNotificationShadeWindowController; private DragDownHelper mDragDownHelper; private boolean mExpandingBelowNotch; @@ -164,8 +161,6 @@ public class NotificationShadeWindowViewController implements Dumpable { CentralSurfaces centralSurfaces, DozeServiceHost dozeServiceHost, DozeScrimController dozeScrimController, - BackActionInteractor backActionInteractor, - PowerInteractor powerInteractor, NotificationShadeWindowController controller, Optional<UnfoldTransitionProgressProvider> unfoldTransitionProgressProvider, KeyguardUnlockAnimationController keyguardUnlockAnimationController, @@ -187,7 +182,8 @@ public class NotificationShadeWindowViewController implements Dumpable { BouncerLogger bouncerLogger, SysUIKeyEventHandler sysUIKeyEventHandler, PrimaryBouncerInteractor primaryBouncerInteractor, - AlternateBouncerInteractor alternateBouncerInteractor) { + AlternateBouncerInteractor alternateBouncerInteractor, + SelectedUserInteractor selectedUserInteractor) { mLockscreenShadeTransitionController = transitionController; mFalsingCollector = falsingCollector; mStatusBarStateController = statusBarStateController; @@ -200,12 +196,10 @@ public class NotificationShadeWindowViewController implements Dumpable { mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; mStatusBarWindowStateController = statusBarWindowStateController; mLockIconViewController = lockIconViewController; - mBackActionInteractor = backActionInteractor; mShadeLogger = shadeLogger; mService = centralSurfaces; mDozeServiceHost = dozeServiceHost; mDozeScrimController = dozeScrimController; - mPowerInteractor = powerInteractor; mNotificationShadeWindowController = controller; mKeyguardUnlockAnimationController = keyguardUnlockAnimationController; mAmbientState = ambientState; @@ -229,7 +223,8 @@ public class NotificationShadeWindowViewController implements Dumpable { messageAreaControllerFactory, bouncerMessageInteractor, bouncerLogger, - featureFlags); + featureFlags, + selectedUserInteractor); collectFlow(mView, keyguardTransitionInteractor.getLockscreenToDreamingTransition(), mLockscreenToDreamingTransition); diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt index 205a80a04089..a8a20cc8559b 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeInteractor.kt @@ -36,6 +36,8 @@ import com.android.systemui.statusbar.pipeline.mobile.data.repository.UserSetupR import com.android.systemui.statusbar.policy.data.repository.DeviceProvisioningRepository import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.util.kotlin.pairwise +import javax.inject.Inject +import javax.inject.Provider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.currentCoroutineContext @@ -51,8 +53,6 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.isActive -import javax.inject.Inject -import javax.inject.Provider /** Business logic for shade interactions. */ @OptIn(ExperimentalCoroutinesApi::class) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt index 9ba1f7aa2f66..380cdadd1361 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt @@ -30,6 +30,7 @@ import com.android.systemui.statusbar.notification.collection.coordinator.dagger import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import dagger.Binds import dagger.Module import javax.inject.Inject @@ -52,7 +53,8 @@ class SensitiveContentCoordinatorImpl @Inject constructor( private val lockscreenUserManager: NotificationLockscreenUserManager, private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val statusBarStateController: StatusBarStateController, - private val keyguardStateController: KeyguardStateController + private val keyguardStateController: KeyguardStateController, + private val selectedUserInteractor: SelectedUserInteractor, ) : Invalidator("SensitiveContentInvalidator"), SensitiveContentCoordinator, DynamicPrivacyController.Listener, @@ -67,10 +69,10 @@ class SensitiveContentCoordinatorImpl @Inject constructor( override fun onDynamicPrivacyChanged(): Unit = invalidateList("onDynamicPrivacyChanged") override fun onBeforeRenderList(entries: List<ListEntry>) { - if (keyguardStateController.isKeyguardGoingAway() || - statusBarStateController.getState() == StatusBarState.KEYGUARD && + if (keyguardStateController.isKeyguardGoingAway || + statusBarStateController.state == StatusBarState.KEYGUARD && keyguardUpdateMonitor.getUserUnlockedWithBiometricAndIsBypassing( - KeyguardUpdateMonitor.getCurrentUser())) { + selectedUserInteractor.getSelectedUserId())) { // don't update yet if: // - the keyguard is currently going away // - LS is about to be dismissed by a biometric that bypasses LS (avoid notif flash) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java index 8129b83a22d9..23f1929d9dbb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java @@ -59,8 +59,11 @@ import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.time.SystemClock; +import dagger.Lazy; + import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -175,6 +178,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp private final BiometricUnlockLogger mLogger; private final SystemClock mSystemClock; private final boolean mOrderUnlockAndWake; + private final Lazy<SelectedUserInteractor> mSelectedUserInteractor; private final DeviceEntryHapticsInteractor mHapticsInteractor; private long mLastFpFailureUptimeMillis; @@ -286,7 +290,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp VibratorHelper vibrator, SystemClock systemClock, FeatureFlags featureFlags, - DeviceEntryHapticsInteractor hapticsInteractor + DeviceEntryHapticsInteractor hapticsInteractor, + Lazy<SelectedUserInteractor> selectedUserInteractor ) { mPowerManager = powerManager; mUpdateMonitor = keyguardUpdateMonitor; @@ -317,6 +322,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp mOrderUnlockAndWake = resources.getBoolean( com.android.internal.R.bool.config_orderUnlockAndWake); mHapticsInteractor = hapticsInteractor; + mSelectedUserInteractor = selectedUserInteractor; dumpManager.registerDumpable(this); } @@ -537,7 +543,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp return mPendingAuthenticated != null && mUpdateMonitor .isUnlockingWithBiometricAllowed(mPendingAuthenticated.isStrongBiometric) - && mPendingAuthenticated.userId == KeyguardUpdateMonitor.getCurrentUser(); + && mPendingAuthenticated.userId + == mSelectedUserInteractor.get().getSelectedUserId(); } public @WakeAndUnlockMode int getMode() { @@ -601,11 +608,11 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp // if unlocking isn't allowed, log more information about why unlocking may not // have been allowed final int strongAuthFlags = mUpdateMonitor.getStrongAuthTracker().getStrongAuthForUser( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.get().getSelectedUserId()); final boolean nonStrongBiometricAllowed = mUpdateMonitor.getStrongAuthTracker() .isNonStrongBiometricAllowedAfterIdleTimeout( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.get().getSelectedUserId()); mLogger.logCalculateModeForFingerprintUnlockingNotAllowed(strongBiometric, strongAuthFlags, nonStrongBiometricAllowed, deviceInteractive, keyguardShowing); @@ -671,11 +678,11 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp // if unlocking isn't allowed, log more information about why unlocking may not // have been allowed final int strongAuthFlags = mUpdateMonitor.getStrongAuthTracker().getStrongAuthForUser( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.get().getSelectedUserId()); final boolean nonStrongBiometricAllowed = mUpdateMonitor.getStrongAuthTracker() .isNonStrongBiometricAllowedAfterIdleTimeout( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.get().getSelectedUserId()); mLogger.logCalculateModeForPassiveAuthUnlockingNotAllowed( strongBiometric, strongAuthFlags, nonStrongBiometricAllowed, @@ -723,7 +730,7 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp // Suppress all face auth errors if fingerprint can be used to authenticate if ((biometricSourceType == BiometricSourceType.FACE && !mUpdateMonitor.getCachedIsUnlockWithFingerprintPossible( - KeyguardUpdateMonitor.getCurrentUser())) + mSelectedUserInteractor.get().getSelectedUserId())) || (biometricSourceType == BiometricSourceType.FINGERPRINT)) { mHapticsInteractor.vibrateError(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt index bde5c32c9f41..109e77e92b7b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt @@ -31,6 +31,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dump.DumpManager import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.Assert import com.android.systemui.util.sensors.AsyncSensorManager import java.io.PrintWriter @@ -48,7 +49,8 @@ class KeyguardLiftController @Inject constructor( private val asyncSensorManager: AsyncSensorManager, private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val keyguardFaceAuthInteractor: KeyguardFaceAuthInteractor, - private val dumpManager: DumpManager + private val dumpManager: DumpManager, + private val selectedUserInteractor: SelectedUserInteractor, ) : Dumpable, CoreStartable { private val pickupSensor = asyncSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE) @@ -115,7 +117,7 @@ class KeyguardLiftController @Inject constructor( val onKeyguard = keyguardUpdateMonitor.isKeyguardVisible && !statusBarStateController.isDozing - val userId = KeyguardUpdateMonitor.getCurrentUser() + val userId = selectedUserInteractor.getSelectedUserId() val isFaceEnabled = keyguardUpdateMonitor.isFaceAuthEnabledForUser(userId) val shouldListen = (onKeyguard || bouncerVisible) && isFaceEnabled if (shouldListen != isListening) { 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 400ac7b415b5..90fddd9ae22c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -92,6 +92,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; 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 dagger.Lazy; @@ -313,6 +314,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private final KeyguardUpdateMonitor mKeyguardUpdateManager; private final LatencyTracker mLatencyTracker; private final KeyguardSecurityModel mKeyguardSecurityModel; + private final SelectedUserInteractor mSelectedUserInteractor; @Nullable private KeyguardBypassController mBypassController; @Nullable private OccludingAppBiometricUI mOccludingAppBiometricUI; @@ -370,7 +372,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb KeyguardTransitionInteractor keyguardTransitionInteractor, @Main CoroutineDispatcher mainDispatcher, Lazy<WindowManagerLockscreenVisibilityInteractor> wmLockscreenVisibilityInteractor, - Lazy<KeyguardDismissActionInteractor> keyguardDismissActionInteractorLazy + Lazy<KeyguardDismissActionInteractor> keyguardDismissActionInteractorLazy, + SelectedUserInteractor selectedUserInteractor ) { mContext = context; mViewMediatorCallback = callback; @@ -403,6 +406,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mMainDispatcher = mainDispatcher; mWmLockscreenVisibilityInteractor = wmLockscreenVisibilityInteractor; mKeyguardDismissActionInteractor = keyguardDismissActionInteractorLazy; + mSelectedUserInteractor = selectedUserInteractor; } KeyguardTransitionInteractor mKeyguardTransitionInteractor; @@ -1142,7 +1146,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb */ public boolean isSecure() { return mKeyguardSecurityModel.getSecurityMode( - KeyguardUpdateMonitor.getCurrentUser()) != KeyguardSecurityModel.SecurityMode.None; + mSelectedUserInteractor.getSelectedUserId()) + != KeyguardSecurityModel.SecurityMode.None; } /** @@ -1690,7 +1695,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb */ public boolean needsFullscreenBouncer() { KeyguardSecurityModel.SecurityMode mode = mKeyguardSecurityModel.getSecurityMode( - KeyguardUpdateMonitor.getCurrentUser()); + mSelectedUserInteractor.getSelectedUserId()); return mode == KeyguardSecurityModel.SecurityMode.SimPin || mode == KeyguardSecurityModel.SecurityMode.SimPuk; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java index 1c88289706f3..c950c1ab3cbd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java @@ -37,11 +37,12 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.logging.KeyguardUpdateMonitorLogger; import com.android.systemui.Dumpable; -import com.android.systemui.res.R; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; +import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import dagger.Lazy; @@ -64,6 +65,7 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum private final Context mContext; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final LockPatternUtils mLockPatternUtils; + private final Lazy<SelectedUserInteractor> mUserInteractor; private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = new UpdateMonitorCallback(); private final Lazy<KeyguardUnlockAnimationController> mUnlockAnimationControllerLazy; @@ -120,11 +122,13 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum Lazy<KeyguardUnlockAnimationController> keyguardUnlockAnimationController, KeyguardUpdateMonitorLogger logger, DumpManager dumpManager, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + Lazy<SelectedUserInteractor> userInteractor) { mContext = context; mLogger = logger; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; + mUserInteractor = userInteractor; mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback); mUnlockAnimationControllerLazy = keyguardUnlockAnimationController; mFeatureFlags = featureFlags; diff --git a/packages/SystemUI/src/com/android/systemui/user/data/repository/UserSwitcherRepository.kt b/packages/SystemUI/src/com/android/systemui/user/data/repository/UserSwitcherRepository.kt index dc7fadd5eb14..1238789389ee 100644 --- a/packages/SystemUI/src/com/android/systemui/user/data/repository/UserSwitcherRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/user/data/repository/UserSwitcherRepository.kt @@ -21,7 +21,6 @@ import android.graphics.drawable.Drawable import android.os.Handler import android.os.UserManager import android.provider.Settings.Global.USER_SWITCHER_ENABLED -import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import com.android.systemui.dagger.SysUISingleton @@ -30,7 +29,6 @@ import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.qs.SettingObserver import com.android.systemui.qs.footer.data.model.UserSwitcherStatusModel import com.android.systemui.res.R -import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.UserInfoController import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.util.settings.GlobalSettings @@ -61,10 +59,10 @@ constructor( @Background private val bgHandler: Handler, @Background private val bgDispatcher: CoroutineDispatcher, private val userManager: UserManager, - private val userTracker: UserTracker, private val userSwitcherController: UserSwitcherController, private val userInfoController: UserInfoController, private val globalSetting: GlobalSettings, + private val userRepository: UserRepository, ) : UserSwitcherRepository { private val showUserSwitcherForSingleUser = context.resources.getBoolean(R.bool.qs_show_user_switcher_for_single_user) @@ -80,7 +78,7 @@ constructor( globalSetting, bgHandler, USER_SWITCHER_ENABLED, - userTracker.userId, + userRepository.getSelectedUserInfo().id, ) { override fun handleValueChanged(value: Int, observedChange: Boolean) { if (observedChange) { @@ -147,7 +145,7 @@ constructor( private suspend fun isGuestUser(): Boolean { return withContext(bgDispatcher) { - userManager.isGuestUser(KeyguardUpdateMonitor.getCurrentUser()) + userManager.isGuestUser(userRepository.getSelectedUserInfo().id) } } diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt index cced98376197..922dc0521a49 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/UserSwitcherDialogCoordinator.kt @@ -37,11 +37,11 @@ import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.user.domain.model.ShowDialogRequestModel import com.android.systemui.user.ui.viewmodel.UserSwitcherViewModel import dagger.Lazy +import javax.inject.Inject +import javax.inject.Provider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.launch -import javax.inject.Inject -import javax.inject.Provider /** Coordinates dialogs for user switcher logic. */ @SysUISingleton diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt index 1c31e8aef1ec..4089889f4b1e 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModel.kt @@ -25,12 +25,12 @@ import com.android.systemui.user.domain.interactor.UserSwitcherInteractor import com.android.systemui.user.legacyhelper.ui.LegacyUserUiHelper import com.android.systemui.user.shared.model.UserActionModel import com.android.systemui.user.shared.model.UserModel +import javax.inject.Inject +import kotlin.math.ceil import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map -import javax.inject.Inject -import kotlin.math.ceil /** Models UI state for the user switcher feature. */ @SysUISingleton diff --git a/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java index d506584cdfac..cdd0eb0e265d 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java @@ -50,6 +50,7 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.SysuiTestCase; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import org.junit.After; import org.junit.Before; @@ -64,7 +65,7 @@ import org.mockito.MockitoAnnotations; @SmallTest public class AdminSecondaryLockScreenControllerTest extends SysuiTestCase { - private static final int TARGET_USER_ID = KeyguardUpdateMonitor.getCurrentUser(); + private static final int TARGET_USER_ID = 0; private AdminSecondaryLockScreenController mTestController; private ComponentName mComponentName; @@ -80,12 +81,15 @@ public class AdminSecondaryLockScreenControllerTest extends SysuiTestCase { private KeyguardSecurityCallback mKeyguardCallback; @Mock private KeyguardUpdateMonitor mUpdateMonitor; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; private SurfaceControlViewHost.SurfacePackage mSurfacePackage; @Before public void setUp() { MockitoAnnotations.initMocks(this); + when(mSelectedUserInteractor.getSelectedUserId()).thenReturn(TARGET_USER_ID); mKeyguardSecurityContainer = spy(new KeyguardSecurityContainer(mContext)); mKeyguardSecurityContainer.setId(View.generateViewId()); @@ -106,7 +110,8 @@ public class AdminSecondaryLockScreenControllerTest extends SysuiTestCase { new Binder())).getSurfacePackage(); mTestController = new AdminSecondaryLockScreenController.Factory( - mContext, mKeyguardSecurityContainer, mUpdateMonitor, mHandler) + mContext, mKeyguardSecurityContainer, mUpdateMonitor, mHandler, + mSelectedUserInteractor) .create(mKeyguardCallback); } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt index 30fed0b0316f..c61b11ae7336 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/EmergencyButtonControllerTest.kt @@ -29,6 +29,7 @@ import com.android.internal.widget.LockPatternUtils import com.android.systemui.SysuiTestCase import com.android.systemui.shade.ShadeController import com.android.systemui.statusbar.policy.ConfigurationController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq @@ -59,6 +60,7 @@ class EmergencyButtonControllerTest : SysuiTestCase() { @Mock lateinit var metricsLogger: MetricsLogger @Mock lateinit var lockPatternUtils: LockPatternUtils @Mock lateinit var packageManager: PackageManager + @Mock lateinit var mSelectedUserInteractor: SelectedUserInteractor val fakeSystemClock = FakeSystemClock() val mainExecutor = FakeExecutor(fakeSystemClock) val backgroundExecutor = FakeExecutor(fakeSystemClock) @@ -79,7 +81,8 @@ class EmergencyButtonControllerTest : SysuiTestCase() { metricsLogger, lockPatternUtils, mainExecutor, - backgroundExecutor + backgroundExecutor, + mSelectedUserInteractor, ) context.setMockPackageManager(packageManager) Mockito.`when`(emergencyButton.context).thenReturn(context) diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java index 42f65f6f53b4..7f20d9aa9451 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardAbsKeyInputViewControllerTest.java @@ -37,12 +37,13 @@ import com.android.internal.util.LatencyTracker; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardAbsKeyInputView.KeyDownListener; import com.android.keyguard.KeyguardSecurityModel.SecurityMode; -import com.android.systemui.res.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.classifier.FalsingCollectorFake; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.flags.Flags; +import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import org.junit.Before; import org.junit.Test; @@ -81,6 +82,8 @@ public class KeyguardAbsKeyInputViewControllerTest extends SysuiTestCase { private EmergencyButtonController mEmergencyButtonController; private FakeFeatureFlags mFeatureFlags; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; private KeyguardAbsKeyInputViewController mKeyguardAbsKeyInputViewController; @Before @@ -105,7 +108,7 @@ public class KeyguardAbsKeyInputViewControllerTest extends SysuiTestCase { return new KeyguardAbsKeyInputViewController(mAbsKeyInputView, mKeyguardUpdateMonitor, mSecurityMode, mLockPatternUtils, mKeyguardSecurityCallback, mKeyguardMessageAreaControllerFactory, mLatencyTracker, mFalsingCollector, - mEmergencyButtonController, mFeatureFlags) { + mEmergencyButtonController, mFeatureFlags, mSelectedUserInteractor) { @Override void resetState() { } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardBiometricLockoutLoggerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardBiometricLockoutLoggerTest.kt index 91b544b8265c..634dac16d1ec 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardBiometricLockoutLoggerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardBiometricLockoutLoggerTest.kt @@ -25,6 +25,7 @@ import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUT import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_FOR_UNATTENDED_UPDATE import com.android.systemui.SysuiTestCase import com.android.systemui.log.SessionTracker +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -34,8 +35,8 @@ import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.verify import org.mockito.Mockito.verifyNoMoreInteractions -import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations +import org.mockito.Mockito.`when` as whenever @RunWith(AndroidTestingRunner::class) @SmallTest @@ -50,6 +51,8 @@ class KeyguardBiometricLockoutLoggerTest : SysuiTestCase() { lateinit var sessionTracker: SessionTracker @Mock lateinit var sessionId: InstanceId + @Mock + lateinit var mSelectedUserInteractor: SelectedUserInteractor @Captor lateinit var updateMonitorCallbackCaptor: ArgumentCaptor<KeyguardUpdateMonitorCallback> @@ -65,7 +68,8 @@ class KeyguardBiometricLockoutLoggerTest : SysuiTestCase() { keyguardBiometricLockoutLogger = KeyguardBiometricLockoutLogger( uiEventLogger, keyguardUpdateMonitor, - sessionTracker) + sessionTracker, + mSelectedUserInteractor) } @Test diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt index d8a2c5f76fce..3fbcf6d77f82 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt @@ -24,12 +24,13 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.res.R import com.android.systemui.statusbar.policy.DevicePostureController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.mockito.whenever import org.junit.Before @@ -62,6 +63,7 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() { @Mock lateinit var mainExecutor: DelayableExecutor @Mock lateinit var falsingCollector: FalsingCollector @Mock lateinit var keyguardViewController: KeyguardViewController + @Mock lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var mKeyguardMessageArea: BouncerKeyguardMessageArea @Mock private lateinit var mKeyguardMessageAreaController: @@ -106,7 +108,8 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() { falsingCollector, keyguardViewController, postureController, - fakeFeatureFlags + fakeFeatureFlags, + mSelectedUserInteractor, ) } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt index dc1618d128b3..74c922561343 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt @@ -24,15 +24,16 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.res.R import com.android.systemui.statusbar.policy.DevicePostureController import com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_HALF_OPENED import com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat @@ -75,6 +76,9 @@ class KeyguardPatternViewControllerTest : SysuiTestCase() { KeyguardMessageAreaController.Factory @Mock + private lateinit var mSelectedUserInteractor: SelectedUserInteractor + + @Mock private lateinit var mKeyguardMessageAreaController: KeyguardMessageAreaController<BouncerKeyguardMessageArea> @@ -108,7 +112,8 @@ class KeyguardPatternViewControllerTest : SysuiTestCase() { mEmergencyButtonController, mKeyguardMessageAreaControllerFactory, mPostureController, - fakeFeatureFlags + fakeFeatureFlags, + mSelectedUserInteractor ) mKeyguardPatternView.onAttachedToWindow() } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java index 4a24e4a1f40f..d41c2497b230 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java @@ -34,10 +34,10 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.classifier.FalsingCollectorFake; -import com.android.systemui.classifier.SingleTapClassifier; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.res.R; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import org.junit.Before; import org.junit.Test; @@ -76,11 +76,11 @@ public class KeyguardPinBasedInputViewControllerTest extends SysuiTestCase { private EmergencyButtonController mEmergencyButtonController; private FalsingCollector mFalsingCollector = new FalsingCollectorFake(); @Mock - private SingleTapClassifier mSingleTapClassifier; - @Mock private View mDeleteButton; @Mock private View mOkButton; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; private NumPadKey[] mButtons = new NumPadKey[]{}; private KeyguardPinBasedInputViewController mKeyguardPinViewController; @@ -108,7 +108,8 @@ public class KeyguardPinBasedInputViewControllerTest extends SysuiTestCase { mKeyguardPinViewController = new KeyguardPinBasedInputViewController(mPinBasedInputView, mKeyguardUpdateMonitor, mSecurityMode, mLockPatternUtils, mKeyguardSecurityCallback, mKeyguardMessageAreaControllerFactory, mLatencyTracker, mLiftToactivateListener, - mEmergencyButtonController, mFalsingCollector, featureFlags) { + mEmergencyButtonController, mFalsingCollector, featureFlags, + mSelectedUserInteractor) { @Override public void onResume(int reason) { super.onResume(reason); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt index 9df4dd4df4d2..80d45bcc23dd 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinViewControllerTest.kt @@ -25,15 +25,16 @@ import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils import com.android.keyguard.KeyguardSecurityModel.SecurityMode -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.classifier.FalsingCollectorFake import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.res.R import com.android.systemui.statusbar.policy.DevicePostureController import com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_HALF_OPENED import com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat import org.junit.Before @@ -84,6 +85,7 @@ class KeyguardPinViewControllerTest : SysuiTestCase() { @Mock private val mEmergencyButtonController: EmergencyButtonController? = null private val falsingCollector: FalsingCollector = FalsingCollectorFake() @Mock lateinit var postureController: DevicePostureController + @Mock lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock lateinit var featureFlags: FeatureFlags @Mock lateinit var passwordTextView: PasswordTextView @@ -133,7 +135,8 @@ class KeyguardPinViewControllerTest : SysuiTestCase() { mEmergencyButtonController, falsingCollector, postureController, - featureFlags + featureFlags, + mSelectedUserInteractor, ) } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt index 581739030aad..fda4133240c2 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt @@ -74,6 +74,7 @@ import com.android.systemui.util.mockito.whenever import com.android.systemui.util.settings.GlobalSettings import com.google.common.truth.Truth import dagger.Lazy +import java.util.Optional import junit.framework.Assert import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow @@ -96,7 +97,6 @@ import org.mockito.Mockito.never import org.mockito.Mockito.spy import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations -import java.util.Optional @SmallTest @RunWith(AndroidJUnit4::class) @@ -215,7 +215,8 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { null, keyguardViewController, postureController, - featureFlags + featureFlags, + mSelectedUserInteractor, ) sceneTestUtils = SceneTestUtils(this) diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt index 4290b8b28687..94c3bde29597 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPinViewControllerTest.kt @@ -24,11 +24,12 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.res.R +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import org.junit.Before import org.junit.Test @@ -58,6 +59,7 @@ class KeyguardSimPinViewControllerTest : SysuiTestCase() { @Mock private lateinit var telephonyManager: TelephonyManager @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var emergencyButtonController: EmergencyButtonController + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var keyguardMessageAreaController: KeyguardMessageAreaController<BouncerKeyguardMessageArea> @@ -90,6 +92,7 @@ class KeyguardSimPinViewControllerTest : SysuiTestCase() { falsingCollector, emergencyButtonController, fakeFeatureFlags, + mSelectedUserInteractor ) underTest.init() } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt index 31ee6411f93b..7b1f302da6e8 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSimPukViewControllerTest.kt @@ -24,11 +24,12 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.util.LatencyTracker import com.android.internal.widget.LockPatternUtils -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.classifier.FalsingCollector import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags +import com.android.systemui.res.R +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import org.junit.Before import org.junit.Test @@ -54,6 +55,7 @@ class KeyguardSimPukViewControllerTest : SysuiTestCase() { @Mock private lateinit var telephonyManager: TelephonyManager @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var emergencyButtonController: EmergencyButtonController + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var keyguardMessageAreaController: KeyguardMessageAreaController<BouncerKeyguardMessageArea> @@ -89,6 +91,7 @@ class KeyguardSimPukViewControllerTest : SysuiTestCase() { falsingCollector, emergencyButtonController, fakeFeatureFlags, + mSelectedUserInteractor, ) underTest.init() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt index ebe13feb0f6f..c5f16aa97f18 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt @@ -36,7 +36,6 @@ import android.view.accessibility.AccessibilityManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardUpdateMonitor -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams @@ -46,12 +45,14 @@ import com.android.systemui.dump.DumpManager import com.android.systemui.flags.FeatureFlags import com.android.systemui.keyguard.ui.viewmodel.UdfpsKeyguardViewModels import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.res.R import com.android.systemui.statusbar.LockscreenShadeTransitionController import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.settings.SecureSettings import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -111,6 +112,7 @@ class UdfpsControllerOverlayTest : SysuiTestCase() { @Mock private lateinit var primaryBouncerInteractor: PrimaryBouncerInteractor @Mock private lateinit var alternateBouncerInteractor: AlternateBouncerInteractor @Mock private lateinit var udfpsUtils: UdfpsUtils + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate @Mock private lateinit var udfpsKeyguardViewModels: Provider<UdfpsKeyguardViewModels> @@ -163,6 +165,7 @@ class UdfpsControllerOverlayTest : SysuiTestCase() { isDebuggable, udfpsKeyguardAccessibilityDelegate, udfpsKeyguardViewModels, + mSelectedUserInteractor, ) block() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index dcb53984ad87..f32e1a5bcd6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -102,6 +102,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.FakeExecution; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; @@ -214,6 +215,8 @@ public class UdfpsControllerTest extends SysuiTestCase { private UdfpsKeyguardAccessibilityDelegate mUdfpsKeyguardAccessibilityDelegate; @Mock private Provider<UdfpsKeyguardViewModels> mUdfpsKeyguardViewModels; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; // Capture listeners so that they can be used to send events @Captor @@ -326,7 +329,8 @@ public class UdfpsControllerTest extends SysuiTestCase { mInputManager, mock(KeyguardFaceAuthInteractor.class), mUdfpsKeyguardAccessibilityDelegate, - mUdfpsKeyguardViewModels + mUdfpsKeyguardViewModels, + mSelectedUserInteractor ); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); mOverlayController = mOverlayCaptor.getValue(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerBaseTest.java index e512adcc0542..2c4e1362bed3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerBaseTest.java @@ -40,6 +40,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager; import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.DelayableExecutor; import org.junit.Before; @@ -69,6 +70,7 @@ public class UdfpsKeyguardViewLegacyControllerBaseTest extends SysuiTestCase { protected @Mock PrimaryBouncerInteractor mPrimaryBouncerInteractor; protected @Mock AlternateBouncerInteractor mAlternateBouncerInteractor; protected @Mock UdfpsKeyguardAccessibilityDelegate mUdfpsKeyguardAccessibilityDelegate; + protected @Mock SelectedUserInteractor mSelectedUserInteractor; protected FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags(); @@ -142,7 +144,8 @@ public class UdfpsKeyguardViewLegacyControllerBaseTest extends SysuiTestCase { mFeatureFlags, mPrimaryBouncerInteractor, mAlternateBouncerInteractor, - mUdfpsKeyguardAccessibilityDelegate); + mUdfpsKeyguardAccessibilityDelegate, + mSelectedUserInteractor); return controller; } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt index 02ee53879ea0..97dada27f8c0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewLegacyControllerWithCoroutinesTest.kt @@ -96,6 +96,7 @@ class UdfpsKeyguardViewLegacyControllerWithCoroutinesTest : mKeyguardUpdateMonitor, FakeTrustRepository(), testScope.backgroundScope, + mSelectedUserInteractor, ) mAlternateBouncerInteractor = AlternateBouncerInteractor( diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt index 6b9c34bbd237..bbf471c34cc7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/UdfpsOverlayInteractorTest.kt @@ -24,6 +24,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.shared.model.UdfpsOverlayParams import com.android.systemui.coroutines.collectLastValue +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope @@ -55,6 +56,7 @@ class UdfpsOverlayInteractorTest : SysuiTestCase() { @Mock private lateinit var udfpsOverlayParams: UdfpsOverlayParams @Mock private lateinit var overlayBounds: Rect + @Mock private lateinit var selectedUserInteractor: SelectedUserInteractor private lateinit var underTest: UdfpsOverlayInteractor @@ -104,7 +106,12 @@ class UdfpsOverlayInteractorTest : SysuiTestCase() { } private fun createUdpfsOverlayInteractor() { - underTest = UdfpsOverlayInteractor(authController, testScope.backgroundScope) + underTest = + UdfpsOverlayInteractor( + authController, + selectedUserInteractor, + testScope.backgroundScope + ) testScope.runCurrent() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt index cc4eca546e17..b48bc1d28f86 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/BouncerMessageInteractorTest.kt @@ -48,6 +48,7 @@ import com.android.systemui.res.R.string.kg_too_many_failed_attempts_countdown import com.android.systemui.res.R.string.kg_trust_agent_disabled import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.KotlinArgumentCaptor import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat @@ -86,6 +87,7 @@ class BouncerMessageInteractorTest : SysuiTestCase() { @Mock private lateinit var countDownTimerUtil: CountDownTimerUtil @Mock private lateinit var systemPropertiesHelper: SystemPropertiesHelper @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor private lateinit var primaryBouncerInteractor: PrimaryBouncerInteractor private lateinit var testScope: TestScope @@ -119,6 +121,7 @@ class BouncerMessageInteractorTest : SysuiTestCase() { keyguardUpdateMonitor, fakeTrustRepository, testScope.backgroundScope, + mSelectedUserInteractor, ) underTest = BouncerMessageInteractor( diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt index 9a5b4585e0ae..9373ada75003 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorTest.kt @@ -25,7 +25,6 @@ import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardSecurityModel import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.DejankUtils -import com.android.systemui.res.R import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN @@ -37,7 +36,9 @@ import com.android.systemui.classifier.FalsingCollector import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.FakeTrustRepository import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.res.R import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever import com.android.systemui.utils.os.FakeHandler @@ -70,6 +71,7 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var dismissCallbackRegistry: DismissCallbackRegistry @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor private lateinit var mainHandler: FakeHandler private lateinit var underTest: PrimaryBouncerInteractor private lateinit var resources: TestableResources @@ -100,6 +102,7 @@ class PrimaryBouncerInteractorTest : SysuiTestCase() { keyguardUpdateMonitor, trustRepository, testScope.backgroundScope, + mSelectedUserInteractor, ) whenever(repository.primaryBouncerStartingDisappearAnimation.value).thenReturn(null) whenever(repository.primaryBouncerShow.value).thenReturn(false) diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt index 2018e614ba00..d1b120e0948b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt @@ -28,8 +28,8 @@ import com.android.systemui.classifier.FalsingCollector import com.android.systemui.coroutines.collectLastValue import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository -import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.utils.os.FakeHandler import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.TestScope @@ -51,8 +51,8 @@ class PrimaryBouncerInteractorWithCoroutinesTest : SysuiTestCase() { @Mock private lateinit var primaryBouncerCallbackInteractor: PrimaryBouncerCallbackInteractor @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var dismissCallbackRegistry: DismissCallbackRegistry - @Mock private lateinit var keyguardBypassController: KeyguardBypassController @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor private val mainHandler = FakeHandler(Looper.getMainLooper()) private lateinit var underTest: PrimaryBouncerInteractor @@ -74,6 +74,7 @@ class PrimaryBouncerInteractorWithCoroutinesTest : SysuiTestCase() { keyguardUpdateMonitor, Mockito.mock(TrustRepository::class.java), TestScope().backgroundScope, + mSelectedUserInteractor, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt index 802f8e6043fd..b75f3e0876ff 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/viewmodel/KeyguardBouncerViewModelTest.kt @@ -32,8 +32,8 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.keyguard.DismissCallbackRegistry import com.android.systemui.keyguard.data.repository.TrustRepository -import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.utils.os.FakeHandler import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.launchIn @@ -60,7 +60,7 @@ class KeyguardBouncerViewModelTest : SysuiTestCase() { @Mock private lateinit var primaryBouncerCallbackInteractor: PrimaryBouncerCallbackInteractor @Mock private lateinit var falsingCollector: FalsingCollector @Mock private lateinit var dismissCallbackRegistry: DismissCallbackRegistry - @Mock private lateinit var keyguardBypassController: KeyguardBypassController + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor private val mainHandler = FakeHandler(Looper.getMainLooper()) val repository = FakeKeyguardBouncerRepository() @@ -82,6 +82,7 @@ class KeyguardBouncerViewModelTest : SysuiTestCase() { keyguardUpdateMonitor, Mockito.mock(TrustRepository::class.java), TestScope().backgroundScope, + mSelectedUserInteractor, ) underTest = KeyguardBouncerViewModel(bouncerView, bouncerInteractor) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt index 037c1badf0ac..6d3cc4c536f1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt @@ -28,11 +28,11 @@ import androidx.test.filters.SmallTest import com.android.systemui.ActivityIntentHelper import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.ActivityStarter -import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.KotlinArgumentCaptor import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock @@ -46,8 +46,8 @@ import org.mockito.Mock import org.mockito.Mockito.any import org.mockito.Mockito.anyInt import org.mockito.Mockito.verify -import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations +import org.mockito.Mockito.`when` as whenever @SmallTest @RunWith(JUnit4::class) @@ -74,7 +74,7 @@ class CameraGestureHelperTest : SysuiTestCase() { @Mock lateinit var contentResolver: ContentResolver @Mock - lateinit var userTracker: UserTracker + lateinit var mSelectedUserInteractor: SelectedUserInteractor private lateinit var underTest: CameraGestureHelper @@ -103,7 +103,7 @@ class CameraGestureHelperTest : SysuiTestCase() { cameraIntents = cameraIntents, contentResolver = contentResolver, uiExecutor = MoreExecutors.directExecutor(), - userTracker = userTracker, + selectedUserInteractor = mSelectedUserInteractor, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java index 442bf918ad8c..80fe9e762832 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java @@ -40,6 +40,7 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; @@ -75,6 +76,8 @@ public class FalsingCollectorImplTest extends SysuiTestCase { private ShadeExpansionStateManager mShadeExpansionStateManager; @Mock private BatteryController mBatteryController; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; private final DockManagerFake mDockManager = new DockManagerFake(); private final FakeSystemClock mFakeSystemClock = new FakeSystemClock(); private final FakeExecutor mFakeExecutor = new FakeExecutor(mFakeSystemClock); @@ -90,7 +93,7 @@ public class FalsingCollectorImplTest extends SysuiTestCase { mKeyguardUpdateMonitor, mHistoryTracker, mProximitySensor, mStatusBarStateController, mKeyguardStateController, mShadeExpansionStateManager, mBatteryController, - mDockManager, mFakeExecutor, mFakeSystemClock); + mDockManager, mFakeExecutor, mFakeSystemClock, () -> mSelectedUserInteractor); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java index 15e5e1c7b8db..80b281e458d0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java +++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java @@ -37,6 +37,7 @@ import com.android.internal.colorextraction.types.Tonal; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import org.junit.Before; import org.junit.Test; @@ -63,6 +64,8 @@ public class SysuiColorExtractorTests extends SysuiTestCase { private WallpaperManager mWallpaperManager; @Mock private DumpManager mDumpManager; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; private ColorExtractor.GradientColors mColors; private SysuiColorExtractor mColorExtractor; @@ -83,7 +86,8 @@ public class SysuiColorExtractorTests extends SysuiTestCase { mock(ConfigurationController.class), mWallpaperManager, mDumpManager, - true /* immediately */); + true /* immediately */, + () -> mSelectedUserInteractor); } @Test @@ -125,7 +129,8 @@ public class SysuiColorExtractorTests extends SysuiTestCase { configurationController, mWallpaperManager, mDumpManager, - true /* immediately */); + true /* immediately */, + () -> mSelectedUserInteractor); verify(configurationController).addCallback(eq(sysuiColorExtractor)); reset(tonal); diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java index 7e1edd2ac193..ba578a39b558 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStateTest.java @@ -51,6 +51,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.UdfpsController; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.wakelock.WakeLockFake; import com.android.systemui.utils.os.FakeHandler; @@ -85,6 +86,8 @@ public class DozeScreenStateTest extends SysuiTestCase { private DozeLog mDozeLog; @Mock private DozeScreenBrightness mDozeScreenBrightness; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; @Before public void setUp() throws Exception { @@ -100,7 +103,7 @@ public class DozeScreenStateTest extends SysuiTestCase { mWakeLock = new WakeLockFake(); mScreen = new DozeScreenState(mServiceFake, mHandlerFake, mDozeHost, mDozeParameters, mWakeLock, mAuthController, mUdfpsControllerProvider, mDozeLog, - mDozeScreenBrightness); + mDozeScreenBrightness, mSelectedUserInteractor); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java index a88a8e590e76..3cc04511d57b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java @@ -52,9 +52,9 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.biometrics.AuthController; import com.android.systemui.doze.DozeSensors.TriggerSensor; import com.android.systemui.plugins.SensorManagerPlugin; -import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.DevicePostureController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.settings.FakeSettings; @@ -102,7 +102,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Mock private DevicePostureController mDevicePostureController; @Mock - private UserTracker mUserTracker; + private SelectedUserInteractor mSelectedUserInteractor; @Mock private ProximitySensor mProximitySensor; @@ -122,7 +122,8 @@ public class DozeSensorsTest extends SysuiTestCase { public void setUp() { MockitoAnnotations.initMocks(this); mTestableLooper = TestableLooper.get(this); - when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); + when(mSelectedUserInteractor.getSelectedUserId()) + .thenReturn(ActivityManager.getCurrentUser()); when(mAmbientDisplayConfiguration.tapSensorTypeMapping()) .thenReturn(new String[]{"tapSensor"}); when(mAmbientDisplayConfiguration.getWakeLockScreenDebounce()).thenReturn(5000L); @@ -435,7 +436,7 @@ public class DozeSensorsTest extends SysuiTestCase { DozeSensors dozeSensors = new DozeSensors(mResources, mSensorManager, mDozeParameters, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mProximitySensor, mFakeSettings, mAuthController, - mDevicePostureController, mUserTracker); + mDevicePostureController, mSelectedUserInteractor); for (TriggerSensor sensor : dozeSensors.mTriggerSensors) { assertFalse(sensor.mIgnoresSetting); @@ -480,7 +481,7 @@ public class DozeSensorsTest extends SysuiTestCase { DozeSensors dozeSensors = new DozeSensors(mResources, mSensorManager, mDozeParameters, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mProximitySensor, mFakeSettings, mAuthController, - mDevicePostureController, mUserTracker); + mDevicePostureController, mSelectedUserInteractor); for (TriggerSensor sensor : dozeSensors.mTriggerSensors) { // THEN lift to wake's TriggerSensor enabledBySettings is false @@ -499,7 +500,7 @@ public class DozeSensorsTest extends SysuiTestCase { DozeSensors dozeSensors = new DozeSensors(mResources, mSensorManager, mDozeParameters, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mProximitySensor, mFakeSettings, mAuthController, - mDevicePostureController, mUserTracker); + mDevicePostureController, mSelectedUserInteractor); for (TriggerSensor sensor : dozeSensors.mTriggerSensors) { // THEN lift to wake's TriggerSensor enabledBySettings is true @@ -514,7 +515,7 @@ public class DozeSensorsTest extends SysuiTestCase { super(mResources, mSensorManager, mDozeParameters, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mProximitySensor, mFakeSettings, mAuthController, - mDevicePostureController, mUserTracker); + mDevicePostureController, mSelectedUserInteractor); for (TriggerSensor sensor : mTriggerSensors) { if (sensor instanceof PluginSensor && ((PluginSensor) sensor).mPluginSensor.getType() diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java index 494e230947b3..3a6b07539a43 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java @@ -53,6 +53,7 @@ import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.DevicePostureController; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeThreadFactory; import com.android.systemui.util.sensors.AsyncSensorManager; @@ -101,6 +102,8 @@ public class DozeTriggersTest extends SysuiTestCase { @Mock private UserTracker mUserTracker; @Mock + private SelectedUserInteractor mSelectedUserInteractor; + @Mock private SessionTracker mSessionTracker; private DozeTriggers mTriggers; @@ -134,7 +137,7 @@ public class DozeTriggersTest extends SysuiTestCase { asyncSensorManager, wakeLock, mDockManager, mProximitySensor, mProximityCheck, mDozeLog, mBroadcastDispatcher, new FakeSettings(), mAuthController, mUiEventLogger, mSessionTracker, mKeyguardStateController, - mDevicePostureController, mUserTracker); + mDevicePostureController, mUserTracker, mSelectedUserInteractor); mTriggers.setDozeMachine(mMachine); waitForSensorManager(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java index 2d3f69d95204..00009f778ac7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java @@ -76,6 +76,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.window.StatusBarWindowController; import com.android.systemui.telephony.TelephonyListenerManager; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.RingerModeLiveData; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.settings.FakeGlobalSettings; @@ -134,6 +135,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { @Mock private ShadeController mShadeController; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private DialogLaunchAnimator mDialogLaunchAnimator; + @Mock private SelectedUserInteractor mSelectedUserInteractor; @Mock private OnBackInvokedDispatcher mOnBackInvokedDispatcher; @Captor private ArgumentCaptor<OnBackInvokedCallback> mOnBackInvokedCallback; @@ -186,12 +188,14 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { mPackageManager, mShadeController, mKeyguardUpdateMonitor, - mDialogLaunchAnimator); + mDialogLaunchAnimator, + mSelectedUserInteractor); mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting(); ColorExtractor.GradientColors backdropColors = new ColorExtractor.GradientColors(); backdropColors.setMainColor(Color.BLACK); when(mColorExtractor.getNeutralColors()).thenReturn(backdropColors); + when(mSelectedUserInteractor.getSelectedUserId()).thenReturn(0); } @Test @@ -568,7 +572,8 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { @Test public void testOnLockScreen_disableSmartLock() { mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite); - int user = KeyguardUpdateMonitor.getCurrentUser(); + int expectedUser = 100; + doReturn(expectedUser).when(mSelectedUserInteractor).getSelectedUserId(); doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems(); doReturn(true).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any()); doReturn(true).when(mGlobalActionsDialogLite).shouldShowAction(any()); @@ -586,7 +591,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { mGlobalActionsDialogLite.showOrHideDialog(true, true, null /* view */); // Then smart lock will be disabled - verify(mLockPatternUtils).requireCredentialEntry(eq(user)); + verify(mLockPatternUtils).requireCredentialEntry(eq(expectedUser)); // hide dialog again mGlobalActionsDialogLite.showOrHideDialog(true, true, null /* view */); diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java index a6468234b9b6..26c6a72aab25 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java @@ -117,6 +117,7 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.UserSwitcherController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxyFake; import com.android.systemui.util.concurrency.FakeExecutor; @@ -187,6 +188,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { private @Mock ShadeExpansionStateManager mShadeExpansionStateManager; private @Mock ShadeInteractor mShadeInteractor; private @Mock ShadeWindowLogger mShadeWindowLogger; + private @Mock SelectedUserInteractor mSelectedUserInteractor; private @Captor ArgumentCaptor<KeyguardStateController.Callback> mKeyguardStateControllerCallback; private @Captor ArgumentCaptor<KeyguardUpdateMonitorCallback> @@ -251,7 +253,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { mAuthController, mShadeExpansionStateManager, () -> mShadeInteractor, - mShadeWindowLogger); + mShadeWindowLogger, + () -> mSelectedUserInteractor); mFeatureFlags = new FakeFeatureFlags(); mFeatureFlags.set(Flags.KEYGUARD_WM_STATE_REFACTOR, false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt index 5bd747fc86e4..8e81185d6dcf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt @@ -24,6 +24,8 @@ import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.power.domain.interactor.PowerInteractorFactory +import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.mock import dagger.Lazy import junit.framework.Assert.assertEquals @@ -42,6 +44,8 @@ import org.junit.runner.RunWith class FromPrimaryBouncerTransitionInteractorTest : KeyguardTransitionInteractorTestCase() { private lateinit var underTest: FromPrimaryBouncerTransitionInteractor + private val mSelectedUserInteractor = SelectedUserInteractor(FakeUserRepository()) + // Override the fromPrimaryBouncerTransitionInteractor provider from the superclass so our // underTest interactor is provided to any classes that need it. override var fromPrimaryBouncerTransitionInteractorLazy: @@ -63,6 +67,7 @@ class FromPrimaryBouncerTransitionInteractorTest : KeyguardTransitionInteractorT flags = FakeFeatureFlags(), keyguardSecurityModel = mock(), powerInteractor = PowerInteractorFactory.create().powerInteractor, + selectedUserInteractor = mSelectedUserInteractor ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt index 6ad2d731f375..e45f56a44b67 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt @@ -62,6 +62,7 @@ import com.android.systemui.power.shared.model.WakeSleepReason import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.user.data.model.SelectionStatus import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat @@ -99,6 +100,7 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor @Mock private lateinit var faceWakeUpTriggersConfig: FaceWakeUpTriggersConfig + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Before fun setup() { @@ -145,6 +147,7 @@ class KeyguardFaceAuthInteractorTest : SysuiTestCase() { keyguardUpdateMonitor, FakeTrustRepository(), testScope.backgroundScope, + mSelectedUserInteractor, ), AlternateBouncerInteractor( mock(StatusBarStateController::class.java), diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt index 5d5ece0f8dcb..f3930a37c486 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt @@ -42,6 +42,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.se import com.android.systemui.power.domain.interactor.PowerInteractorFactory import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.shade.domain.model.ShadeModel +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor @@ -86,6 +87,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // Used to verify transition requests for test output @Mock private lateinit var keyguardSecurityModel: KeyguardSecurityModel + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor private lateinit var fromDreamingTransitionInteractor: FromDreamingTransitionInteractor @@ -158,6 +160,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { flags = featureFlags, keyguardSecurityModel = keyguardSecurityModel, powerInteractor = powerInteractor, + selectedUserInteractor = mSelectedUserInteractor, ) .apply { start() } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt index 02c98cd9a787..f9362a773fc5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/OccludingAppDeviceEntryInteractorTest.kt @@ -46,6 +46,7 @@ import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.ActivityStarter.OnDismissAction import com.android.systemui.power.data.repository.FakePowerRepository import com.android.systemui.power.domain.interactor.PowerInteractor +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever @@ -90,6 +91,7 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() { @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor @Mock private lateinit var mockedContext: Context @Mock private lateinit var activityStarter: ActivityStarter + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Before fun setup() { @@ -145,6 +147,7 @@ class OccludingAppDeviceEntryInteractorTest : SysuiTestCase() { keyguardUpdateMonitor, trustRepository, testScope.backgroundScope, + mSelectedUserInteractor ), AlternateBouncerInteractor( statusBarStateController = mock(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt index 9b1f8303f1ec..0e6e4fa659da 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/footer/ui/viewmodel/FooterActionsViewModelTest.kt @@ -36,7 +36,6 @@ import com.android.systemui.qs.footer.FooterActionsTestUtils import com.android.systemui.qs.footer.domain.model.SecurityButtonConfig import com.android.systemui.res.R import com.android.systemui.security.data.model.SecurityModel -import com.android.systemui.settings.FakeUserTracker import com.android.systemui.statusbar.policy.FakeSecurityController import com.android.systemui.statusbar.policy.FakeUserInfoController import com.android.systemui.statusbar.policy.FakeUserInfoController.FakeInfo @@ -130,7 +129,6 @@ class FooterActionsViewModelTest : SysuiTestCase() { val userInfoController = FakeUserInfoController(FakeInfo(picture = picture)) val settings = FakeGlobalSettings() val userId = 42 - val userTracker = FakeUserTracker(userId) val userSwitcherControllerWrapper = MockUserSwitcherControllerWrapper(currentUserName = "foo") @@ -148,7 +146,6 @@ class FooterActionsViewModelTest : SysuiTestCase() { utils.footerActionsInteractor( userSwitcherRepository = utils.userSwitcherRepository( - userTracker = userTracker, settings = settings, userManager = userManager, userInfoController = userInfoController, diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java index 05da80032059..be82bc314277 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java @@ -90,6 +90,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.google.common.util.concurrent.MoreExecutors; @@ -131,6 +132,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { @Mock private AuthController mAuthController; @Mock private ShadeExpansionStateManager mShadeExpansionStateManager; @Mock private ShadeWindowLogger mShadeWindowLogger; + @Mock private SelectedUserInteractor mSelectedUserInteractor; @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters; @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener; private final Executor mBackgroundExecutor = MoreExecutors.directExecutor(); @@ -216,6 +218,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { keyguardInteractor, featureFlags, mKeyguardSecurityModel, + mSelectedUserInteractor, powerInteractor); mShadeInteractor = @@ -255,7 +258,8 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { mAuthController, mShadeExpansionStateManager, () -> mShadeInteractor, - mShadeWindowLogger) { + mShadeWindowLogger, + () -> mSelectedUserInteractor) { @Override protected boolean isDebuggable() { return false; diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt index 677d9db0b97c..4f3216da7370 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt @@ -81,6 +81,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.unfold.UnfoldTransitionProgressProvider import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat @@ -142,6 +143,7 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() { Optional<UnfoldTransitionProgressProvider> @Mock lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor @Mock lateinit var dragDownHelper: DragDownHelper + @Mock lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock lateinit var primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel @Mock lateinit var sysUIKeyEventHandler: SysUIKeyEventHandler @@ -200,8 +202,6 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() { centralSurfaces, dozeServiceHost, dozeScrimController, - backActionInteractor, - powerInteractor, notificationShadeWindowController, unfoldTransitionProgressProvider, keyguardUnlockAnimationController, @@ -243,6 +243,7 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() { mock(KeyguardUpdateMonitor::class.java), FakeTrustRepository(), testScope.backgroundScope, + mSelectedUserInteractor, ), facePropertyRepository = FakeFacePropertyRepository(), deviceEntryFingerprintAuthRepository = @@ -254,6 +255,7 @@ class NotificationShadeWindowViewControllerTest : SysuiTestCase() { sysUIKeyEventHandler, primaryBouncerInteractor, alternateBouncerInteractor, + mSelectedUserInteractor, ) underTest.setupExpandedStatusBar() underTest.setDragDownHelper(dragDownHelper) diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt index a4a2ca0a6a21..4d3eab45d001 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.kt @@ -79,6 +79,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.window.StatusBarWindowStateController import com.android.systemui.unfold.UnfoldTransitionProgressProvider import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever @@ -144,6 +145,7 @@ class NotificationShadeWindowViewTest : SysuiTestCase() { @Mock private lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor @Mock lateinit var primaryBouncerInteractor: PrimaryBouncerInteractor @Mock lateinit var alternateBouncerInteractor: AlternateBouncerInteractor + @Mock private lateinit var mSelectedUserInteractor: SelectedUserInteractor @Mock private lateinit var primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel @@ -202,8 +204,6 @@ class NotificationShadeWindowViewTest : SysuiTestCase() { centralSurfaces, dozeServiceHost, dozeScrimController, - backActionInteractor, - powerInteractor, notificationShadeWindowController, unfoldTransitionProgressProvider, keyguardUnlockAnimationController, @@ -245,6 +245,7 @@ class NotificationShadeWindowViewTest : SysuiTestCase() { Mockito.mock(KeyguardUpdateMonitor::class.java), FakeTrustRepository(), testScope.backgroundScope, + mSelectedUserInteractor, ), facePropertyRepository = FakeFacePropertyRepository(), deviceEntryFingerprintAuthRepository = @@ -256,6 +257,7 @@ class NotificationShadeWindowViewTest : SysuiTestCase() { Mockito.mock(SysUIKeyEventHandler::class.java), primaryBouncerInteractor, alternateBouncerInteractor, + mSelectedUserInteractor, ) controller.setupExpandedStatusBar() diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java index dd81807faf75..0fcfaf960737 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java @@ -95,6 +95,7 @@ import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.android.systemui.util.kotlin.JavaAdapter; @@ -164,6 +165,7 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { @Mock protected UiEventLogger mUiEventLogger; @Mock protected CastController mCastController; @Mock protected UserSwitcherInteractor mUserSwitcherInteractor; + @Mock protected SelectedUserInteractor mSelectedUserInteractor; protected FakeDisableFlagsRepository mDisableFlagsRepository = new FakeDisableFlagsRepository(); protected FakeKeyguardRepository mKeyguardRepository = new FakeKeyguardRepository(); @@ -250,6 +252,7 @@ public class QuickSettingsControllerBaseTest extends SysuiTestCase { keyguardInteractor, featureFlags, mock(KeyguardSecurityModel.class), + mSelectedUserInteractor, powerInteractor); ResourcesSplitShadeStateController splitShadeStateController = diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt index 27be4c802aec..df547ae5883e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt @@ -33,6 +33,7 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.OnBefo import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock @@ -53,6 +54,7 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { val keyguardUpdateMonitor: KeyguardUpdateMonitor = mock() val statusBarStateController: StatusBarStateController = mock() val keyguardStateController: KeyguardStateController = mock() + val mSelectedUserInteractor: SelectedUserInteractor = mock() val coordinator: SensitiveContentCoordinator = DaggerTestSensitiveContentCoordinatorComponent @@ -62,7 +64,8 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { lockscreenUserManager, keyguardUpdateMonitor, statusBarStateController, - keyguardStateController) + keyguardStateController, + mSelectedUserInteractor) .coordinator @Test @@ -263,7 +266,8 @@ interface TestSensitiveContentCoordinatorComponent { @BindsInstance lockscreenUserManager: NotificationLockscreenUserManager, @BindsInstance keyguardUpdateMonitor: KeyguardUpdateMonitor, @BindsInstance statusBarStateController: StatusBarStateController, - @BindsInstance keyguardStateController: KeyguardStateController + @BindsInstance keyguardStateController: KeyguardStateController, + @BindsInstance selectedUserInteractor: SelectedUserInteractor, ): TestSensitiveContentCoordinatorComponent } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java index 8344cd143c5d..eacc087a9779 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java @@ -52,7 +52,6 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryHapticsInte import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FakeFeatureFlags; import com.android.systemui.keyguard.KeyguardViewMediator; -import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; @@ -60,6 +59,7 @@ import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; @@ -109,8 +109,6 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { @Mock private WakefulnessLifecycle mWakefulnessLifecycle; @Mock - private ScreenLifecycle mScreenLifecycle; - @Mock private StatusBarStateController mStatusBarStateController; @Mock private SessionTracker mSessionTracker; @@ -126,6 +124,8 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { private ViewRootImpl mViewRootImpl; @Mock private DeviceEntryHapticsInteractor mDeviceEntryHapticsInteractor; + @Mock + private SelectedUserInteractor mSelectedUserInteractor; private final FakeSystemClock mSystemClock = new FakeSystemClock(); private FakeFeatureFlags mFeatureFlags; private BiometricUnlockController mBiometricUnlockController; @@ -163,7 +163,8 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase { mSessionTracker, mLatencyTracker, mScreenOffAnimationController, mVibratorHelper, mSystemClock, mFeatureFlags, - mDeviceEntryHapticsInteractor + mDeviceEntryHapticsInteractor, + () -> mSelectedUserInteractor ); biometricUnlockController.setKeyguardViewController(mStatusBarKeyguardViewManager); biometricUnlockController.addListener(mBiometricUnlockEventsListener); 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 45e9224aa253..46b3996c4337 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 @@ -93,6 +93,7 @@ import com.android.systemui.statusbar.StatusBarState; 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.google.common.truth.Truth; @@ -147,6 +148,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { @Mock private WindowInsetsController mWindowInsetsController; @Mock private TaskbarDelegate mTaskbarDelegate; @Mock private StatusBarKeyguardViewManager.KeyguardViewManagerCallback mCallback; + @Mock private SelectedUserInteractor mSelectedUserInteractor; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback @@ -212,7 +214,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mock(KeyguardTransitionInteractor.class), StandardTestDispatcher(null, null), () -> mock(WindowManagerLockscreenVisibilityInteractor.class), - () -> mock(KeyguardDismissActionInteractor.class)) { + () -> mock(KeyguardDismissActionInteractor.class), + mSelectedUserInteractor) { @Override public ViewRootImpl getViewRootImpl() { return mViewRootImpl; @@ -715,7 +718,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mock(KeyguardTransitionInteractor.class), StandardTestDispatcher(null, null), () -> mock(WindowManagerLockscreenVisibilityInteractor.class), - () -> mock(KeyguardDismissActionInteractor.class)) { + () -> mock(KeyguardDismissActionInteractor.class), + mSelectedUserInteractor) { @Override public ViewRootImpl getViewRootImpl() { return mViewRootImpl; diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java index cae892fc2213..a1c76c4159c6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java @@ -38,6 +38,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import dagger.Lazy; @@ -67,6 +68,8 @@ public class KeyguardStateControllerTest extends SysuiTestCase { @Mock private Lazy<KeyguardUnlockAnimationController> mKeyguardUnlockAnimationControllerLazy; @Mock + private Lazy<SelectedUserInteractor> mUserInteractorLazy; + @Mock private KeyguardUpdateMonitorLogger mLogger; @Mock private FeatureFlags mFeatureFlags; @@ -84,7 +87,8 @@ public class KeyguardStateControllerTest extends SysuiTestCase { mKeyguardUnlockAnimationControllerLazy, mLogger, mDumpManager, - mFeatureFlags); + mFeatureFlags, + mUserInteractorLazy); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index c8d1334b2be8..a42fa4129a5f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -156,6 +156,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.data.repository.FakeDeviceProvisioningRepository; +import com.android.systemui.user.domain.interactor.SelectedUserInteractor; import com.android.systemui.user.domain.interactor.UserSwitcherInteractor; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.WindowManagerShellWrapper; @@ -324,6 +325,8 @@ public class BubblesTest extends SysuiTestCase { @Mock private ShadeWindowLogger mShadeWindowLogger; @Mock + private SelectedUserInteractor mSelectedUserInteractor; + @Mock private NotifPipelineFlags mNotifPipelineFlags; @Mock private Icon mAppBubbleIcon; @@ -433,6 +436,7 @@ public class BubblesTest extends SysuiTestCase { keyguardInteractor, featureFlags, mock(KeyguardSecurityModel.class), + mSelectedUserInteractor, powerInteractor); ResourcesSplitShadeStateController splitShadeStateController = @@ -476,7 +480,8 @@ public class BubblesTest extends SysuiTestCase { mAuthController, mShadeExpansionStateManager, () -> mShadeInteractor, - mShadeWindowLogger + mShadeWindowLogger, + () -> mSelectedUserInteractor ); mNotificationShadeWindowController.fetchWindowRootView(); mNotificationShadeWindowController.attach(); diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt index 7cac01925b12..233c9988f1d8 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissInteractorFactory.kt @@ -78,6 +78,7 @@ object KeyguardDismissInteractorFactory { keyguardUpdateMonitor, trustRepository, testScope.backgroundScope, + mock(SelectedUserInteractor::class.java), ) val alternateBouncerInteractor = AlternateBouncerInteractor( diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt index 7a99bd0d54cf..cddb007222d5 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/footer/FooterActionsTestUtils.kt @@ -41,14 +41,14 @@ import com.android.systemui.qs.footer.domain.interactor.FooterActionsInteractorI import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.security.data.repository.SecurityRepository import com.android.systemui.security.data.repository.SecurityRepositoryImpl -import com.android.systemui.settings.FakeUserTracker -import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.statusbar.policy.FakeSecurityController import com.android.systemui.statusbar.policy.FakeUserInfoController import com.android.systemui.statusbar.policy.SecurityController import com.android.systemui.statusbar.policy.UserInfoController import com.android.systemui.statusbar.policy.UserSwitcherController +import com.android.systemui.user.data.repository.FakeUserRepository +import com.android.systemui.user.data.repository.UserRepository import com.android.systemui.user.data.repository.UserSwitcherRepository import com.android.systemui.user.data.repository.UserSwitcherRepositoryImpl import com.android.systemui.user.domain.interactor.UserSwitcherInteractor @@ -149,7 +149,7 @@ class FooterActionsTestUtils( bgHandler: Handler = Handler(testableLooper.looper), bgDispatcher: CoroutineDispatcher = StandardTestDispatcher(scheduler), userManager: UserManager = mock(), - userTracker: UserTracker = FakeUserTracker(), + userRepository: UserRepository = FakeUserRepository(), userSwitcherController: UserSwitcherController = mock(), userInfoController: UserInfoController = FakeUserInfoController(), settings: GlobalSettings = FakeGlobalSettings(), @@ -159,10 +159,10 @@ class FooterActionsTestUtils( bgHandler, bgDispatcher, userManager, - userTracker, userSwitcherController, userInfoController, settings, + userRepository, ) } } |