Loading packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +6 −2 Original line number Diff line number Diff line Loading @@ -62,7 +62,9 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.user.data.source.UserRecord; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.settings.GlobalSettings; import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Rule; Loading Loading @@ -96,6 +98,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { private FalsingA11yDelegate mFalsingA11yDelegate; private KeyguardSecurityContainer mKeyguardSecurityContainer; private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setup() { Loading @@ -106,6 +109,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { mSecurityViewFlipper = new KeyguardSecurityViewFlipper(getContext()); mSecurityViewFlipper.setId(View.generateViewId()); mKeyguardSecurityContainer = new KeyguardSecurityContainer(getContext()); mKeyguardSecurityContainer.setBackgroundExecutor(mExecutor); mKeyguardSecurityContainer.setRight(VIEW_WIDTH); mKeyguardSecurityContainer.setLeft(0); mKeyguardSecurityContainer.setTop(0); Loading Loading @@ -342,7 +346,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { @Test public void testTwoOrMoreUsersDoesAllowDropDown() { // GIVEN one user has been setup // GIVEN two users have been setup ArrayList<UserRecord> records = buildUserRecords(2); when(mUserSwitcherController.getCurrentUserRecord()).thenReturn(records.get(0)); when(mUserSwitcherController.getUsers()).thenReturn(records); Loading @@ -350,7 +354,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { // WHEN UserSwitcherViewMode is initialized setupUserSwitcher(); // THEN the UserSwitcher anchor should not be clickable // THEN the UserSwitcher anchor should be clickable ViewGroup anchor = mKeyguardSecurityContainer.findViewById(R.id.user_switcher_anchor); assertThat(anchor.isClickable()).isTrue(); } Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +36 −16 Original line number Diff line number Diff line Loading @@ -109,6 +109,8 @@ import com.android.systemui.util.settings.GlobalSettings; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; import java.util.function.Consumer; /** Determines how the bouncer is displayed to the user. */ public class KeyguardSecurityContainer extends ConstraintLayout { Loading Loading @@ -170,6 +172,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private ViewMode mViewMode = new DefaultViewMode(); private boolean mIsInteractable; protected ViewMediatorCallback mViewMediatorCallback; private Executor mBgExecutor; /* * Using MODE_UNINITIALIZED to mean the view mode is set to DefaultViewMode, but init() has not * yet been called on it. This will happen when the ViewController is initialized. Loading Loading @@ -352,6 +355,10 @@ public class KeyguardSecurityContainer extends ConstraintLayout { updateBiometricRetry(securityMode, faceAuthEnabled); } void setBackgroundExecutor(Executor bgExecutor) { mBgExecutor = bgExecutor; } void initMode(@Mode int mode, GlobalSettings globalSettings, FalsingManager falsingManager, UserSwitcherController userSwitcherController, UserSwitcherViewMode.UserSwitcherCallback userSwitcherCallback, Loading @@ -367,7 +374,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mViewMode = new OneHandedViewMode(); break; case MODE_USER_SWITCHER: mViewMode = new UserSwitcherViewMode(userSwitcherCallback); mViewMode = new UserSwitcherViewMode(userSwitcherCallback, mBgExecutor); break; default: mViewMode = new DefaultViewMode(); Loading Loading @@ -991,6 +998,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private FalsingManager mFalsingManager; private UserSwitcherController mUserSwitcherController; private KeyguardUserSwitcherPopupMenu mPopup; private Executor mBgExecutor; private Resources mResources; private UserSwitcherController.UserSwitchCallback mUserSwitchCallback = this::setupUserSwitcher; Loading @@ -998,8 +1006,9 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private UserSwitcherCallback mUserSwitcherCallback; private FalsingA11yDelegate mFalsingA11yDelegate; UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback) { UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback, Executor bgExecutor) { mUserSwitcherCallback = userSwitcherCallback; mBgExecutor = bgExecutor; } @Override Loading Loading @@ -1068,18 +1077,22 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mView.removeView(mUserSwitcher); } private Drawable findLargeUserIcon(int userId) { private void findLargeUserIcon(int userId, Consumer<Drawable> consumer) { mBgExecutor.execute(() -> { Drawable icon; Bitmap userIcon = UserManager.get(mView.getContext()).getUserIcon(userId); if (userIcon != null) { int iconSize = mResources.getDimensionPixelSize(R.dimen.bouncer_user_switcher_icon_size); return CircleFramedDrawable.getInstance( int iconSize = mResources.getDimensionPixelSize( R.dimen.bouncer_user_switcher_icon_size); icon = CircleFramedDrawable.getInstance( mView.getContext(), Icon.scaleDownIfNecessary(userIcon, iconSize, iconSize) ); } else { icon = UserIcons.getDefaultUserIcon(mResources, userId, false); } return UserIcons.getDefaultUserIcon(mResources, userId, false); consumer.accept(icon); }); } @Override Loading Loading @@ -1136,8 +1149,15 @@ public class KeyguardSecurityContainer extends ConstraintLayout { return; } final String currentUserName = mUserSwitcherController.getCurrentUserName(); Drawable userIcon = findLargeUserIcon(currentUser.info.id); ((ImageView) mView.findViewById(R.id.user_icon)).setImageDrawable(userIcon); findLargeUserIcon(currentUser.info.id, (Drawable userIcon) -> { mView.post(() -> { ImageView view = (ImageView) mView.findViewById(R.id.user_icon); if (view != null) { view.setImageDrawable(userIcon); } }); }); mUserSwitcher.setText(currentUserName); KeyguardUserSwitcherAnchor anchor = mView.findViewById(R.id.user_switcher_anchor); Loading packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +6 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor; import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor; import com.android.systemui.flags.FeatureFlags; Loading @@ -102,6 +103,7 @@ import kotlinx.coroutines.Job; import java.io.File; import java.util.Arrays; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Provider; Loading Loading @@ -426,6 +428,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final Provider<JavaAdapter> mJavaAdapter; private final DeviceProvisionedController mDeviceProvisionedController; private final Lazy<PrimaryBouncerInteractor> mPrimaryBouncerInteractor; private final Executor mBgExecutor; @Nullable private Job mSceneTransitionCollectionJob; Loading Loading @@ -459,6 +462,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard DevicePolicyManager devicePolicyManager, KeyguardDismissTransitionInteractor keyguardDismissTransitionInteractor, Lazy<PrimaryBouncerInteractor> primaryBouncerInteractor, @Background Executor bgExecutor, Provider<DeviceEntryInteractor> deviceEntryInteractor ) { super(view); Loading Loading @@ -493,11 +497,13 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mDeviceProvisionedController = deviceProvisionedController; mPrimaryBouncerInteractor = primaryBouncerInteractor; mDevicePolicyManager = devicePolicyManager; mBgExecutor = bgExecutor; } @Override public void onInit() { mSecurityViewFlipperController.init(); mView.setBackgroundExecutor(mBgExecutor); updateResources(); configureMode(); } Loading packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +28 −28 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.testKosmos import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.kotlin.JavaAdapter import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argThat Loading @@ -84,6 +85,7 @@ import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.settings.GlobalSettings import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth import junit.framework.Assert import kotlinx.coroutines.ExperimentalCoroutinesApi Loading Loading @@ -172,6 +174,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { @Mock private lateinit var primaryBouncerInteractor: PrimaryBouncerInteractor private lateinit var sceneTransitionStateFlow: MutableStateFlow<ObservableTransitionState> private lateinit var fakeSceneDataSource: FakeSceneDataSource private val executor = FakeExecutor(FakeSystemClock()) private lateinit var underTest: KeyguardSecurityContainerController Loading Loading @@ -210,13 +213,9 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { featureFlags = FakeFeatureFlags() featureFlags.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, false) mSetFlagsRule.enableFlags( AConfigFlags.FLAG_REVAMPED_BOUNCER_MESSAGES, ) mSetFlagsRule.enableFlags(AConfigFlags.FLAG_REVAMPED_BOUNCER_MESSAGES) if (!SceneContainerFlag.isEnabled) { mSetFlagsRule.disableFlags( AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR, ) mSetFlagsRule.disableFlags(AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR) } keyguardPasswordViewController = Loading @@ -239,7 +238,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { mSelectedUserInteractor, keyguardKeyboardInteractor, null, mUserActivityNotifier mUserActivityNotifier, ) kosmos = testKosmos() Loading Loading @@ -283,6 +282,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { devicePolicyManager, kosmos.keyguardDismissTransitionInteractor, { primaryBouncerInteractor }, executor, ) { deviceEntryInteractor } Loading @@ -298,7 +298,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading Loading @@ -334,7 +334,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) // Update rotation. Should trigger update Loading @@ -347,7 +347,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -359,7 +359,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { MotionEvent.ACTION_DOWN, /* x= */ 0f, /* y= */ 0f, /* metaState= */ 0 /* metaState= */ 0, ) ) } Loading @@ -386,7 +386,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -401,7 +401,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -416,7 +416,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -431,7 +431,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -446,7 +446,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -462,7 +462,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { .showMessage( /* message= */ context.getString(R.string.keyguard_unlock_to_continue), /* colorState= */ null, /* animated= */ true /* animated= */ true, ) } Loading Loading @@ -496,7 +496,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN the next security method of None will dismiss keyguard. Loading @@ -514,7 +514,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN no action has happened, which will not dismiss the security screens Loading @@ -539,7 +539,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN the next security method of None will dismiss keyguard. Loading @@ -564,7 +564,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN the next security method of None will dismiss keyguard. Loading @@ -589,7 +589,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN we will not show the password screen. Loading @@ -615,7 +615,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN we will not show the password screen. Loading Loading @@ -717,7 +717,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { // Now simulate a config change testableResources.addOverride( R.integer.keyguard_host_view_gravity, Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, ) underTest.updateResources() verify(view).layoutParams = any() Loading @@ -728,7 +728,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { testableResources.addOverride(R.integer.keyguard_host_view_gravity, Gravity.CENTER) testableResources.addOverride( R.integer.keyguard_host_view_one_handed_gravity, Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, ) // Start disabled. Loading Loading @@ -948,7 +948,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* expiringUserId = */ mainUserId, /* mainUserId = */ mainUserId, /* remainingBeforeWipe = */ 1, /* failedAttempts = */ 1 /* failedAttempts = */ 1, ) verify(view) Loading @@ -965,14 +965,14 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* expiringUserId = */ secondaryUserId, /* mainUserId = */ mainUserId, /* remainingBeforeWipe = */ 1, /* failedAttempts = */ 1 /* failedAttempts = */ 1, ) verify(view) .showAlmostAtWipeDialog( any(), any(), eq(KeyguardSecurityContainer.USER_TYPE_SECONDARY_USER) eq(KeyguardSecurityContainer.USER_TYPE_SECONDARY_USER), ) } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +6 −2 Original line number Diff line number Diff line Loading @@ -62,7 +62,9 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.res.R; import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.user.data.source.UserRecord; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.settings.GlobalSettings; import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Rule; Loading Loading @@ -96,6 +98,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { private FalsingA11yDelegate mFalsingA11yDelegate; private KeyguardSecurityContainer mKeyguardSecurityContainer; private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setup() { Loading @@ -106,6 +109,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { mSecurityViewFlipper = new KeyguardSecurityViewFlipper(getContext()); mSecurityViewFlipper.setId(View.generateViewId()); mKeyguardSecurityContainer = new KeyguardSecurityContainer(getContext()); mKeyguardSecurityContainer.setBackgroundExecutor(mExecutor); mKeyguardSecurityContainer.setRight(VIEW_WIDTH); mKeyguardSecurityContainer.setLeft(0); mKeyguardSecurityContainer.setTop(0); Loading Loading @@ -342,7 +346,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { @Test public void testTwoOrMoreUsersDoesAllowDropDown() { // GIVEN one user has been setup // GIVEN two users have been setup ArrayList<UserRecord> records = buildUserRecords(2); when(mUserSwitcherController.getCurrentUserRecord()).thenReturn(records.get(0)); when(mUserSwitcherController.getUsers()).thenReturn(records); Loading @@ -350,7 +354,7 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { // WHEN UserSwitcherViewMode is initialized setupUserSwitcher(); // THEN the UserSwitcher anchor should not be clickable // THEN the UserSwitcher anchor should be clickable ViewGroup anchor = mKeyguardSecurityContainer.findViewById(R.id.user_switcher_anchor); assertThat(anchor.isClickable()).isTrue(); } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +36 −16 Original line number Diff line number Diff line Loading @@ -109,6 +109,8 @@ import com.android.systemui.util.settings.GlobalSettings; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; import java.util.function.Consumer; /** Determines how the bouncer is displayed to the user. */ public class KeyguardSecurityContainer extends ConstraintLayout { Loading Loading @@ -170,6 +172,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private ViewMode mViewMode = new DefaultViewMode(); private boolean mIsInteractable; protected ViewMediatorCallback mViewMediatorCallback; private Executor mBgExecutor; /* * Using MODE_UNINITIALIZED to mean the view mode is set to DefaultViewMode, but init() has not * yet been called on it. This will happen when the ViewController is initialized. Loading Loading @@ -352,6 +355,10 @@ public class KeyguardSecurityContainer extends ConstraintLayout { updateBiometricRetry(securityMode, faceAuthEnabled); } void setBackgroundExecutor(Executor bgExecutor) { mBgExecutor = bgExecutor; } void initMode(@Mode int mode, GlobalSettings globalSettings, FalsingManager falsingManager, UserSwitcherController userSwitcherController, UserSwitcherViewMode.UserSwitcherCallback userSwitcherCallback, Loading @@ -367,7 +374,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mViewMode = new OneHandedViewMode(); break; case MODE_USER_SWITCHER: mViewMode = new UserSwitcherViewMode(userSwitcherCallback); mViewMode = new UserSwitcherViewMode(userSwitcherCallback, mBgExecutor); break; default: mViewMode = new DefaultViewMode(); Loading Loading @@ -991,6 +998,7 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private FalsingManager mFalsingManager; private UserSwitcherController mUserSwitcherController; private KeyguardUserSwitcherPopupMenu mPopup; private Executor mBgExecutor; private Resources mResources; private UserSwitcherController.UserSwitchCallback mUserSwitchCallback = this::setupUserSwitcher; Loading @@ -998,8 +1006,9 @@ public class KeyguardSecurityContainer extends ConstraintLayout { private UserSwitcherCallback mUserSwitcherCallback; private FalsingA11yDelegate mFalsingA11yDelegate; UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback) { UserSwitcherViewMode(UserSwitcherCallback userSwitcherCallback, Executor bgExecutor) { mUserSwitcherCallback = userSwitcherCallback; mBgExecutor = bgExecutor; } @Override Loading Loading @@ -1068,18 +1077,22 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mView.removeView(mUserSwitcher); } private Drawable findLargeUserIcon(int userId) { private void findLargeUserIcon(int userId, Consumer<Drawable> consumer) { mBgExecutor.execute(() -> { Drawable icon; Bitmap userIcon = UserManager.get(mView.getContext()).getUserIcon(userId); if (userIcon != null) { int iconSize = mResources.getDimensionPixelSize(R.dimen.bouncer_user_switcher_icon_size); return CircleFramedDrawable.getInstance( int iconSize = mResources.getDimensionPixelSize( R.dimen.bouncer_user_switcher_icon_size); icon = CircleFramedDrawable.getInstance( mView.getContext(), Icon.scaleDownIfNecessary(userIcon, iconSize, iconSize) ); } else { icon = UserIcons.getDefaultUserIcon(mResources, userId, false); } return UserIcons.getDefaultUserIcon(mResources, userId, false); consumer.accept(icon); }); } @Override Loading Loading @@ -1136,8 +1149,15 @@ public class KeyguardSecurityContainer extends ConstraintLayout { return; } final String currentUserName = mUserSwitcherController.getCurrentUserName(); Drawable userIcon = findLargeUserIcon(currentUser.info.id); ((ImageView) mView.findViewById(R.id.user_icon)).setImageDrawable(userIcon); findLargeUserIcon(currentUser.info.id, (Drawable userIcon) -> { mView.post(() -> { ImageView view = (ImageView) mView.findViewById(R.id.user_icon); if (view != null) { view.setImageDrawable(userIcon); } }); }); mUserSwitcher.setText(currentUserName); KeyguardUserSwitcherAnchor anchor = mView.findViewById(R.id.user_switcher_anchor); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +6 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor; import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor; import com.android.systemui.classifier.FalsingA11yDelegate; import com.android.systemui.classifier.FalsingCollector; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor; import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor; import com.android.systemui.flags.FeatureFlags; Loading @@ -102,6 +103,7 @@ import kotlinx.coroutines.Job; import java.io.File; import java.util.Arrays; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Provider; Loading Loading @@ -426,6 +428,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard private final Provider<JavaAdapter> mJavaAdapter; private final DeviceProvisionedController mDeviceProvisionedController; private final Lazy<PrimaryBouncerInteractor> mPrimaryBouncerInteractor; private final Executor mBgExecutor; @Nullable private Job mSceneTransitionCollectionJob; Loading Loading @@ -459,6 +462,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard DevicePolicyManager devicePolicyManager, KeyguardDismissTransitionInteractor keyguardDismissTransitionInteractor, Lazy<PrimaryBouncerInteractor> primaryBouncerInteractor, @Background Executor bgExecutor, Provider<DeviceEntryInteractor> deviceEntryInteractor ) { super(view); Loading Loading @@ -493,11 +497,13 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard mDeviceProvisionedController = deviceProvisionedController; mPrimaryBouncerInteractor = primaryBouncerInteractor; mDevicePolicyManager = devicePolicyManager; mBgExecutor = bgExecutor; } @Override public void onInit() { mSecurityViewFlipperController.init(); mView.setBackgroundExecutor(mBgExecutor); updateResources(); configureMode(); } Loading
packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt +28 −28 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.policy.UserSwitcherController import com.android.systemui.testKosmos import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.kotlin.JavaAdapter import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argThat Loading @@ -84,6 +85,7 @@ import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.settings.GlobalSettings import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth import junit.framework.Assert import kotlinx.coroutines.ExperimentalCoroutinesApi Loading Loading @@ -172,6 +174,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { @Mock private lateinit var primaryBouncerInteractor: PrimaryBouncerInteractor private lateinit var sceneTransitionStateFlow: MutableStateFlow<ObservableTransitionState> private lateinit var fakeSceneDataSource: FakeSceneDataSource private val executor = FakeExecutor(FakeSystemClock()) private lateinit var underTest: KeyguardSecurityContainerController Loading Loading @@ -210,13 +213,9 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { featureFlags = FakeFeatureFlags() featureFlags.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, false) mSetFlagsRule.enableFlags( AConfigFlags.FLAG_REVAMPED_BOUNCER_MESSAGES, ) mSetFlagsRule.enableFlags(AConfigFlags.FLAG_REVAMPED_BOUNCER_MESSAGES) if (!SceneContainerFlag.isEnabled) { mSetFlagsRule.disableFlags( AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR, ) mSetFlagsRule.disableFlags(AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR) } keyguardPasswordViewController = Loading @@ -239,7 +238,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { mSelectedUserInteractor, keyguardKeyboardInteractor, null, mUserActivityNotifier mUserActivityNotifier, ) kosmos = testKosmos() Loading Loading @@ -283,6 +282,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { devicePolicyManager, kosmos.keyguardDismissTransitionInteractor, { primaryBouncerInteractor }, executor, ) { deviceEntryInteractor } Loading @@ -298,7 +298,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading Loading @@ -334,7 +334,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) // Update rotation. Should trigger update Loading @@ -347,7 +347,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -359,7 +359,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { MotionEvent.ACTION_DOWN, /* x= */ 0f, /* y= */ 0f, /* metaState= */ 0 /* metaState= */ 0, ) ) } Loading @@ -386,7 +386,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -401,7 +401,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -416,7 +416,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -431,7 +431,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -446,7 +446,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { eq(falsingManager), eq(userSwitcherController), any(), eq(falsingA11yDelegate) eq(falsingA11yDelegate), ) } Loading @@ -462,7 +462,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { .showMessage( /* message= */ context.getString(R.string.keyguard_unlock_to_continue), /* colorState= */ null, /* animated= */ true /* animated= */ true, ) } Loading Loading @@ -496,7 +496,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN the next security method of None will dismiss keyguard. Loading @@ -514,7 +514,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN no action has happened, which will not dismiss the security screens Loading @@ -539,7 +539,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN the next security method of None will dismiss keyguard. Loading @@ -564,7 +564,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN the next security method of None will dismiss keyguard. Loading @@ -589,7 +589,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN we will not show the password screen. Loading @@ -615,7 +615,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* authenticated= */ true, TARGET_USER_ID, /* bypassSecondaryLockScreen= */ true, SecurityMode.SimPin SecurityMode.SimPin, ) // THEN we will not show the password screen. Loading Loading @@ -717,7 +717,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { // Now simulate a config change testableResources.addOverride( R.integer.keyguard_host_view_gravity, Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, ) underTest.updateResources() verify(view).layoutParams = any() Loading @@ -728,7 +728,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { testableResources.addOverride(R.integer.keyguard_host_view_gravity, Gravity.CENTER) testableResources.addOverride( R.integer.keyguard_host_view_one_handed_gravity, Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM, ) // Start disabled. Loading Loading @@ -948,7 +948,7 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* expiringUserId = */ mainUserId, /* mainUserId = */ mainUserId, /* remainingBeforeWipe = */ 1, /* failedAttempts = */ 1 /* failedAttempts = */ 1, ) verify(view) Loading @@ -965,14 +965,14 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() { /* expiringUserId = */ secondaryUserId, /* mainUserId = */ mainUserId, /* remainingBeforeWipe = */ 1, /* failedAttempts = */ 1 /* failedAttempts = */ 1, ) verify(view) .showAlmostAtWipeDialog( any(), any(), eq(KeyguardSecurityContainer.USER_TYPE_SECONDARY_USER) eq(KeyguardSecurityContainer.USER_TYPE_SECONDARY_USER), ) } Loading