Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +6 −10 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.phone; import static com.android.systemui.DejankUtils.whitelistIpcs; import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFromDirection; import static com.android.systemui.util.Utils.getStatusBarHeaderHeightKeyguard; Loading @@ -27,7 +26,6 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.UserManager; import android.util.AttributeSet; import android.util.Pair; import android.util.TypedValue; Loading @@ -47,7 +45,6 @@ import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.window.StatusBarWindowView; import java.io.FileDescriptor; import java.io.PrintWriter; Loading @@ -72,7 +69,6 @@ public class KeyguardStatusBarView extends RelativeLayout { private StatusIconContainer mStatusIconContainer; private boolean mKeyguardUserSwitcherEnabled; private final UserManager mUserManager; private boolean mIsPrivacyDotEnabled; private int mSystemIconsSwitcherHiddenExpandedMargin; Loading @@ -99,10 +95,10 @@ public class KeyguardStatusBarView extends RelativeLayout { */ private int mTopClipping; private final Rect mClipRect = new Rect(0, 0, 0, 0); private boolean mIsUserSwitcherEnabled; public KeyguardStatusBarView(Context context, AttributeSet attrs) { super(context, attrs); mUserManager = UserManager.get(getContext()); } @Override Loading Loading @@ -163,6 +159,10 @@ public class KeyguardStatusBarView extends RelativeLayout { updateKeyguardStatusBarHeight(); } public void setUserSwitcherEnabled(boolean enabled) { mIsUserSwitcherEnabled = enabled; } private void updateKeyguardStatusBarHeight() { MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); lp.height = getStatusBarHeaderHeightKeyguard(mContext); Loading Loading @@ -200,11 +200,7 @@ public class KeyguardStatusBarView extends RelativeLayout { // If we have no keyguard switcher, the screen width is under 600dp. In this case, // we only show the multi-user switch if it's enabled through UserManager as well as // by the user. // TODO(b/138661450) Move IPC calls to background boolean isMultiUserEnabled = whitelistIpcs(() -> mUserManager.isUserSwitcherEnabled( mContext.getResources().getBoolean( R.bool.qs_show_user_switcher_for_single_user))); if (isMultiUserEnabled) { if (mIsUserSwitcherEnabled) { mMultiUserAvatar.setVisibility(View.VISIBLE); } else { mMultiUserAvatar.setVisibility(View.GONE); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +27 −2 Original line number Diff line number Diff line Loading @@ -23,8 +23,10 @@ import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedul import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.res.Configuration; import android.content.res.Resources; import android.hardware.biometrics.BiometricSourceType; import android.os.UserManager; import android.util.MathUtils; import android.view.View; Loading Loading @@ -92,6 +94,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat private final BiometricUnlockController mBiometricUnlockController; private final SysuiStatusBarStateController mStatusBarStateController; private final StatusBarContentInsetsProvider mInsetsProvider; private final UserManager mUserManager; private final ConfigurationController.ConfigurationListener mConfigurationListener = new ConfigurationController.ConfigurationListener() { Loading @@ -105,6 +108,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.onOverlayChanged(); KeyguardStatusBarViewController.this.onThemeChanged(); } @Override public void onConfigChanged(Configuration newConfig) { updateUserSwitcher(); } }; private final SystemStatusAnimationCallback mAnimationCallback = Loading Loading @@ -158,6 +166,13 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat } } @Override public void onKeyguardVisibilityChanged(boolean showing) { if (showing) { updateUserSwitcher(); } } @Override public void onBiometricRunningStateChanged( boolean running, Loading Loading @@ -230,7 +245,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat KeyguardUpdateMonitor keyguardUpdateMonitor, BiometricUnlockController biometricUnlockController, SysuiStatusBarStateController statusBarStateController, StatusBarContentInsetsProvider statusBarContentInsetsProvider StatusBarContentInsetsProvider statusBarContentInsetsProvider, UserManager userManager ) { super(view); mCarrierTextController = carrierTextController; Loading @@ -248,6 +264,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mBiometricUnlockController = biometricUnlockController; mStatusBarStateController = statusBarStateController; mInsetsProvider = statusBarContentInsetsProvider; mUserManager = userManager; mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled(); mKeyguardStateController.addCallback( Loading Loading @@ -293,7 +310,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat } mView.setOnApplyWindowInsetsListener( (view, windowInsets) -> mView.updateWindowInsets(windowInsets, mInsetsProvider)); updateUserSwitcher(); onThemeChanged(); } Loading Loading @@ -436,6 +453,14 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat return alpha; } /** * Updates visibility of the user switcher button based on {@link android.os.UserManager} state. */ private void updateUserSwitcher() { mView.setUserSwitcherEnabled(mUserManager.isUserSwitcherEnabled(getResources().getBoolean( R.bool.qs_show_user_switcher_for_single_user))); } /** * Update {@link KeyguardStatusBarView}'s visibility based on whether keyguard is showing and * whether heads up is visible. Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java +41 −3 Original line number Diff line number Diff line Loading @@ -23,9 +23,13 @@ import static com.android.systemui.statusbar.StatusBarState.SHADE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.os.UserManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.LayoutInflater; Loading @@ -45,6 +49,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.policy.BatteryController; 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.statusbar.policy.UserInfoController; Loading @@ -52,6 +57,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; Loading Loading @@ -87,6 +93,12 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { private SysuiStatusBarStateController mStatusBarStateController; @Mock private StatusBarContentInsetsProvider mStatusBarContentInsetsProvider; @Mock private UserManager mUserManager; @Captor private ArgumentCaptor<ConfigurationListener> mConfigurationListenerCaptor; @Captor private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardCallbackCaptor; private TestNotificationPanelViewStateProvider mNotificationPanelViewStateProvider; private KeyguardStatusBarView mKeyguardStatusBarView; Loading @@ -101,8 +113,8 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { allowTestableLooperAsMainThread(); TestableLooper.get(this).runWithLooper(() -> { mKeyguardStatusBarView = (KeyguardStatusBarView) LayoutInflater.from(mContext) .inflate(R.layout.keyguard_status_bar, null); spy((KeyguardStatusBarView) LayoutInflater.from(mContext) .inflate(R.layout.keyguard_status_bar, null)); }); mController = new KeyguardStatusBarViewController( Loading @@ -121,7 +133,8 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { mKeyguardUpdateMonitor, mBiometricUnlockController, mStatusBarStateController, mStatusBarContentInsetsProvider mStatusBarContentInsetsProvider, mUserManager ); } Loading @@ -133,6 +146,31 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { verify(mAnimationScheduler).addCallback(any()); verify(mUserInfoController).addCallback(any()); verify(mStatusBarIconController).addIconGroup(any()); verify(mUserManager).isUserSwitcherEnabled(anyBoolean()); } @Test public void onConfigurationChanged_updatesUserSwitcherVisibility() { mController.onViewAttached(); verify(mConfigurationController).addCallback(mConfigurationListenerCaptor.capture()); clearInvocations(mUserManager); clearInvocations(mKeyguardStatusBarView); mConfigurationListenerCaptor.getValue().onConfigChanged(null); verify(mUserManager).isUserSwitcherEnabled(anyBoolean()); verify(mKeyguardStatusBarView).setUserSwitcherEnabled(anyBoolean()); } @Test public void onKeyguardVisibilityChanged_updatesUserSwitcherVisibility() { mController.onViewAttached(); verify(mKeyguardUpdateMonitor).registerCallback(mKeyguardCallbackCaptor.capture()); clearInvocations(mUserManager); clearInvocations(mKeyguardStatusBarView); mKeyguardCallbackCaptor.getValue().onKeyguardVisibilityChanged(true); verify(mUserManager).isUserSwitcherEnabled(anyBoolean()); verify(mKeyguardStatusBarView).setUserSwitcherEnabled(anyBoolean()); } @Test Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +6 −10 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.phone; import static com.android.systemui.DejankUtils.whitelistIpcs; import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFromDirection; import static com.android.systemui.util.Utils.getStatusBarHeaderHeightKeyguard; Loading @@ -27,7 +26,6 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.UserManager; import android.util.AttributeSet; import android.util.Pair; import android.util.TypedValue; Loading @@ -47,7 +45,6 @@ import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; import com.android.systemui.statusbar.window.StatusBarWindowView; import java.io.FileDescriptor; import java.io.PrintWriter; Loading @@ -72,7 +69,6 @@ public class KeyguardStatusBarView extends RelativeLayout { private StatusIconContainer mStatusIconContainer; private boolean mKeyguardUserSwitcherEnabled; private final UserManager mUserManager; private boolean mIsPrivacyDotEnabled; private int mSystemIconsSwitcherHiddenExpandedMargin; Loading @@ -99,10 +95,10 @@ public class KeyguardStatusBarView extends RelativeLayout { */ private int mTopClipping; private final Rect mClipRect = new Rect(0, 0, 0, 0); private boolean mIsUserSwitcherEnabled; public KeyguardStatusBarView(Context context, AttributeSet attrs) { super(context, attrs); mUserManager = UserManager.get(getContext()); } @Override Loading Loading @@ -163,6 +159,10 @@ public class KeyguardStatusBarView extends RelativeLayout { updateKeyguardStatusBarHeight(); } public void setUserSwitcherEnabled(boolean enabled) { mIsUserSwitcherEnabled = enabled; } private void updateKeyguardStatusBarHeight() { MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); lp.height = getStatusBarHeaderHeightKeyguard(mContext); Loading Loading @@ -200,11 +200,7 @@ public class KeyguardStatusBarView extends RelativeLayout { // If we have no keyguard switcher, the screen width is under 600dp. In this case, // we only show the multi-user switch if it's enabled through UserManager as well as // by the user. // TODO(b/138661450) Move IPC calls to background boolean isMultiUserEnabled = whitelistIpcs(() -> mUserManager.isUserSwitcherEnabled( mContext.getResources().getBoolean( R.bool.qs_show_user_switcher_for_single_user))); if (isMultiUserEnabled) { if (mIsUserSwitcherEnabled) { mMultiUserAvatar.setVisibility(View.VISIBLE); } else { mMultiUserAvatar.setVisibility(View.GONE); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +27 −2 Original line number Diff line number Diff line Loading @@ -23,8 +23,10 @@ import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedul import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.res.Configuration; import android.content.res.Resources; import android.hardware.biometrics.BiometricSourceType; import android.os.UserManager; import android.util.MathUtils; import android.view.View; Loading Loading @@ -92,6 +94,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat private final BiometricUnlockController mBiometricUnlockController; private final SysuiStatusBarStateController mStatusBarStateController; private final StatusBarContentInsetsProvider mInsetsProvider; private final UserManager mUserManager; private final ConfigurationController.ConfigurationListener mConfigurationListener = new ConfigurationController.ConfigurationListener() { Loading @@ -105,6 +108,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.onOverlayChanged(); KeyguardStatusBarViewController.this.onThemeChanged(); } @Override public void onConfigChanged(Configuration newConfig) { updateUserSwitcher(); } }; private final SystemStatusAnimationCallback mAnimationCallback = Loading Loading @@ -158,6 +166,13 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat } } @Override public void onKeyguardVisibilityChanged(boolean showing) { if (showing) { updateUserSwitcher(); } } @Override public void onBiometricRunningStateChanged( boolean running, Loading Loading @@ -230,7 +245,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat KeyguardUpdateMonitor keyguardUpdateMonitor, BiometricUnlockController biometricUnlockController, SysuiStatusBarStateController statusBarStateController, StatusBarContentInsetsProvider statusBarContentInsetsProvider StatusBarContentInsetsProvider statusBarContentInsetsProvider, UserManager userManager ) { super(view); mCarrierTextController = carrierTextController; Loading @@ -248,6 +264,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mBiometricUnlockController = biometricUnlockController; mStatusBarStateController = statusBarStateController; mInsetsProvider = statusBarContentInsetsProvider; mUserManager = userManager; mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled(); mKeyguardStateController.addCallback( Loading Loading @@ -293,7 +310,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat } mView.setOnApplyWindowInsetsListener( (view, windowInsets) -> mView.updateWindowInsets(windowInsets, mInsetsProvider)); updateUserSwitcher(); onThemeChanged(); } Loading Loading @@ -436,6 +453,14 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat return alpha; } /** * Updates visibility of the user switcher button based on {@link android.os.UserManager} state. */ private void updateUserSwitcher() { mView.setUserSwitcherEnabled(mUserManager.isUserSwitcherEnabled(getResources().getBoolean( R.bool.qs_show_user_switcher_for_single_user))); } /** * Update {@link KeyguardStatusBarView}'s visibility based on whether keyguard is showing and * whether heads up is visible. Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java +41 −3 Original line number Diff line number Diff line Loading @@ -23,9 +23,13 @@ import static com.android.systemui.statusbar.StatusBarState.SHADE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.os.UserManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.LayoutInflater; Loading @@ -45,6 +49,7 @@ import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler; import com.android.systemui.statusbar.policy.BatteryController; 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.statusbar.policy.UserInfoController; Loading @@ -52,6 +57,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; Loading Loading @@ -87,6 +93,12 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { private SysuiStatusBarStateController mStatusBarStateController; @Mock private StatusBarContentInsetsProvider mStatusBarContentInsetsProvider; @Mock private UserManager mUserManager; @Captor private ArgumentCaptor<ConfigurationListener> mConfigurationListenerCaptor; @Captor private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardCallbackCaptor; private TestNotificationPanelViewStateProvider mNotificationPanelViewStateProvider; private KeyguardStatusBarView mKeyguardStatusBarView; Loading @@ -101,8 +113,8 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { allowTestableLooperAsMainThread(); TestableLooper.get(this).runWithLooper(() -> { mKeyguardStatusBarView = (KeyguardStatusBarView) LayoutInflater.from(mContext) .inflate(R.layout.keyguard_status_bar, null); spy((KeyguardStatusBarView) LayoutInflater.from(mContext) .inflate(R.layout.keyguard_status_bar, null)); }); mController = new KeyguardStatusBarViewController( Loading @@ -121,7 +133,8 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { mKeyguardUpdateMonitor, mBiometricUnlockController, mStatusBarStateController, mStatusBarContentInsetsProvider mStatusBarContentInsetsProvider, mUserManager ); } Loading @@ -133,6 +146,31 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase { verify(mAnimationScheduler).addCallback(any()); verify(mUserInfoController).addCallback(any()); verify(mStatusBarIconController).addIconGroup(any()); verify(mUserManager).isUserSwitcherEnabled(anyBoolean()); } @Test public void onConfigurationChanged_updatesUserSwitcherVisibility() { mController.onViewAttached(); verify(mConfigurationController).addCallback(mConfigurationListenerCaptor.capture()); clearInvocations(mUserManager); clearInvocations(mKeyguardStatusBarView); mConfigurationListenerCaptor.getValue().onConfigChanged(null); verify(mUserManager).isUserSwitcherEnabled(anyBoolean()); verify(mKeyguardStatusBarView).setUserSwitcherEnabled(anyBoolean()); } @Test public void onKeyguardVisibilityChanged_updatesUserSwitcherVisibility() { mController.onViewAttached(); verify(mKeyguardUpdateMonitor).registerCallback(mKeyguardCallbackCaptor.capture()); clearInvocations(mUserManager); clearInvocations(mKeyguardStatusBarView); mKeyguardCallbackCaptor.getValue().onKeyguardVisibilityChanged(true); verify(mUserManager).isUserSwitcherEnabled(anyBoolean()); verify(mKeyguardStatusBarView).setUserSwitcherEnabled(anyBoolean()); } @Test Loading