Merge "Fix behavior when config_guestUserAutoCreated=true" into sc-dev

This commit is contained in:
Peter Kalauskas
2021-07-23 17:20:59 +00:00
committed by Android (Google) Code Review

View File

@@ -131,6 +131,7 @@ public class UserSwitcherController implements Dumpable {
public final DetailAdapter mUserDetailAdapter; public final DetailAdapter mUserDetailAdapter;
private final Executor mUiBgExecutor; private final Executor mUiBgExecutor;
private final boolean mGuestUserAutoCreated; private final boolean mGuestUserAutoCreated;
private final AtomicBoolean mGuestIsResetting;
private final AtomicBoolean mGuestCreationScheduled; private final AtomicBoolean mGuestCreationScheduled;
private FalsingManager mFalsingManager; private FalsingManager mFalsingManager;
@@ -160,6 +161,7 @@ public class UserSwitcherController implements Dumpable {
} }
mGuestUserAutoCreated = mContext.getResources().getBoolean( mGuestUserAutoCreated = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_guestUserAutoCreated); com.android.internal.R.bool.config_guestUserAutoCreated);
mGuestIsResetting = new AtomicBoolean();
mGuestCreationScheduled = new AtomicBoolean(); mGuestCreationScheduled = new AtomicBoolean();
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mHandler = handler; mHandler = handler;
@@ -301,7 +303,20 @@ public class UserSwitcherController implements Dumpable {
boolean createIsRestricted = !addUsersWhenLocked; boolean createIsRestricted = !addUsersWhenLocked;
if (guestRecord == null) { if (guestRecord == null) {
if (canCreateGuest) { if (mGuestUserAutoCreated) {
// If mGuestIsResetting=true, the switch should be disabled since
// we will just use it as an indicator for "Resetting guest...".
// Otherwise, default to canSwitchUsers.
boolean isSwitchToGuestEnabled =
!mGuestIsResetting.get() && canSwitchUsers;
guestRecord = new UserRecord(null /* info */, null /* picture */,
true /* isGuest */, false /* isCurrent */,
false /* isAddUser */, false /* isRestricted */,
isSwitchToGuestEnabled);
// Don't call checkIfAddUserDisallowedByAdminOnly if
// config_guestUserAutoCreated=true.
records.add(guestRecord);
} else if (canCreateGuest) {
guestRecord = new UserRecord(null /* info */, null /* picture */, guestRecord = new UserRecord(null /* info */, null /* picture */,
true /* isGuest */, false /* isCurrent */, true /* isGuest */, false /* isCurrent */,
false /* isAddUser */, createIsRestricted, canSwitchUsers); false /* isAddUser */, createIsRestricted, canSwitchUsers);
@@ -677,6 +692,9 @@ public class UserSwitcherController implements Dumpable {
switchToUserId(newGuestId); switchToUserId(newGuestId);
mUserManager.removeUser(currentUser.id); mUserManager.removeUser(currentUser.id);
} else { } else {
if (mGuestUserAutoCreated) {
mGuestIsResetting.set(true);
}
switchToUserId(targetUserId); switchToUserId(targetUserId);
mUserManager.removeUser(currentUser.id); mUserManager.removeUser(currentUser.id);
} }
@@ -693,10 +711,14 @@ public class UserSwitcherController implements Dumpable {
mUiBgExecutor.execute(() -> { mUiBgExecutor.execute(() -> {
int newGuestId = createGuest(); int newGuestId = createGuest();
mGuestCreationScheduled.set(false);
mGuestIsResetting.set(false);
if (newGuestId == UserHandle.USER_NULL) { if (newGuestId == UserHandle.USER_NULL) {
Log.w(TAG, "Could not create new guest while exiting existing guest"); Log.w(TAG, "Could not create new guest while exiting existing guest");
// Refresh users so that we still display "Guest" if
// config_guestUserAutoCreated=true
refreshUsers(UserHandle.USER_NULL);
} }
mGuestCreationScheduled.set(false);
}); });
} }
@@ -799,12 +821,25 @@ public class UserSwitcherController implements Dumpable {
? com.android.settingslib.R.string.guest_reset_guest ? com.android.settingslib.R.string.guest_reset_guest
: com.android.settingslib.R.string.guest_exit_guest); : com.android.settingslib.R.string.guest_exit_guest);
} else { } else {
// If config_guestUserAutoCreated, always show guest nickname instead of "Add if (item.info != null) {
// guest" to make it seem as though the device always has a guest ready for use return context.getString(com.android.settingslib.R.string.guest_nickname);
return context.getString( } else {
item.info == null && !mController.mGuestUserAutoCreated if (mController.mGuestUserAutoCreated) {
? com.android.settingslib.R.string.guest_new_guest // If mGuestIsResetting=true, we expect the guest user to be created
: com.android.settingslib.R.string.guest_nickname); // shortly, so display a "Resetting guest..." as an indicator that we
// are busy. Otherwise, if mGuestIsResetting=false, we probably failed
// to create a guest at some point. In this case, always show guest
// nickname instead of "Add guest" to make it seem as though the device
// always has a guest ready for use.
return context.getString(
mController.mGuestIsResetting.get()
? com.android.settingslib.R.string.guest_resetting
: com.android.settingslib.R.string.guest_nickname);
} else {
return context.getString(
com.android.settingslib.R.string.guest_new_guest);
}
}
} }
} else if (item.isAddUser) { } else if (item.isAddUser) {
return context.getString(R.string.user_add_user); return context.getString(R.string.user_add_user);