Merge "Fixes null-ref when trying to start Guest session." into pi-dev

This commit is contained in:
Jovana Knezevic
2018-04-26 19:40:02 +00:00
committed by Android (Google) Code Review
5 changed files with 40 additions and 26 deletions

View File

@@ -354,20 +354,15 @@ public final class UserManagerHelper {
return; return;
} }
if (userInfo.isGuest()) {
switchToGuest(userInfo.name);
return;
}
switchToUserId(userInfo.id); switchToUserId(userInfo.id);
} }
/** /**
* Creates a guest session and switches into the guest session. * Creates a new guest session and switches into the guest session.
* *
* @param guestName Username for the guest user. * @param guestName Username for the guest user.
*/ */
public void switchToGuest(String guestName) { public void startNewGuestSession(String guestName) {
UserInfo guest = mUserManager.createGuest(mContext, guestName); UserInfo guest = mUserManager.createGuest(mContext, guestName);
if (guest == null) { if (guest == null) {
// Couldn't create user, most likely because there are too many, but we haven't // Couldn't create user, most likely because there are too many, but we haven't
@@ -375,6 +370,7 @@ public final class UserManagerHelper {
Log.w(TAG, "can't create user."); Log.w(TAG, "can't create user.");
return; return;
} }
assignDefaultIcon(guest);
switchToUserId(guest.id); switchToUserId(guest.id);
} }
@@ -417,6 +413,27 @@ public final class UserManagerHelper {
mUserManager.setUserName(user.id, name); mUserManager.setUserName(user.id, name);
} }
/**
* Gets a bitmap representing the user's default avatar.
*
* @param userInfo User whose avatar should be returned.
* @return Default user icon
*/
public Bitmap getUserDefaultIcon(UserInfo userInfo) {
return UserIcons.convertToBitmap(
UserIcons.getDefaultUserIcon(mContext.getResources(), userInfo.id, false));
}
/**
* Gets a bitmap representing the default icon for a Guest user.
*
* @return Degault guest icon
*/
public Bitmap getGuestDefaultIcon() {
return UserIcons.convertToBitmap(UserIcons.getDefaultUserIcon(
mContext.getResources(), UserHandle.USER_NULL, false));
}
private void registerReceiver() { private void registerReceiver() {
IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_REMOVED); filter.addAction(Intent.ACTION_USER_REMOVED);
@@ -435,8 +452,7 @@ public final class UserManagerHelper {
* @return Bitmap that has been assigned to the user. * @return Bitmap that has been assigned to the user.
*/ */
private Bitmap assignDefaultIcon(UserInfo userInfo) { private Bitmap assignDefaultIcon(UserInfo userInfo) {
Bitmap bitmap = UserIcons.convertToBitmap( Bitmap bitmap = userInfo.isGuest() ? getGuestDefaultIcon() : getUserDefaultIcon(userInfo);
UserIcons.getDefaultUserIcon(mContext.getResources(), userInfo.id, false));
mUserManager.setUserIcon(userInfo.id, bitmap); mUserManager.setUserIcon(userInfo.id, bitmap);
return bitmap; return bitmap;
} }

View File

@@ -247,13 +247,13 @@ public class UserManagerHelperTest {
} }
@Test @Test
public void switchToGuest() { public void startNewGuestSession() {
mHelper.switchToGuest("Test Guest"); mHelper.startNewGuestSession("Test Guest");
verify(mUserManager).createGuest(mContext, "Test Guest"); verify(mUserManager).createGuest(mContext, "Test Guest");
UserInfo guestInfo = new UserInfo(21, "Test Guest", UserInfo.FLAG_GUEST); UserInfo guestInfo = new UserInfo(21, "Test Guest", UserInfo.FLAG_GUEST);
when(mUserManager.createGuest(mContext, "Test Guest")).thenReturn(guestInfo); when(mUserManager.createGuest(mContext, "Test Guest")).thenReturn(guestInfo);
mHelper.switchToGuest("Test Guest"); mHelper.startNewGuestSession("Test Guest");
verify(mActivityManager).switchUser(21); verify(mActivityManager).switchUser(21);
} }

View File

@@ -185,12 +185,7 @@ public class UserManagerHelperRoboTest {
mHelper.switchToUser(createUserInfoForId(20)); mHelper.switchToUser(createUserInfoForId(20));
assertThat(ShadowActivityManager.getShadow().getSwitchUserCalled()).isFalse(); assertThat(ShadowActivityManager.getShadow().getSwitchUserCalled()).isFalse();
// Switching to Guest calls createGuest. // Switching to non-foreground user, simply calls switchUser.
UserInfo guestInfo = new UserInfo(21, "Test Guest", UserInfo.FLAG_GUEST);
mHelper.switchToUser(guestInfo);
verify(mUserManager).createGuest(mContext, "Test Guest");
// Switching to non-current, non-guest user, simply calls switchUser.
UserInfo userToSwitchTo = new UserInfo(22, "Test User", 0); UserInfo userToSwitchTo = new UserInfo(22, "Test User", 0);
mHelper.switchToUser(userToSwitchTo); mHelper.switchToUser(userToSwitchTo);
assertThat(ShadowActivityManager.getShadow().getSwitchUserCalled()).isTrue(); assertThat(ShadowActivityManager.getShadow().getSwitchUserCalled()).isTrue();

View File

@@ -207,7 +207,7 @@ public class UserGridRecyclerView extends PagedListView implements
// If the user selects Guest, start the guest session. // If the user selects Guest, start the guest session.
if (userRecord.mIsStartGuestSession) { if (userRecord.mIsStartGuestSession) {
mUserManagerHelper.switchToGuest(mGuestName); mUserManagerHelper.startNewGuestSession(mGuestName);
return; return;
} }
@@ -241,8 +241,7 @@ public class UserGridRecyclerView extends PagedListView implements
private Bitmap getUserRecordIcon(UserRecord userRecord) { private Bitmap getUserRecordIcon(UserRecord userRecord) {
if (userRecord.mIsStartGuestSession) { if (userRecord.mIsStartGuestSession) {
return UserIcons.convertToBitmap(UserIcons.getDefaultUserIcon( return mUserManagerHelper.getGuestDefaultIcon();
mContext.getResources(), UserHandle.USER_NULL, false));
} }
if (userRecord.mIsAddUser) { if (userRecord.mIsAddUser) {

View File

@@ -23,6 +23,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.UserManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@@ -59,11 +60,14 @@ final class CarUserSwitchingDialog extends UserSwitchingDialog {
View view = LayoutInflater.from(getContext()).inflate(R.layout.car_user_switching_dialog, View view = LayoutInflater.from(getContext()).inflate(R.layout.car_user_switching_dialog,
null); null);
FileDescriptor fileDescriptor = UserManagerService.getInstance() UserManager userManager =
.getUserIcon(mNewUser.id).getFileDescriptor(); (UserManager) getContext().getSystemService(Context.USER_SERVICE);
Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor); Bitmap bitmap = userManager.getUserIcon(mNewUser.id);
((ImageView) view.findViewById(R.id.user_loading_avatar)) if (bitmap != null) {
.setImageBitmap(bitmap); ((ImageView) view.findViewById(R.id.user_loading_avatar))
.setImageBitmap(bitmap);
}
((TextView) view.findViewById(R.id.user_loading)) ((TextView) view.findViewById(R.id.user_loading))
.setText(res.getString(R.string.car_loading_profile)); .setText(res.getString(R.string.car_loading_profile));
setView(view); setView(view);