Make user creation flow in a single dialog

Bug: 266548780
Test: atest UserDetailsSettingsTest
Change-Id: I3df846aa480b80321269ac7b9b8723912597aba4
This commit is contained in:
Tetiana Meronyk
2023-04-13 11:27:22 +00:00
parent c054498357
commit d3335c2785

View File

@@ -28,7 +28,6 @@ import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@@ -83,6 +82,7 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.drawable.CircleFramedDrawable; import com.android.settingslib.drawable.CircleFramedDrawable;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.search.SearchIndexableRaw; import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.users.CreateUserDialogController;
import com.android.settingslib.users.EditUserInfoController; import com.android.settingslib.users.EditUserInfoController;
import com.android.settingslib.users.GrantAdminDialogController; import com.android.settingslib.users.GrantAdminDialogController;
import com.android.settingslib.users.UserCreatingDialog; import com.android.settingslib.users.UserCreatingDialog;
@@ -119,6 +119,7 @@ public class UserSettings extends SettingsPreferenceFragment
/** UserId of the user being removed */ /** UserId of the user being removed */
private static final String SAVE_REMOVING_USER = "removing_user"; private static final String SAVE_REMOVING_USER = "removing_user";
private static final String SAVE_CREATE_USER = "create_user";
private static final String KEY_USER_LIST = "user_list"; private static final String KEY_USER_LIST = "user_list";
private static final String KEY_USER_ME = "user_me"; private static final String KEY_USER_ME = "user_me";
@@ -171,9 +172,6 @@ public class UserSettings extends SettingsPreferenceFragment
static final int RESULT_GUEST_REMOVED = 100; static final int RESULT_GUEST_REMOVED = 100;
private static final String KEY_ADD_USER_LONG_MESSAGE_DISPLAYED =
"key_add_user_long_message_displayed";
private static final String KEY_TITLE = "title"; private static final String KEY_TITLE = "title";
private static final String KEY_SUMMARY = "summary"; private static final String KEY_SUMMARY = "summary";
@@ -222,6 +220,8 @@ public class UserSettings extends SettingsPreferenceFragment
new GrantAdminDialogController(); new GrantAdminDialogController();
private EditUserInfoController mEditUserInfoController = private EditUserInfoController mEditUserInfoController =
new EditUserInfoController(Utils.FILE_PROVIDER_AUTHORITY); new EditUserInfoController(Utils.FILE_PROVIDER_AUTHORITY);
private CreateUserDialogController mCreateUserDialogController =
new CreateUserDialogController(Utils.FILE_PROVIDER_AUTHORITY);
private AddUserWhenLockedPreferenceController mAddUserWhenLockedPreferenceController; private AddUserWhenLockedPreferenceController mAddUserWhenLockedPreferenceController;
private GuestTelephonyPreferenceController mGuestTelephonyPreferenceController; private GuestTelephonyPreferenceController mGuestTelephonyPreferenceController;
private RemoveGuestOnExitPreferenceController mRemoveGuestOnExitPreferenceController; private RemoveGuestOnExitPreferenceController mRemoveGuestOnExitPreferenceController;
@@ -233,7 +233,7 @@ public class UserSettings extends SettingsPreferenceFragment
private CharSequence mPendingUserName; private CharSequence mPendingUserName;
private Drawable mPendingUserIcon; private Drawable mPendingUserIcon;
private boolean mGrantAdmin; private boolean mPendingUserIsAdmin;
// A place to cache the generated default avatar // A place to cache the generated default avatar
private Drawable mDefaultIconDrawable; private Drawable mDefaultIconDrawable;
@@ -348,7 +348,11 @@ public class UserSettings extends SettingsPreferenceFragment
if (icicle.containsKey(SAVE_REMOVING_USER)) { if (icicle.containsKey(SAVE_REMOVING_USER)) {
mRemovingUserId = icicle.getInt(SAVE_REMOVING_USER); mRemovingUserId = icicle.getInt(SAVE_REMOVING_USER);
} }
mEditUserInfoController.onRestoreInstanceState(icicle); if (icicle.containsKey(SAVE_CREATE_USER)) {
mCreateUserDialogController.onRestoreInstanceState(icicle);
} else {
mEditUserInfoController.onRestoreInstanceState(icicle);
}
} }
mUserCaps = UserCapabilities.create(activity); mUserCaps = UserCapabilities.create(activity);
@@ -440,7 +444,12 @@ public class UserSettings extends SettingsPreferenceFragment
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
mEditUserInfoController.onSaveInstanceState(outState); if (mCreateUserDialogController.isActive()) {
outState.putBoolean(SAVE_CREATE_USER, mCreateUserDialogController.isActive());
mCreateUserDialogController.onSaveInstanceState(outState);
} else {
mEditUserInfoController.onSaveInstanceState(outState);
}
outState.putInt(SAVE_REMOVING_USER, mRemovingUserId); outState.putInt(SAVE_REMOVING_USER, mRemovingUserId);
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
} }
@@ -448,6 +457,7 @@ public class UserSettings extends SettingsPreferenceFragment
@Override @Override
public void startActivityForResult(Intent intent, int requestCode) { public void startActivityForResult(Intent intent, int requestCode) {
mEditUserInfoController.startingActivityForResult(); mEditUserInfoController.startingActivityForResult();
mCreateUserDialogController.startingActivityForResult();
super.startActivityForResult(intent, requestCode); super.startActivityForResult(intent, requestCode);
} }
@@ -562,6 +572,7 @@ public class UserSettings extends SettingsPreferenceFragment
&& resultCode == RESULT_GUEST_REMOVED) { && resultCode == RESULT_GUEST_REMOVED) {
scheduleGuestCreation(); scheduleGuestCreation();
} else { } else {
mCreateUserDialogController.onActivityResult(requestCode, resultCode, data);
mEditUserInfoController.onActivityResult(requestCode, resultCode, data); mEditUserInfoController.onActivityResult(requestCode, resultCode, data);
} }
} }
@@ -704,37 +715,12 @@ public class UserSettings extends SettingsPreferenceFragment
.setPositiveButton(android.R.string.ok, null) .setPositiveButton(android.R.string.ok, null)
.create(); .create();
case DIALOG_ADD_USER: { case DIALOG_ADD_USER: {
final SharedPreferences preferences = getActivity().getPreferences( synchronized (mUserLock) {
Context.MODE_PRIVATE); mPendingUserName = getString(
final boolean longMessageDisplayed = preferences.getBoolean( com.android.settingslib.R.string.user_new_user_name);
KEY_ADD_USER_LONG_MESSAGE_DISPLAYED, false); mPendingUserIcon = null;
final int messageResId = longMessageDisplayed }
? com.android.settingslib.R.string.user_add_user_message_short return buildAddUserDialog(USER_TYPE_USER);
: com.android.settingslib.R.string.user_add_user_message_long;
Dialog dlg = new AlertDialog.Builder(context)
.setTitle(com.android.settingslib.R.string.user_add_user_title)
.setMessage(messageResId)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (!longMessageDisplayed) {
preferences.edit().putBoolean(
KEY_ADD_USER_LONG_MESSAGE_DISPLAYED,
true).apply();
}
if (UserManager.isMultipleAdminEnabled()) {
showDialog(DIALOG_GRANT_ADMIN);
} else {
showDialog(DIALOG_USER_PROFILE_EDITOR_ADD_USER);
}
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
return dlg;
}
case DIALOG_GRANT_ADMIN: {
return buildGrantAdminDialog();
} }
case DIALOG_CHOOSE_USER_TYPE: { case DIALOG_CHOOSE_USER_TYPE: {
List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>(); List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
@@ -919,17 +905,14 @@ public class UserSettings extends SettingsPreferenceFragment
private Dialog buildAddUserDialog(int userType) { private Dialog buildAddUserDialog(int userType) {
Dialog d; Dialog d;
synchronized (mUserLock) { synchronized (mUserLock) {
d = mEditUserInfoController.createDialog( d = mCreateUserDialogController.createDialog(
getActivity(), getActivity(),
this::startActivityForResult, this::startActivityForResult,
null, UserManager.isMultipleAdminEnabled(),
mPendingUserName.toString(), (userName, userIcon, isAdmin) -> {
getString(userType == USER_TYPE_USER
? com.android.settingslib.R.string.user_info_settings_title
: com.android.settingslib.R.string.profile_info_settings_title),
(userName, userIcon) -> {
mPendingUserIcon = userIcon; mPendingUserIcon = userIcon;
mPendingUserName = userName; mPendingUserName = userName;
mPendingUserIsAdmin = isAdmin;
addUserNow(userType); addUserNow(userType);
}, },
() -> { () -> {
@@ -943,26 +926,6 @@ public class UserSettings extends SettingsPreferenceFragment
return d; return d;
} }
private Dialog buildGrantAdminDialog() {
return mGrantAdminDialogController.createDialog(
getActivity(),
(grantAdmin) -> {
mGrantAdmin = grantAdmin;
if (mGrantAdmin) {
mMetricsFeatureProvider.action(getActivity(),
SettingsEnums.ACTION_GRANT_ADMIN_FROM_SETTINGS_CREATION_DIALOG);
} else {
mMetricsFeatureProvider.action(getActivity(),
SettingsEnums.ACTION_NOT_GRANT_ADMIN_FROM_SETTINGS_CREATION_DIALOG);
}
showDialog(DIALOG_USER_PROFILE_EDITOR_ADD_USER);
},
() -> {
mGrantAdmin = false;
}
);
}
@Override @Override
public int getDialogMetricsCategory(int dialogId) { public int getDialogMetricsCategory(int dialogId) {
switch (dialogId) { switch (dialogId) {
@@ -1065,7 +1028,7 @@ public class UserSettings extends SettingsPreferenceFragment
userName, userName,
mUserManager.USER_TYPE_FULL_SECONDARY, mUserManager.USER_TYPE_FULL_SECONDARY,
0); 0);
if (mGrantAdmin) { if (mPendingUserIsAdmin) {
mUserManager.setUserAdmin(user.id); mUserManager.setUserAdmin(user.id);
} }
} else { } else {
@@ -1665,6 +1628,9 @@ public class UserSettings extends SettingsPreferenceFragment
synchronized (mUserLock) { synchronized (mUserLock) {
mRemovingUserId = -1; mRemovingUserId = -1;
updateUserList(); updateUserList();
if (mCreateUserDialogController.isActive()) {
mCreateUserDialogController.clear();
}
} }
} }