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

Commit 940e8577 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Added SystemApi for getting serial numbers of users

Also added UserHandle version of queryBroadcastReceiversAsUser.

Bug: 25844894
Change-Id: I78ecbef186e4ced10425ae2899db72c2d91c5792
parent 9068fd38
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -9942,6 +9942,7 @@ package android.content.pm {
    method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
    method public abstract boolean isSafeMode();
    method public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
    method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceiversAsUser(android.content.Intent, int, android.os.UserHandle);
    method public abstract java.util.List<android.content.pm.ProviderInfo> queryContentProviders(java.lang.String, int, int);
    method public abstract java.util.List<android.content.pm.InstrumentationInfo> queryInstrumentation(java.lang.String, int);
    method public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentActivities(android.content.Intent, int);
@@ -30773,6 +30774,7 @@ package android.os {
    method public deprecated boolean isOwner();
    method public boolean isSystem();
    method public static int myUserId();
    method public static android.os.UserHandle of(int);
    method public static android.os.UserHandle readFromParcel(android.os.Parcel);
    method public void writeToParcel(android.os.Parcel, int);
    method public static void writeToParcel(android.os.UserHandle, android.os.Parcel);
@@ -30787,6 +30789,7 @@ package android.os {
    method public android.os.PersistableBundle getSeedAccountOptions();
    method public java.lang.String getSeedAccountType();
    method public long getSerialNumberForUser(android.os.UserHandle);
    method public long[] getSerialNumbersOfUsers(boolean);
    method public int getUserCount();
    method public long getUserCreationTime(android.os.UserHandle);
    method public android.os.UserHandle getUserForSerialNumber(long);
+11 −1
Original line number Diff line number Diff line
@@ -3627,7 +3627,7 @@ public abstract class PackageManager {
     *         {@link #MATCH_ENCRYPTION_AWARE_AND_UNAWARE}, {@link #MATCH_ENCRYPTION_UNAWARE},
     *         {@link #MATCH_SYSTEM_ONLY}, {@link #MATCH_UNINSTALLED_PACKAGES}
     *         to modify the data returned.
     * @param userId The userId of the user being queried.
     * @param userHandle UserHandle of the user being queried.
     *
     * @return Returns a List of ResolveInfo objects containing one entry for each
     *         matching receiver, ordered from best to worst. If there are no matching
@@ -3648,9 +3648,19 @@ public abstract class PackageManager {
     *
     * @hide
     */
    @SystemApi
    public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
            @ResolveInfoFlags int flags, UserHandle userHandle) {
        return queryBroadcastReceiversAsUser(intent, flags, userHandle.getIdentifier());
    }

    /**
     * @hide
     */
    public abstract List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent,
            @ResolveInfoFlags int flags, @UserIdInt int userId);


    /** {@hide} */
    @Deprecated
    public List<ResolveInfo> queryBroadcastReceivers(Intent intent,
+1 −0
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@ public final class UserHandle implements Parcelable {
    }

    /** @hide */
    @SystemApi
    public static UserHandle of(@UserIdInt int userId) {
        return userId == USER_SYSTEM ? SYSTEM : new UserHandle(userId);
    }
+24 −1
Original line number Diff line number Diff line
@@ -1362,7 +1362,7 @@ public class UserManager {
    /**
     * Returns information for all users on this device.
     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
     * @return the list of users that were created.
     * @return the list of users that exist on the device.
     * @hide
     */
    public List<UserInfo> getUsers() {
@@ -1374,6 +1374,29 @@ public class UserManager {
        }
    }

    /**
     * Returns serial numbers of all users on this device.
     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
     *
     * @param excludeDying specify if the list should exclude users being removed.
     * @return the list of serial numbers of users that exist on the device.
     * @hide
     */
    @SystemApi
    public long[] getSerialNumbersOfUsers(boolean excludeDying) {
        try {
            List<UserInfo> users = mService.getUsers(excludeDying);
            long[] result = new long[users.size()];
            for (int i = 0; i < result.length; i++) {
                result[i] = users.get(i).serialNumber;
            }
            return result;
        } catch (RemoteException re) {
            Log.w(TAG, "Could not get users list", re);
            return null;
        }
    }

    /**
     * @return the user's account name, null if not found.
     * @hide
+14 −0
Original line number Diff line number Diff line
@@ -26,7 +26,10 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.test.AndroidTestCase;

import com.android.internal.util.ArrayUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/** Test {@link UserManager} functionality. */
@@ -196,6 +199,17 @@ public class UserManagerTest extends AndroidTestCase {
        assertEquals(user2.id, mUserManager.getUserHandle(serialNumber2));
    }

    public void testGetSerialNumbersOfUsers() {
        UserInfo user1 = createUser("User 1", 0);
        UserInfo user2 = createUser("User 2", 0);
        long[] serialNumbersOfUsers = mUserManager.getSerialNumbersOfUsers(false);
        String errMsg = "Array " + Arrays.toString(serialNumbersOfUsers) + " should contain ";
        assertTrue(errMsg + user1.serialNumber,
                ArrayUtils.contains(serialNumbersOfUsers, user1.serialNumber));
        assertTrue(errMsg + user2.serialNumber,
                ArrayUtils.contains(serialNumbersOfUsers, user2.serialNumber));
    }

    public void testMaxUsers() {
        int N = UserManager.getMaxSupportedUsers();
        int count = mUserManager.getUsers().size();