diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index ffcf42f74a558..5c4126eeb93ab 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java @@ -727,6 +727,11 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mViewMode.reloadColors(); } + /** Handles density or font scale changes. */ + void onDensityOrFontScaleChanged() { + mViewMode.onDensityOrFontScaleChanged(); + } + /** * Enscapsulates the differences between bouncer modes for the container. */ @@ -752,6 +757,9 @@ public class KeyguardSecurityContainer extends ConstraintLayout { /** Refresh colors */ default void reloadColors() {}; + /** Handles density or font scale changes. */ + default void onDensityOrFontScaleChanged() {} + /** On a successful auth, optionally handle how the view disappears */ default void startDisappearAnimation(SecurityMode securityMode) {}; @@ -899,14 +907,9 @@ public class KeyguardSecurityContainer extends ConstraintLayout { mFalsingA11yDelegate = falsingA11yDelegate; if (mUserSwitcherViewGroup == null) { - LayoutInflater.from(v.getContext()).inflate( - R.layout.keyguard_bouncer_user_switcher, - mView, - true); - mUserSwitcherViewGroup = mView.findViewById(R.id.keyguard_bouncer_user_switcher); + inflateUserSwitcher(); } updateSecurityViewLocation(); - mUserSwitcher = mView.findViewById(R.id.user_switcher_header); setupUserSwitcher(); mUserSwitcherController.addUserSwitchCallback(mUserSwitchCallback); } @@ -936,6 +939,12 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } } + @Override + public void onDensityOrFontScaleChanged() { + mView.removeView(mUserSwitcherViewGroup); + inflateUserSwitcher(); + } + @Override public void onDestroy() { mUserSwitcherController.removeUserSwitchCallback(mUserSwitchCallback); @@ -1145,6 +1154,15 @@ public class KeyguardSecurityContainer extends ConstraintLayout { } } + private void inflateUserSwitcher() { + LayoutInflater.from(mView.getContext()).inflate( + R.layout.keyguard_bouncer_user_switcher, + mView, + true); + mUserSwitcherViewGroup = mView.findViewById(R.id.keyguard_bouncer_user_switcher); + mUserSwitcher = mView.findViewById(R.id.user_switcher_header); + } + interface UserSwitcherCallback { void showUnlockToContinueMessage(); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index 7a49926f8ef18..01be33e1e1565 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -251,6 +251,11 @@ public class KeyguardSecurityContainerController extends ViewController getSecurityView(SecurityMode securityMode, KeyguardSecurityCallback keyguardSecurityCallback) { diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java index aa4469f121618..4d58b09f10767 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java @@ -548,6 +548,22 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase { verify(mKeyguardPasswordViewControllerMock, never()).showMessage(null, null); } + @Test + public void onDensityorFontScaleChanged() { + ArgumentCaptor + configurationListenerArgumentCaptor = ArgumentCaptor.forClass( + ConfigurationController.ConfigurationListener.class); + mKeyguardSecurityContainerController.onViewAttached(); + verify(mConfigurationController).addCallback(configurationListenerArgumentCaptor.capture()); + configurationListenerArgumentCaptor.getValue().onDensityOrFontScaleChanged(); + + verify(mView).onDensityOrFontScaleChanged(); + verify(mKeyguardSecurityViewFlipperController).onDensityOrFontScaleChanged(); + verify(mKeyguardSecurityViewFlipperController).getSecurityView(any(SecurityMode.class), + any(KeyguardSecurityCallback.class)); + } + + private KeyguardSecurityContainer.SwipeListener getRegisteredSwipeListener() { mKeyguardSecurityContainerController.onViewAttached(); verify(mView).setSwipeListener(mSwipeListenerArgumentCaptor.capture()); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java index 1d2b09ce0ce27..36ed669e299ce 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -310,6 +310,17 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase { assertThat(anchor.isClickable()).isTrue(); } + @Test + public void testOnDensityOrFontScaleChanged() { + setupUserSwitcher(); + View oldUserSwitcher = mKeyguardSecurityContainer.findViewById( + R.id.keyguard_bouncer_user_switcher); + mKeyguardSecurityContainer.onDensityOrFontScaleChanged(); + View newUserSwitcher = mKeyguardSecurityContainer.findViewById( + R.id.keyguard_bouncer_user_switcher); + assertThat(oldUserSwitcher).isNotEqualTo(newUserSwitcher); + } + @Test public void testTouchesAreRecognizedAsBeingOnTheOtherSideOfSecurity() { setupUserSwitcher(); diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java index 9296d3d5ec820..fd02ac97cec27 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java @@ -106,4 +106,10 @@ public class KeyguardSecurityViewFlipperControllerTest extends SysuiTestCase { } } } + + @Test + public void onDensityOrFontScaleChanged() { + mKeyguardSecurityViewFlipperController.onDensityOrFontScaleChanged(); + verify(mView).removeAllViews(); + } }