Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 495fe0fd authored by Mayank Garg's avatar Mayank Garg Committed by Automerger Merge Worker
Browse files

Merge "Improved error code for Remove Result" into tm-dev am: e8688b53

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17024812

Change-Id: Ifad652864998f4c2fcac8370dd572415bdfc249e
parents 4708af6c e8688b53
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -9791,6 +9791,7 @@ package android.os {
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.QUERY_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isManagedProfile(int);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isMediaSharedWithParent();
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isPrimaryUser();
    method public static boolean isRemoveResultSuccessful(int);
    method public boolean isRestrictedProfile();
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public boolean isRestrictedProfile(@NonNull android.os.UserHandle);
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle);
@@ -9808,7 +9809,10 @@ package android.os {
    field public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background";
    field public static final int REMOVE_RESULT_ALREADY_BEING_REMOVED = 2; // 0x2
    field public static final int REMOVE_RESULT_DEFERRED = 1; // 0x1
    field public static final int REMOVE_RESULT_ERROR = 3; // 0x3
    field public static final int REMOVE_RESULT_ERROR_SYSTEM_USER = -4; // 0xfffffffc
    field public static final int REMOVE_RESULT_ERROR_UNKNOWN = -1; // 0xffffffff
    field public static final int REMOVE_RESULT_ERROR_USER_NOT_FOUND = -3; // 0xfffffffd
    field public static final int REMOVE_RESULT_ERROR_USER_RESTRICTION = -2; // 0xfffffffe
    field public static final int REMOVE_RESULT_REMOVED = 0; // 0x0
    field public static final int RESTRICTION_NOT_SET = 0; // 0x0
    field public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 2; // 0x2
+51 −5
Original line number Diff line number Diff line
@@ -1703,12 +1703,40 @@ public class UserManager {

    /**
     * A response code from {@link #removeUserWhenPossible(UserHandle, boolean)} indicating that
     * an error occurred that prevented the user from being removed or set as ephemeral.
     * an unknown error occurred that prevented the user from being removed or set as ephemeral.
     *
     * @hide
     */
    @SystemApi
    public static final int REMOVE_RESULT_ERROR = 3;
    public static final int REMOVE_RESULT_ERROR_UNKNOWN = -1;

    /**
     * A response code from {@link #removeUserWhenPossible(UserHandle, boolean)} indicating that
     * the user could not be removed due to a {@link #DISALLOW_REMOVE_MANAGED_PROFILE} or
     * {@link #DISALLOW_REMOVE_USER} user restriction.
     *
     * @hide
     */
    @SystemApi
    public static final int REMOVE_RESULT_ERROR_USER_RESTRICTION = -2;

    /**
     * A response code from {@link #removeUserWhenPossible(UserHandle, boolean)} indicating that
     * user being removed does not exist.
     *
     * @hide
     */
    @SystemApi
    public static final int REMOVE_RESULT_ERROR_USER_NOT_FOUND = -3;

    /**
     * A response code from {@link #removeUserWhenPossible(UserHandle, boolean)} indicating that
     * user being removed is a {@link UserHandle#SYSTEM} user which can't be removed.
     *
     * @hide
     */
    @SystemApi
    public static final int REMOVE_RESULT_ERROR_SYSTEM_USER = -4;

    /**
     * Possible response codes from {@link #removeUserWhenPossible(UserHandle, boolean)}.
@@ -1719,7 +1747,10 @@ public class UserManager {
            REMOVE_RESULT_REMOVED,
            REMOVE_RESULT_DEFERRED,
            REMOVE_RESULT_ALREADY_BEING_REMOVED,
            REMOVE_RESULT_ERROR,
            REMOVE_RESULT_ERROR_USER_RESTRICTION,
            REMOVE_RESULT_ERROR_USER_NOT_FOUND,
            REMOVE_RESULT_ERROR_SYSTEM_USER,
            REMOVE_RESULT_ERROR_UNKNOWN,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface RemoveResult {}
@@ -4846,8 +4877,10 @@ public class UserManager {
     * the {@link #DISALLOW_REMOVE_USER} or {@link #DISALLOW_REMOVE_MANAGED_PROFILE} restriction
     *
     * @return the {@link RemoveResult} code: {@link #REMOVE_RESULT_REMOVED},
     * {@link #REMOVE_RESULT_DEFERRED}, {@link #REMOVE_RESULT_ALREADY_BEING_REMOVED}, or
     * {@link #REMOVE_RESULT_ERROR}.
     * {@link #REMOVE_RESULT_DEFERRED}, {@link #REMOVE_RESULT_ALREADY_BEING_REMOVED},
     * {@link #REMOVE_RESULT_ERROR_USER_RESTRICTION}, {@link #REMOVE_RESULT_ERROR_USER_NOT_FOUND},
     * {@link #REMOVE_RESULT_ERROR_SYSTEM_USER}, or {@link #REMOVE_RESULT_ERROR_UNKNOWN}. All error
     * codes have negative values.
     *
     * @hide
     */
@@ -4863,6 +4896,19 @@ public class UserManager {
        }
    }

    /**
     * Check if {@link #removeUserWhenPossible} returned a success code which means that the user
     * has been removed or is slated for removal.
     *
     * @param result is {@link #RemoveResult} code return by {@link #removeUserWhenPossible}.
     * @return {@code true} if it is a success code.
     * @hide
     */
    @SystemApi
    public static boolean isRemoveResultSuccessful(@RemoveResult int result) {
        return result >= 0;
    }

    /**
     * Updates the user's name.
     *
+1 −1
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ public class MasterClearReceiver extends BroadcastReceiver {
        final UserManager userManager = context.getSystemService(UserManager.class);
        final int result = userManager.removeUserWhenPossible(
                UserHandle.of(userId), /* overrideDevicePolicy= */ false);
        if (result == UserManager.REMOVE_RESULT_ERROR) {
        if (!UserManager.isRemoveResultSuccessful(result)) {
            Slogf.e(TAG, "Can't remove user %d", userId);
            return false;
        }
+3 −3
Original line number Diff line number Diff line
@@ -4638,12 +4638,12 @@ public class UserManagerService extends IUserManager.Stub {
            final String restriction = getUserRemovalRestriction(userId);
            if (getUserRestrictions(UserHandle.getCallingUserId()).getBoolean(restriction, false)) {
                Slog.w(LOG_TAG, "Cannot remove user. " + restriction + " is enabled.");
                return UserManager.REMOVE_RESULT_ERROR;
                return UserManager.REMOVE_RESULT_ERROR_USER_RESTRICTION;
            }
        }
        if (userId == UserHandle.USER_SYSTEM) {
            Slog.e(LOG_TAG, "System user cannot be removed.");
            return UserManager.REMOVE_RESULT_ERROR;
            return UserManager.REMOVE_RESULT_ERROR_SYSTEM_USER;
        }

        final long ident = Binder.clearCallingIdentity();
@@ -4655,7 +4655,7 @@ public class UserManagerService extends IUserManager.Stub {
                    if (userData == null) {
                        Slog.e(LOG_TAG,
                                "Cannot remove user " + userId + ", invalid user id provided.");
                        return UserManager.REMOVE_RESULT_ERROR;
                        return UserManager.REMOVE_RESULT_ERROR_USER_NOT_FOUND;
                    }

                    if (mRemovingUserIds.get(userId)) {
+6 −3
Original line number Diff line number Diff line
@@ -316,7 +316,8 @@ public final class UserManagerTest {
                asHandle(currentUser));
        try {
            assertThat(mUserManager.removeUserWhenPossible(user1.getUserHandle(),
                    /* overrideDevicePolicy= */ false)).isEqualTo(UserManager.REMOVE_RESULT_ERROR);
                    /* overrideDevicePolicy= */ false))
                            .isEqualTo(UserManager.REMOVE_RESULT_ERROR_USER_RESTRICTION);
        } finally {
            mUserManager.setUserRestriction(UserManager.DISALLOW_REMOVE_USER, /* value= */ false,
                    asHandle(currentUser));
@@ -353,7 +354,8 @@ public final class UserManagerTest {
    @Test
    public void testRemoveUserWhenPossible_systemUserReturnsError() throws Exception {
        assertThat(mUserManager.removeUserWhenPossible(UserHandle.SYSTEM,
                /* overrideDevicePolicy= */ false)).isEqualTo(UserManager.REMOVE_RESULT_ERROR);
                /* overrideDevicePolicy= */ false))
                        .isEqualTo(UserManager.REMOVE_RESULT_ERROR_SYSTEM_USER);

        assertThat(hasUser(UserHandle.USER_SYSTEM)).isTrue();
    }
@@ -363,7 +365,8 @@ public final class UserManagerTest {
    public void testRemoveUserWhenPossible_invalidUserReturnsError() throws Exception {
        assertThat(hasUser(Integer.MAX_VALUE)).isFalse();
        assertThat(mUserManager.removeUserWhenPossible(UserHandle.of(Integer.MAX_VALUE),
                /* overrideDevicePolicy= */ false)).isEqualTo(UserManager.REMOVE_RESULT_ERROR);
                /* overrideDevicePolicy= */ false))
                        .isEqualTo(UserManager.REMOVE_RESULT_ERROR_USER_NOT_FOUND);
    }

    @MediumTest