Merge "Changing the process to create a new user"

This commit is contained in:
Jackson Michael Moreira Miranda
2022-11-30 12:05:30 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 53 deletions

View File

@@ -97,6 +97,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -240,9 +241,6 @@ public class UserSettings extends SettingsPreferenceFragment
case MESSAGE_UPDATE_LIST: case MESSAGE_UPDATE_LIST:
updateUserList(); updateUserList();
break; break;
case MESSAGE_USER_CREATED:
onUserCreated(msg.arg1);
break;
case MESSAGE_REMOVE_GUEST_ON_EXIT_CONTROLLER_GUEST_REMOVED: case MESSAGE_REMOVE_GUEST_ON_EXIT_CONTROLLER_GUEST_REMOVED:
updateUserList(); updateUserList();
if (mGuestUserAutoCreated) { if (mGuestUserAutoCreated) {
@@ -624,14 +622,13 @@ public class UserSettings extends SettingsPreferenceFragment
} }
} }
private void onUserCreated(int userId) { private void onUserCreated(UserInfo userInfo) {
hideUserCreatingDialog(); hideUserCreatingDialog();
// prevent crash when config changes during user creation // prevent crash when config changes during user creation
if (getContext() == null) { if (getContext() == null) {
return; return;
} }
mAddingUser = false; mAddingUser = false;
UserInfo userInfo = mUserManager.getUserInfo(userId);
openUserDetails(userInfo, true); openUserDetails(userInfo, true);
} }
@@ -1011,69 +1008,50 @@ public class UserSettings extends SettingsPreferenceFragment
mUserCreatingDialog = new UserCreatingDialog(getActivity()); mUserCreatingDialog = new UserCreatingDialog(getActivity());
mUserCreatingDialog.show(); mUserCreatingDialog.show();
ThreadUtils.postOnBackgroundThread(new AddUserNowImpl(userType, mAddingUserName)); createUser(userType, mAddingUserName);
} }
@VisibleForTesting @VisibleForTesting
class AddUserNowImpl implements Runnable{ void createUser(final int userType, String userName) {
int mUserType; Future<?> unusedCreateUserFuture = ThreadUtils.postOnBackgroundThread(() -> {
String mImplAddUserName;
AddUserNowImpl(final int userType, final String addUserName) {
mUserType = userType;
mImplAddUserName = addUserName;
}
@Override
public void run() {
runAddUser();
Trace.endAsyncSection("UserSettings.addUserNow", 0);
}
private void runAddUser() {
UserInfo user; UserInfo user;
String username;
synchronized (mUserLock) { if (userType == USER_TYPE_USER) {
username = mImplAddUserName; user = mUserManager.createUser(
} userName,
mUserManager.USER_TYPE_FULL_SECONDARY,
// Could take a few seconds 0);
if (mUserType == USER_TYPE_USER) {
user = mUserManager.createUser(username, 0);
} else { } else {
user = mUserManager.createRestrictedProfile(username); user = mUserManager.createRestrictedProfile(userName);
} }
synchronized (mUserLock) { ThreadUtils.postOnMainThread(() -> {
if (user == null) { if (user == null) {
mAddingUser = false; mAddingUser = false;
mPendingUserIcon = null; mPendingUserIcon = null;
mPendingUserName = null; mPendingUserName = null;
ThreadUtils.postOnMainThread(() -> onUserCreationFailed()); onUserCreationFailed();
return; return;
} }
Drawable newUserIcon = mPendingUserIcon; Future<?> unusedSettingIconFuture = ThreadUtils.postOnBackgroundThread(() -> {
if (newUserIcon == null) { Drawable newUserIcon = mPendingUserIcon;
newUserIcon = UserIcons.getDefaultUserIcon(getResources(), user.id, false); if (newUserIcon == null) {
} newUserIcon = UserIcons.getDefaultUserIcon(getResources(), user.id, false);
mUserManager.setUserIcon( }
user.id, UserIcons.convertToBitmapAtUserIconSize( mUserManager.setUserIcon(
getResources(), newUserIcon)); user.id, UserIcons.convertToBitmapAtUserIconSize(
getResources(), newUserIcon));
if (mUserType == USER_TYPE_USER) { });
mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
}
mHandler.sendMessage(mHandler.obtainMessage(
MESSAGE_USER_CREATED, user.id, user.serialNumber));
mPendingUserIcon = null; mPendingUserIcon = null;
mPendingUserName = null; mPendingUserName = null;
}
} onUserCreated(user);
}; });
});
}
/** /**
* Erase the current user (guest) and switch to another user. * Erase the current user (guest) and switch to another user.

View File

@@ -35,7 +35,6 @@ import androidx.test.platform.app.InstrumentationRegistry;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.testutils.AdbUtils; import com.android.settings.testutils.AdbUtils;
import com.android.settings.testutils.UiUtils; import com.android.settings.testutils.UiUtils;
import com.android.settingslib.utils.ThreadUtils;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -87,8 +86,7 @@ public class UserSettingsComponentTest {
((FragmentActivity) activity).getSupportFragmentManager().getFragments().get(0); ((FragmentActivity) activity).getSupportFragmentManager().getFragments().get(0);
UserSettings us = (UserSettings) f; UserSettings us = (UserSettings) f;
Log.d(TAG, "Start to add user :" + randomUserName); Log.d(TAG, "Start to add user :" + randomUserName);
ThreadUtils.postOnBackgroundThread( us.createUser(USER_TYPE_RESTRICTED_PROFILE, randomUserName);
us.new AddUserNowImpl(USER_TYPE_RESTRICTED_PROFILE, randomUserName));
}); });
assertThat( assertThat(