Merge "Cache UserManager#isUserSwitcherEnabled"

This commit is contained in:
Lucas Dupin
2022-02-01 19:49:19 +00:00
committed by Android (Google) Code Review
3 changed files with 74 additions and 15 deletions

View File

@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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
@@ -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);
@@ -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);

View File

@@ -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;
@@ -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() {
@@ -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 =
@@ -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,
@@ -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;
@@ -248,6 +264,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
mBiometricUnlockController = biometricUnlockController;
mStatusBarStateController = statusBarStateController;
mInsetsProvider = statusBarContentInsetsProvider;
mUserManager = userManager;
mFirstBypassAttempt = mKeyguardBypassController.getBypassEnabled();
mKeyguardStateController.addCallback(
@@ -293,7 +310,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
}
mView.setOnApplyWindowInsetsListener(
(view, windowInsets) -> mView.updateWindowInsets(windowInsets, mInsetsProvider));
updateUserSwitcher();
onThemeChanged();
}
@@ -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.

View File

@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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(
@@ -121,7 +133,8 @@ public class KeyguardStatusBarViewControllerTest extends SysuiTestCase {
mKeyguardUpdateMonitor,
mBiometricUnlockController,
mStatusBarStateController,
mStatusBarContentInsetsProvider
mStatusBarContentInsetsProvider,
mUserManager
);
}
@@ -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