From fb36c48bbd204b77ee4a4528148698f1b973f1a4 Mon Sep 17 00:00:00 2001 From: Aaron Liu Date: Tue, 8 Nov 2022 08:50:44 -0800 Subject: [PATCH] [Bouncer] Update bouncer view with display size. Updates the bouncer view when display size has changed and when font scale has changed. When this specific configuration changes, we invalidate the cache of the view flipper and tell each view mode that the configuration change has been made. In the UserSwitcher view mode, we reinflate the user switcher. Fixes: 257513443 Test: Change display size, turn screen off and on and observe security view and user switcher has changed size. (On Pin, Password, and pattern) Test: Change font size and bold font, turn screen off and on and observe security view and user switcher has changed size. (On Pin, Password, and pattern) Test: Added unit test. Change-Id: Iffbbe6f5b0f32f4b40dd70e9bd534b444a8d1ef6 --- .../keyguard/KeyguardSecurityContainer.java | 30 +++++++++++++++---- .../KeyguardSecurityContainerController.java | 13 ++++++++ ...KeyguardSecurityViewFlipperController.java | 7 +++++ ...yguardSecurityContainerControllerTest.java | 16 ++++++++++ .../KeyguardSecurityContainerTest.java | 11 +++++++ ...uardSecurityViewFlipperControllerTest.java | 6 ++++ 6 files changed, 77 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java index 2bb3a5f437f5a..5fff44a02bac0 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); @@ -1137,6 +1146,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 1bd14e558fa05..f9da0527530e1 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java @@ -307,6 +307,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(); + } }