Merge "Restrict admin status change when DISALLOW_GRANT_ADMIN is present" into main
This commit is contained in:
@@ -370,11 +370,18 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
mSwitchUserPref.setOnPreferenceClickListener(this);
|
mSwitchUserPref.setOnPreferenceClickListener(this);
|
||||||
}
|
}
|
||||||
if (mUserInfo.isMain() || mUserInfo.isGuest() || !UserManager.isMultipleAdminEnabled()
|
if (android.multiuser.Flags.unicornModeRefactoringForHsumReadOnly()) {
|
||||||
|| mUserManager.hasUserRestrictionForUser(UserManager.DISALLOW_GRANT_ADMIN,
|
if (isChangingAdminStatusRestricted()) {
|
||||||
mUserInfo.getUserHandle()) || !mUserManager.isAdminUser()) {
|
removePreference(KEY_GRANT_ADMIN);
|
||||||
removePreference(KEY_GRANT_ADMIN);
|
}
|
||||||
|
} else {
|
||||||
|
if (mUserInfo.isMain() || mUserInfo.isGuest() || !UserManager.isMultipleAdminEnabled()
|
||||||
|
|| mUserManager.hasUserRestrictionForUser(UserManager.DISALLOW_GRANT_ADMIN,
|
||||||
|
mUserInfo.getUserHandle()) || !mUserManager.isAdminUser()) {
|
||||||
|
removePreference(KEY_GRANT_ADMIN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mUserManager.isAdminUser()) { // non admin users can't remove users and allow calls
|
if (!mUserManager.isAdminUser()) { // non admin users can't remove users and allow calls
|
||||||
removePreference(KEY_ENABLE_TELEPHONY);
|
removePreference(KEY_ENABLE_TELEPHONY);
|
||||||
removePreference(KEY_REMOVE_USER);
|
removePreference(KEY_REMOVE_USER);
|
||||||
@@ -552,4 +559,33 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
|
|||||||
// return true so there will be no setup prompt dialog shown to the user anymore.
|
// return true so there will be no setup prompt dialog shown to the user anymore.
|
||||||
return isSecondaryUser(mUserInfo) && !mUserInfo.isInitialized();
|
return isSecondaryUser(mUserInfo) && !mUserInfo.isInitialized();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if changing admin status is restricted.
|
||||||
|
*
|
||||||
|
* <p>Admin status change is restricted under the following conditions of current & target user.
|
||||||
|
*
|
||||||
|
* <ul>
|
||||||
|
* <li>The <b>current</b> user is NOT an admin user.</li>
|
||||||
|
* <li>OR multiple admin support is NOT enabled.</li>
|
||||||
|
* <li>OR the <b>current</b> user has DISALLOW_GRANT_ADMIN restriction applied</li>
|
||||||
|
*
|
||||||
|
* <li>OR the <b>target</b> user ('mUserInfo') is a main user OR a guest user.</li>
|
||||||
|
* <li>OR the <b>target</b> user ('mUserInfo') has DISALLOW_GRANT_ADMIN restriction.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @return true if changing admin status is restricted, false otherwise
|
||||||
|
*/
|
||||||
|
private boolean isChangingAdminStatusRestricted() {
|
||||||
|
boolean currentUserRestricted = !mUserManager.isAdminUser()
|
||||||
|
|| !UserManager.isMultipleAdminEnabled()
|
||||||
|
|| mUserManager.hasUserRestriction(UserManager.DISALLOW_GRANT_ADMIN);
|
||||||
|
|
||||||
|
boolean targetUserRestricted = mUserInfo.isMain()
|
||||||
|
|| mUserInfo.isGuest()
|
||||||
|
|| mUserManager.hasUserRestrictionForUser(UserManager.DISALLOW_GRANT_ADMIN,
|
||||||
|
mUserInfo.getUserHandle());
|
||||||
|
|
||||||
|
return currentUserRestricted || targetUserRestricted;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -729,12 +729,25 @@ public class UserDetailsSettingsTest {
|
|||||||
public void initialize_restrictUserSelected_shouldNotShowGrantAdminPref_MultipleAdminEnabled() {
|
public void initialize_restrictUserSelected_shouldNotShowGrantAdminPref_MultipleAdminEnabled() {
|
||||||
setupSelectedUser();
|
setupSelectedUser();
|
||||||
ShadowUserManager.setIsMultipleAdminEnabled(true);
|
ShadowUserManager.setIsMultipleAdminEnabled(true);
|
||||||
|
// target user has DISALLOW_GRANT_ADMIN restriction
|
||||||
mUserManager.setUserRestriction(mUserInfo.getUserHandle(),
|
mUserManager.setUserRestriction(mUserInfo.getUserHandle(),
|
||||||
UserManager.DISALLOW_GRANT_ADMIN, true);
|
UserManager.DISALLOW_GRANT_ADMIN, true);
|
||||||
mFragment.initialize(mActivity, mArguments);
|
mFragment.initialize(mActivity, mArguments);
|
||||||
verify(mFragment).removePreference(KEY_GRANT_ADMIN);
|
verify(mFragment).removePreference(KEY_GRANT_ADMIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_UNICORN_MODE_REFACTORING_FOR_HSUM_READ_ONLY)
|
||||||
|
public void initialize_currentUserRestrict_shouldNotShowGrantAdminPref_MultipleAdminEnabled() {
|
||||||
|
setupSelectedUser();
|
||||||
|
ShadowUserManager.setIsMultipleAdminEnabled(true);
|
||||||
|
// current user has DISALLOW_GRANT_ADMIN restriction
|
||||||
|
mUserManager.setUserRestriction(mContext.getUser(),
|
||||||
|
UserManager.DISALLOW_GRANT_ADMIN, true);
|
||||||
|
mFragment.initialize(mActivity, mArguments);
|
||||||
|
verify(mFragment).removePreference(KEY_GRANT_ADMIN);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initialize_mainUserSelected_shouldShowGrantAdminPref_MultipleAdminEnabled() {
|
public void initialize_mainUserSelected_shouldShowGrantAdminPref_MultipleAdminEnabled() {
|
||||||
setupSelectedMainUser();
|
setupSelectedMainUser();
|
||||||
|
Reference in New Issue
Block a user