Merge "Fix behavior when config_guestUserAutoCreated=true" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3d123e4a5e
@@ -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);
|
||||||
|
} else {
|
||||||
|
if (mController.mGuestUserAutoCreated) {
|
||||||
|
// If mGuestIsResetting=true, we expect the guest user to be created
|
||||||
|
// 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(
|
return context.getString(
|
||||||
item.info == null && !mController.mGuestUserAutoCreated
|
mController.mGuestIsResetting.get()
|
||||||
? com.android.settingslib.R.string.guest_new_guest
|
? com.android.settingslib.R.string.guest_resetting
|
||||||
: com.android.settingslib.R.string.guest_nickname);
|
: 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);
|
||||||
|
|||||||
Reference in New Issue
Block a user