Merge "Put "Add user" dialog within activity to capture focus" into main

This commit is contained in:
Tetiana Meronyk
2025-02-19 07:48:32 -08:00
committed by Android (Google) Code Review
2 changed files with 44 additions and 8 deletions

View File

@@ -52,6 +52,7 @@ import com.android.settings.privatespace.PrivateSpaceSetupActivity;
import com.android.settings.privatespace.delete.PrivateSpaceDeleteActivity; import com.android.settings.privatespace.delete.PrivateSpaceDeleteActivity;
import com.android.settings.remoteauth.RemoteAuthActivity; import com.android.settings.remoteauth.RemoteAuthActivity;
import com.android.settings.remoteauth.RemoteAuthActivityInternal; import com.android.settings.remoteauth.RemoteAuthActivityInternal;
import com.android.settingslib.users.CreateUserActivity;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
@@ -278,6 +279,10 @@ public class ActivityEmbeddingRulesController {
String action = mContext.getString(R.string.config_avatar_picker_action); String action = mContext.getString(R.string.config_avatar_picker_action);
addActivityFilter(activityFilters, new Intent(action)); addActivityFilter(activityFilters, new Intent(action));
if (android.multiuser.Flags.placeAddUserDialogWithinActivity()) {
addActivityFilter(activityFilters, CreateUserActivity.class);
}
ActivityRule activityRule = new ActivityRule.Builder(activityFilters).setAlwaysExpand(true) ActivityRule activityRule = new ActivityRule.Builder(activityFilters).setAlwaysExpand(true)
.build(); .build();
mRuleController.addRule(activityRule); mRuleController.addRule(activityRule);

View File

@@ -18,6 +18,9 @@ package com.android.settings.users;
import static com.android.settingslib.Utils.getColorAttrDefaultColor; import static com.android.settingslib.Utils.getColorAttrDefaultColor;
import android.Manifest;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.Activity; import android.app.Activity;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.Dialog; import android.app.Dialog;
@@ -83,6 +86,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.CreateUserActivity;
import com.android.settingslib.users.CreateUserDialogController; 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;
@@ -91,6 +95,7 @@ import com.android.settingslib.utils.ThreadUtils;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
@@ -171,6 +176,7 @@ public class UserSettings extends SettingsPreferenceFragment
private static final int REQUEST_CHOOSE_LOCK = 10; private static final int REQUEST_CHOOSE_LOCK = 10;
private static final int REQUEST_EDIT_GUEST = 11; private static final int REQUEST_EDIT_GUEST = 11;
private static final int REQUEST_ADD_USER = 12;
static final int RESULT_GUEST_REMOVED = 100; static final int RESULT_GUEST_REMOVED = 100;
@@ -234,6 +240,8 @@ public class UserSettings extends SettingsPreferenceFragment
private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
private CharSequence mPendingUserName; private CharSequence mPendingUserName;
@Nullable
private String mPendingUserIconPath;
private Drawable mPendingUserIcon; private Drawable mPendingUserIcon;
private boolean mPendingUserIsAdmin; private boolean mPendingUserIsAdmin;
@@ -570,6 +578,14 @@ public class UserSettings extends SettingsPreferenceFragment
if (resultCode != Activity.RESULT_CANCELED && hasLockscreenSecurity()) { if (resultCode != Activity.RESULT_CANCELED && hasLockscreenSecurity()) {
addUserNow(USER_TYPE_RESTRICTED_PROFILE); addUserNow(USER_TYPE_RESTRICTED_PROFILE);
} }
} else if (Flags.placeAddUserDialogWithinActivity() && requestCode == REQUEST_ADD_USER) {
if (resultCode == Activity.RESULT_OK) {
mPendingUserName = data.getStringExtra(CreateUserActivity.EXTRA_USER_NAME);
mPendingUserIsAdmin = data.getBooleanExtra(CreateUserActivity.EXTRA_IS_ADMIN,
false);
mPendingUserIconPath = data.getStringExtra(CreateUserActivity.EXTRA_USER_ICON_PATH);
addUserNow(USER_TYPE_USER);
}
} else if (mGuestUserAutoCreated && requestCode == REQUEST_EDIT_GUEST } else if (mGuestUserAutoCreated && requestCode == REQUEST_EDIT_GUEST
&& resultCode == RESULT_GUEST_REMOVED) { && resultCode == RESULT_GUEST_REMOVED) {
scheduleGuestCreation(); scheduleGuestCreation();
@@ -921,7 +937,7 @@ public class UserSettings extends SettingsPreferenceFragment
getActivity(), getActivity(),
this::startActivityForResult, this::startActivityForResult,
canCreateAdminUser(), canCreateAdminUser(),
(userName, userIcon, isAdmin) -> { (userName, userIcon, iconPath, isAdmin) -> {
mPendingUserIcon = userIcon; mPendingUserIcon = userIcon;
mPendingUserName = userName; mPendingUserName = userName;
mPendingUserIsAdmin = isAdmin; mPendingUserIsAdmin = isAdmin;
@@ -1040,6 +1056,8 @@ public class UserSettings extends SettingsPreferenceFragment
createUser(userType, mAddingUserName); createUser(userType, mAddingUserName);
} }
@RequiresPermission(allOf = {Manifest.permission.MANAGE_USERS,
Manifest.permission.INTERACT_ACROSS_USERS_FULL})
@VisibleForTesting @VisibleForTesting
void createUser(final int userType, String userName) { void createUser(final int userType, String userName) {
Context context = getContext(); Context context = getContext();
@@ -1065,18 +1083,25 @@ public class UserSettings extends SettingsPreferenceFragment
mAddingUser = false; mAddingUser = false;
mPendingUserIcon = null; mPendingUserIcon = null;
mPendingUserName = null; mPendingUserName = null;
mPendingUserIconPath = null;
onUserCreationFailed(); onUserCreationFailed();
return; return;
} }
Future<?> unusedSettingIconFuture = ThreadUtils.postOnBackgroundThread(() -> { Future<?> unusedSettingIconFuture = ThreadUtils.postOnBackgroundThread(() -> {
if (Flags.placeAddUserDialogWithinActivity() && mPendingUserIconPath != null) {
Bitmap bitmap = BitmapFactory.decodeFile(mPendingUserIconPath);
mUserManager.setUserIcon(user.id, bitmap);
new File(mPendingUserIconPath).delete();
mPendingUserIconPath = null;
} else {
Drawable newUserIcon = selectedUserIcon; Drawable newUserIcon = selectedUserIcon;
if (newUserIcon == null) { if (newUserIcon == null) {
newUserIcon = UserIcons.getDefaultUserIcon(resources, user.id, false); newUserIcon = UserIcons.getDefaultUserIcon(resources, user.id, false);
} }
mUserManager.setUserIcon( mUserManager.setUserIcon(user.id, UserIcons.convertToBitmapAtUserIconSize(
user.id, UserIcons.convertToBitmapAtUserIconSize(
resources, newUserIcon)); resources, newUserIcon));
}
}); });
mPendingUserIcon = null; mPendingUserIcon = null;
@@ -1686,9 +1711,15 @@ public class UserSettings extends SettingsPreferenceFragment
// flow for full user. // flow for full user.
if (mUserCaps.mCanAddRestrictedProfile) { if (mUserCaps.mCanAddRestrictedProfile) {
showDialog(DIALOG_CHOOSE_USER_TYPE); showDialog(DIALOG_CHOOSE_USER_TYPE);
} else {
if (Flags.placeAddUserDialogWithinActivity()) {
startActivityForResult(CreateUserActivity.createIntentForStart(getActivity(),
canCreateAdminUser(), Utils.FILE_PROVIDER_AUTHORITY),
REQUEST_ADD_USER);
} else { } else {
onAddUserClicked(USER_TYPE_USER); onAddUserClicked(USER_TYPE_USER);
} }
}
return true; return true;
} else if (pref == mAddSupervisedUser) { } else if (pref == mAddSupervisedUser) {
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_SUPERVISED_ADD); mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_SUPERVISED_ADD);