Merge "Expose findCurrentGuestUser() to system apps"

This commit is contained in:
Anthony Hugh
2019-12-04 22:54:07 +00:00
committed by Android (Google) Code Review
6 changed files with 58 additions and 3 deletions

View File

@@ -87,6 +87,7 @@ interface IUserManager {
void setDefaultGuestRestrictions(in Bundle restrictions);
Bundle getDefaultGuestRestrictions();
boolean markGuestForDeletion(int userId);
UserInfo findCurrentGuestUser();
boolean isQuietModeEnabled(int userId);
void setSeedAccountData(int userId, in String accountName,
in String accountType, in PersistableBundle accountOptions, boolean persist);

View File

@@ -2374,6 +2374,20 @@ public class UserManager {
return guest;
}
/**
* Gets the existing guest user if it exists. This does not include guest users that are dying.
* @return The existing guest user if it exists. Null otherwise.
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_USERS)
public UserInfo findCurrentGuestUser() {
try {
return mService.findCurrentGuestUser();
} catch (RemoteException re) {
throw re.rethrowFromSystemServer();
}
}
/**
* Creates a user with the specified name and options as a profile of another user.
* Requires {@link android.Manifest.permission#MANAGE_USERS} permission.

View File

@@ -21,6 +21,7 @@ import static android.content.DialogInterface.BUTTON_POSITIVE;
import static android.os.UserManager.DISALLOW_ADD_USER;
import static android.os.UserManager.SWITCHABILITY_STATUS_OK;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
@@ -266,7 +267,10 @@ public class UserGridRecyclerView extends RecyclerView {
if (userRecord.mIsStartGuestSession) {
notifyUserSelected(userRecord);
mCarUserManagerHelper.startGuestSession(mGuestName);
UserInfo guest = createNewOrFindExistingGuest(mContext);
if (guest != null) {
mCarUserManagerHelper.switchToUser(guest);
}
return;
}
@@ -381,6 +385,24 @@ public class UserGridRecyclerView extends RecyclerView {
return circleIcon;
}
/**
* Finds the existing Guest user, or creates one if it doesn't exist.
* @param context App context
* @return UserInfo representing the Guest user
*/
@Nullable
public UserInfo createNewOrFindExistingGuest(Context context) {
// CreateGuest will return null if a guest already exists.
UserInfo newGuest = mUserManager.createGuest(context, mGuestName);
if (newGuest != null) {
new UserIconProvider().assignDefaultIcon(
mUserManager, context.getResources(), newGuest);
return newGuest;
}
return mUserManager.findCurrentGuestUser();
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == BUTTON_POSITIVE) {

View File

@@ -88,7 +88,7 @@ public class UserIconProvider {
* @param userInfo User whose avatar is set to default icon.
* @return Bitmap of the user icon.
*/
private Bitmap assignDefaultIcon(
public Bitmap assignDefaultIcon(
UserManager userManager, Resources resources, UserInfo userInfo) {
Bitmap bitmap = userInfo.isGuest()
? getGuestUserDefaultIcon(resources)

View File

@@ -3452,8 +3452,13 @@ public class UserManagerService extends IUserManager.Stub {
/**
* Find the current guest user. If the Guest user is partial,
* then do not include it in the results as it is about to die.
*
* @return The current guest user. Null if it doesn't exist.
* @hide
*/
private UserInfo findCurrentGuestUser() {
@Override
public UserInfo findCurrentGuestUser() {
checkManageUsersPermission("findCurrentGuestUser");
synchronized (mUsersLock) {
final int size = mUsers.size();
for (int i = 0; i < size; i++) {

View File

@@ -262,6 +262,19 @@ public class UserManagerTest extends AndroidTestCase {
assertNull(userInfo2);
}
@MediumTest
public void testFindExistingGuest_guestExists() throws Exception {
UserInfo userInfo1 = createUser("Guest", UserInfo.FLAG_GUEST);
UserInfo foundGuest = mUserManager.findCurrentGuestUser();
assertNotNull(foundGuest);
}
@SmallTest
public void testFindExistingGuest_guestDoesNotExist() throws Exception {
UserInfo foundGuest = mUserManager.findCurrentGuestUser();
assertNull(foundGuest);
}
@MediumTest
public void testSetUserAdmin() throws Exception {
UserInfo userInfo = createUser("SecondaryUser", /*flags=*/ 0);