User switcher - Update when multiple users enabled/disabled
Listen for the overall multiuser setting and update the available list of users. Also remove an unused preference. Fixes: 228339026 Test: atest UserSwitcherControllerTest Change-Id: Idbaf97c599bacba2122cbce2d047eb59262ac63e Merged-In: Idbaf97c599bacba2122cbce2d047eb59262ac63e
This commit is contained in:
@@ -63,7 +63,6 @@ public final class Prefs {
|
||||
Key.QS_WORK_ADDED,
|
||||
Key.QS_NIGHTDISPLAY_ADDED,
|
||||
Key.QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT,
|
||||
Key.SEEN_MULTI_USER,
|
||||
Key.SEEN_RINGER_GUIDANCE_COUNT,
|
||||
Key.QS_HAS_TURNED_OFF_MOBILE_DATA,
|
||||
Key.TOUCHED_RINGER_TOGGLE,
|
||||
@@ -106,7 +105,6 @@ public final class Prefs {
|
||||
* Settings panel.
|
||||
*/
|
||||
String QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT = "QsLongPressTooltipShownCount";
|
||||
String SEEN_MULTI_USER = "HasSeenMultiUser";
|
||||
String SEEN_RINGER_GUIDANCE_COUNT = "RingerGuidanceCount";
|
||||
String QS_TILE_SPECS_REVEALED = "QsTileSpecsRevealed";
|
||||
String QS_HAS_TURNED_OFF_MOBILE_DATA = "QsHasTurnedOffMobileData";
|
||||
|
||||
@@ -64,8 +64,6 @@ import com.android.settingslib.users.UserCreatingDialog;
|
||||
import com.android.settingslib.utils.ThreadUtils;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.GuestResumeSessionReceiver;
|
||||
import com.android.systemui.Prefs;
|
||||
import com.android.systemui.Prefs.Key;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUISecondaryUserService;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
@@ -84,6 +82,7 @@ import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||
import com.android.systemui.telephony.TelephonyListenerManager;
|
||||
import com.android.systemui.user.CreateUserActivity;
|
||||
import com.android.systemui.util.settings.GlobalSettings;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -144,6 +143,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
// When false, there won't be any visual affordance to add a new user from the keyguard even if
|
||||
// the user is unlocked
|
||||
private boolean mAddUsersFromLockScreen;
|
||||
private boolean mUserSwitcherEnabled;
|
||||
@VisibleForTesting
|
||||
boolean mPauseRefreshUsers;
|
||||
private int mSecondaryUser = UserHandle.USER_NULL;
|
||||
@@ -160,6 +160,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
private FalsingManager mFalsingManager;
|
||||
private View mView;
|
||||
private String mCreateSupervisedUserPackage;
|
||||
private GlobalSettings mGlobalSettings;
|
||||
|
||||
@Inject
|
||||
public UserSwitcherController(Context context,
|
||||
@@ -177,6 +178,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
FalsingManager falsingManager,
|
||||
TelephonyListenerManager telephonyListenerManager,
|
||||
SecureSettings secureSettings,
|
||||
GlobalSettings globalSettings,
|
||||
@Background Executor bgExecutor,
|
||||
@LongRunning Executor longRunningExecutor,
|
||||
@Main Executor uiExecutor,
|
||||
@@ -194,6 +196,7 @@ public class UserSwitcherController implements Dumpable {
|
||||
mFalsingManager = falsingManager;
|
||||
mInteractionJankMonitor = interactionJankMonitor;
|
||||
mLatencyTracker = latencyTracker;
|
||||
mGlobalSettings = globalSettings;
|
||||
mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(
|
||||
this, mUserTracker, mUiEventLogger, secureSettings);
|
||||
mBgExecutor = bgExecutor;
|
||||
@@ -237,14 +240,19 @@ public class UserSwitcherController implements Dumpable {
|
||||
@Override
|
||||
public void onChange(boolean selfChange) {
|
||||
mSimpleUserSwitcher = shouldUseSimpleUserSwitcher();
|
||||
mAddUsersFromLockScreen = Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.ADD_USERS_WHEN_LOCKED, 0) != 0;
|
||||
mAddUsersFromLockScreen = mGlobalSettings.getIntForUser(
|
||||
Settings.Global.ADD_USERS_WHEN_LOCKED, 0, UserHandle.USER_SYSTEM) != 0;
|
||||
mUserSwitcherEnabled = mGlobalSettings.getIntForUser(
|
||||
Settings.Global.USER_SWITCHER_ENABLED, 0, UserHandle.USER_SYSTEM) != 0;
|
||||
refreshUsers(UserHandle.USER_NULL);
|
||||
};
|
||||
};
|
||||
mContext.getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(SIMPLE_USER_SWITCHER_GLOBAL_SETTING), true,
|
||||
mSettingsObserver);
|
||||
mContext.getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.USER_SWITCHER_ENABLED), true,
|
||||
mSettingsObserver);
|
||||
mContext.getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.ADD_USERS_WHEN_LOCKED), true,
|
||||
mSettingsObserver);
|
||||
@@ -314,6 +322,10 @@ public class UserSwitcherController implements Dumpable {
|
||||
for (UserInfo info : infos) {
|
||||
boolean isCurrent = currentId == info.id;
|
||||
boolean switchToEnabled = canSwitchUsers || isCurrent;
|
||||
if (!mUserSwitcherEnabled && !info.isPrimary()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (info.isEnabled()) {
|
||||
if (info.isGuest()) {
|
||||
// Tapping guest icon triggers remove and a user switch therefore
|
||||
@@ -340,9 +352,6 @@ public class UserSwitcherController implements Dumpable {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (records.size() > 1 || guestRecord != null) {
|
||||
Prefs.putBoolean(mContext, Key.SEEN_MULTI_USER, true);
|
||||
}
|
||||
|
||||
if (guestRecord == null) {
|
||||
if (mGuestUserAutoCreated) {
|
||||
@@ -411,12 +420,14 @@ public class UserSwitcherController implements Dumpable {
|
||||
}
|
||||
|
||||
boolean canCreateGuest(boolean hasExistingGuest) {
|
||||
return (currentUserCanCreateUsers() || anyoneCanCreateUsers())
|
||||
return mUserSwitcherEnabled
|
||||
&& (currentUserCanCreateUsers() || anyoneCanCreateUsers())
|
||||
&& !hasExistingGuest;
|
||||
}
|
||||
|
||||
boolean canCreateUser() {
|
||||
return (currentUserCanCreateUsers() || anyoneCanCreateUsers())
|
||||
return mUserSwitcherEnabled
|
||||
&& (currentUserCanCreateUsers() || anyoneCanCreateUsers())
|
||||
&& mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_SECONDARY);
|
||||
}
|
||||
|
||||
@@ -1034,8 +1045,8 @@ public class UserSwitcherController implements Dumpable {
|
||||
private boolean shouldUseSimpleUserSwitcher() {
|
||||
int defaultSimpleUserSwitcher = mContext.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_expandLockScreenUserSwitcher) ? 1 : 0;
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
SIMPLE_USER_SWITCHER_GLOBAL_SETTING, defaultSimpleUserSwitcher) != 0;
|
||||
return mGlobalSettings.getIntForUser(SIMPLE_USER_SWITCHER_GLOBAL_SETTING,
|
||||
defaultSimpleUserSwitcher, UserHandle.USER_SYSTEM) != 0;
|
||||
}
|
||||
|
||||
public void startActivity(Intent intent) {
|
||||
|
||||
@@ -28,6 +28,7 @@ import android.hardware.fingerprint.FingerprintManager
|
||||
import android.os.Handler
|
||||
import android.os.UserHandle
|
||||
import android.os.UserManager
|
||||
import android.provider.Settings
|
||||
import android.testing.AndroidTestingRunner
|
||||
import android.testing.TestableLooper
|
||||
import android.view.ThreadedRenderer
|
||||
@@ -51,6 +52,7 @@ import com.android.systemui.settings.UserTracker
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowView
|
||||
import com.android.systemui.telephony.TelephonyListenerManager
|
||||
import com.android.systemui.util.concurrency.FakeExecutor
|
||||
import com.android.systemui.util.settings.GlobalSettings
|
||||
import com.android.systemui.util.settings.SecureSettings
|
||||
import com.android.systemui.util.time.FakeSystemClock
|
||||
import org.junit.Assert.assertEquals
|
||||
@@ -67,6 +69,7 @@ import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.any
|
||||
import org.mockito.Mockito.doNothing
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.eq
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.MockitoAnnotations
|
||||
@@ -95,6 +98,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
|
||||
@Mock private lateinit var notificationShadeWindowView: NotificationShadeWindowView
|
||||
@Mock private lateinit var threadedRenderer: ThreadedRenderer
|
||||
@Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
|
||||
@Mock private lateinit var globalSettings: GlobalSettings
|
||||
private lateinit var testableLooper: TestableLooper
|
||||
private lateinit var bgExecutor: FakeExecutor
|
||||
private lateinit var longRunningExecutor: FakeExecutor
|
||||
@@ -148,6 +152,22 @@ class UserSwitcherControllerTest : SysuiTestCase() {
|
||||
`when`(userTracker.userId).thenReturn(ownerId)
|
||||
`when`(userTracker.userInfo).thenReturn(ownerInfo)
|
||||
|
||||
`when`(
|
||||
globalSettings.getIntForUser(
|
||||
eq(Settings.Global.ADD_USERS_WHEN_LOCKED),
|
||||
anyInt(),
|
||||
eq(UserHandle.USER_SYSTEM)
|
||||
)
|
||||
).thenReturn(0)
|
||||
|
||||
`when`(
|
||||
globalSettings.getIntForUser(
|
||||
eq(Settings.Global.USER_SWITCHER_ENABLED),
|
||||
anyInt(),
|
||||
eq(UserHandle.USER_SYSTEM)
|
||||
)
|
||||
).thenReturn(1)
|
||||
|
||||
setupController()
|
||||
}
|
||||
|
||||
@@ -168,6 +188,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
|
||||
falsingManager,
|
||||
telephonyListenerManager,
|
||||
secureSettings,
|
||||
globalSettings,
|
||||
bgExecutor,
|
||||
longRunningExecutor,
|
||||
uiExecutor,
|
||||
@@ -469,4 +490,43 @@ class UserSwitcherControllerTest : SysuiTestCase() {
|
||||
// THEN a supervised user can NOT be constructed
|
||||
assertFalse(userSwitcherController.canCreateSupervisedUser())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCannotCreateUserWhenUserSwitcherDisabled() {
|
||||
`when`(
|
||||
globalSettings.getIntForUser(
|
||||
eq(Settings.Global.USER_SWITCHER_ENABLED),
|
||||
anyInt(),
|
||||
eq(UserHandle.USER_SYSTEM)
|
||||
)
|
||||
).thenReturn(0)
|
||||
setupController()
|
||||
assertFalse(userSwitcherController.canCreateUser())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCannotCreateGuestUserWhenUserSwitcherDisabled() {
|
||||
`when`(
|
||||
globalSettings.getIntForUser(
|
||||
eq(Settings.Global.USER_SWITCHER_ENABLED),
|
||||
anyInt(),
|
||||
eq(UserHandle.USER_SYSTEM)
|
||||
)
|
||||
).thenReturn(0)
|
||||
setupController()
|
||||
assertFalse(userSwitcherController.canCreateGuest(false))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCannotCreateSupervisedUserWhenUserSwitcherDisabled() {
|
||||
`when`(
|
||||
globalSettings.getIntForUser(
|
||||
eq(Settings.Global.USER_SWITCHER_ENABLED),
|
||||
anyInt(),
|
||||
eq(UserHandle.USER_SYSTEM)
|
||||
)
|
||||
).thenReturn(0)
|
||||
setupController()
|
||||
assertFalse(userSwitcherController.canCreateSupervisedUser())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user