Add settings entrypoint to add a supervised user

Bug: 205101183
Bug: 199868785
Test: croot && make RunSettingsRoboTests -j40 ROBOTEST_FILTER="com.android.settings.users.UserSettingsTest"
Change-Id: Ie69786c81ec938f4c4108d7fc9c0874776331865
This commit is contained in:
Yasin Kilicdere
2021-11-05 17:34:59 +00:00
parent 4f5f174a5e
commit 2a37149ec5
3 changed files with 94 additions and 10 deletions

View File

@@ -115,6 +115,7 @@ public class UserSettings extends SettingsPreferenceFragment
private static final String KEY_USER_GUEST = "user_guest";
private static final String KEY_ADD_GUEST = "guest_add";
private static final String KEY_ADD_USER = "user_add";
private static final String KEY_ADD_SUPERVISED_USER = "supervised_user_add";
private static final String KEY_ADD_USER_WHEN_LOCKED = "user_settings_add_users_when_locked";
private static final String KEY_MULTIUSER_TOP_INTRO = "multiuser_top_intro";
@@ -165,10 +166,13 @@ public class UserSettings extends SettingsPreferenceFragment
@VisibleForTesting
RestrictedPreference mAddUser;
@VisibleForTesting
RestrictedPreference mAddSupervisedUser;
@VisibleForTesting
SparseArray<Bitmap> mUserIcons = new SparseArray<>();
private int mRemovingUserId = -1;
private boolean mAddingUser;
private boolean mGuestUserAutoCreated;
private String mConfigSupervisedUserCreationPackage;
private String mAddingUserName;
private UserCapabilities mUserCaps;
private boolean mShouldUpdateUserList = true;
@@ -300,6 +304,10 @@ public class UserSettings extends SettingsPreferenceFragment
}
mAddUser.setOnPreferenceClickListener(this);
setConfigSupervisedUserCreationPackage();
mAddSupervisedUser = findPreference(KEY_ADD_SUPERVISED_USER);
mAddSupervisedUser.setOnPreferenceClickListener(this);
activity.registerReceiverAsUser(
mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler);
@@ -491,6 +499,14 @@ public class UserSettings extends SettingsPreferenceFragment
}
}
private void onAddSupervisedUserClicked() {
final Intent intent = new Intent()
.setAction(UserManager.ACTION_CREATE_SUPERVISED_USER)
.setPackage(mConfigSupervisedUserCreationPackage);
startActivity(intent);
}
private void onRemoveUserClicked(int userId) {
synchronized (mUserLock) {
if (mRemovingUserId == -1 && !mAddingUser) {
@@ -1058,6 +1074,7 @@ public class UserSettings extends SettingsPreferenceFragment
updateAddGuest(context, users.stream().anyMatch(UserInfo::isGuest));
updateAddUser(context);
updateAddSupervisedUser(context);
if (!mUserCaps.mUserSwitcherEnabled) {
return;
@@ -1070,6 +1087,12 @@ public class UserSettings extends SettingsPreferenceFragment
}
@VisibleForTesting
void setConfigSupervisedUserCreationPackage() {
mConfigSupervisedUserCreationPackage = getPrefContext().getString(
com.android.internal.R.string.config_supervisedUserCreationPackage);
}
private boolean isCurrentUserGuest() {
return mUserCaps.mIsGuest;
}
@@ -1100,28 +1123,41 @@ public class UserSettings extends SettingsPreferenceFragment
}
private void updateAddUser(Context context) {
updateAddUserCommon(context, mAddUser, mUserCaps.mCanAddRestrictedProfile);
}
private void updateAddSupervisedUser(Context context) {
if (!TextUtils.isEmpty(mConfigSupervisedUserCreationPackage)) {
updateAddUserCommon(context, mAddSupervisedUser, false);
} else {
mAddSupervisedUser.setVisible(false);
}
}
private void updateAddUserCommon(Context context, RestrictedPreference addUser,
boolean canAddRestrictedProfile) {
if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
&& WizardManagerHelper.isDeviceProvisioned(context)
&& mUserCaps.mUserSwitcherEnabled) {
mAddUser.setVisible(true);
mAddUser.setSelectable(true);
addUser.setVisible(true);
addUser.setSelectable(true);
final boolean canAddMoreUsers =
mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_SECONDARY)
|| (mUserCaps.mCanAddRestrictedProfile
|| (canAddRestrictedProfile
&& mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_RESTRICTED));
mAddUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow());
addUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow());
if (!canAddMoreUsers) {
mAddUser.setSummary(
addUser.setSummary(
getString(R.string.user_add_max_count, getRealUsersCount()));
} else {
mAddUser.setSummary(null);
addUser.setSummary(null);
}
if (mAddUser.isEnabled()) {
mAddUser.setDisabledByAdmin(
if (addUser.isEnabled()) {
addUser.setDisabledByAdmin(
mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
}
} else {
mAddUser.setVisible(false);
addUser.setVisible(false);
}
}
@@ -1206,6 +1242,9 @@ public class UserSettings extends SettingsPreferenceFragment
onAddUserClicked(USER_TYPE_USER);
}
return true;
} else if (pref == mAddSupervisedUser) {
onAddSupervisedUserClicked();
return true;
} else if (pref == mAddGuest) {
mAddGuest.setEnabled(false); // prevent multiple tap issue
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_GUEST_ADD);