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

Commit 7fd46c5c authored by Joel Galenson's avatar Joel Galenson
Browse files

Allow loading only a subset of permission groups.

This speeds up the ongoing usage dialog, which only needs three
permission groups.

Test: Open ongoing usage dialog and Permissions Hub.
Change-Id: I5b62cc834b8ac39194e8080d1107b0079d1ebfd8
parent 31c58cbb
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -156,14 +156,14 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
     * @param isCanceled callback checked if the group resolution should be aborted
     * @param getAppUiInfo If the UI info for apps should be updated
     * @param getNonPlatformPermissions If we should get non-platform permission groups
     * @param groupName Optional group to filter for.
     * @param groupNames Optional groups to filter for.
     * @param packageName Optional package to filter for.
     *
     * @return the list of all groups int the system
     */
    public static @NonNull List<PermissionGroup> getPermissionGroups(@NonNull Context context,
            @Nullable Supplier<Boolean> isCanceled, boolean getAppUiInfo,
            boolean getNonPlatformPermissions, @Nullable String groupName,
            boolean getNonPlatformPermissions, @Nullable String[] groupNames,
            @Nullable String packageName) {
        PermissionApps.PmCache pmCache = new PermissionApps.PmCache(
                context.getPackageManager());
@@ -174,7 +174,7 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
        Set<String> seenPermissions = new ArraySet<>();

        PackageManager packageManager = context.getPackageManager();
        List<PermissionGroupInfo> groupInfos = getPermissionGroupInfos(context, groupName);
        List<PermissionGroupInfo> groupInfos = getPermissionGroupInfos(context, groupNames);

        for (PermissionGroupInfo groupInfo : groupInfos) {
            // Mare sure we respond to cancellation.
@@ -303,15 +303,17 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
    }

    private static @NonNull List<PermissionGroupInfo> getPermissionGroupInfos(
            @NonNull Context context, @Nullable String groupName) {
        if (groupName == null) {
            @NonNull Context context, @Nullable String[] groupNames) {
        if (groupNames == null) {
            return context.getPackageManager().getAllPermissionGroups(0);
        }
        try {
            final List<PermissionGroupInfo> groupInfos = new ArrayList<>(groupNames.length);
            for (int i = 0; i < groupNames.length; i++) {
                final PermissionGroupInfo groupInfo = context.getPackageManager()
                    .getPermissionGroupInfo(groupName, 0);
            final List<PermissionGroupInfo> groupInfos = new ArrayList<>(1);
                        .getPermissionGroupInfo(groupNames[i], 0);
                groupInfos.add(groupInfo);
            }
            return groupInfos;
        } catch (PackageManager.NameNotFoundException e) {
            return Collections.emptyList();
+11 −11
Original line number Diff line number Diff line
@@ -77,18 +77,18 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
        mContext = context;
    }

    public void load(@Nullable String filterPackageName, @Nullable String filterPermissionGroup,
            long filterBeginTimeMillis, long filterEndTimeMillis, int usageFlags,
            @NonNull LoaderManager loaderManager, boolean getUiInfo,
            boolean getNonPlatformPermissions, @NonNull PermissionsUsagesChangeCallback callback,
            boolean sync) {
        load(Process.INVALID_UID, filterPackageName, filterPermissionGroup, filterBeginTimeMillis,
    public void load(@Nullable String filterPackageName,
            @Nullable String[] filterPermissionGroups, long filterBeginTimeMillis,
            long filterEndTimeMillis, int usageFlags, @NonNull LoaderManager loaderManager,
            boolean getUiInfo, boolean getNonPlatformPermissions,
            @NonNull PermissionsUsagesChangeCallback callback, boolean sync) {
        load(Process.INVALID_UID, filterPackageName, filterPermissionGroups, filterBeginTimeMillis,
                filterEndTimeMillis, usageFlags, loaderManager, getUiInfo,
                getNonPlatformPermissions, callback, sync);
    }

    public void load(int filterUid, @Nullable String filterPackageName,
            @Nullable String filterPermissionGroup, long filterBeginTimeMillis,
            @Nullable String[] filterPermissionGroups, long filterBeginTimeMillis,
            long filterEndTimeMillis, int usageFlags, @NonNull LoaderManager loaderManager,
            boolean getUiInfo, boolean getNonPlatformPermissions,
            @NonNull PermissionsUsagesChangeCallback callback, boolean sync) {
@@ -96,7 +96,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
        final Bundle args = new Bundle();
        args.putInt(KEY_FILTER_UID, filterUid);
        args.putString(KEY_FILTER_PACKAGE_NAME, filterPackageName);
        args.putString(KEY_FILTER_PERMISSION_GROUP, filterPermissionGroup);
        args.putStringArray(KEY_FILTER_PERMISSION_GROUP, filterPermissionGroups);
        args.putLong(KEY_FILTER_BEGIN_TIME_MILLIS, filterBeginTimeMillis);
        args.putLong(KEY_FILTER_END_TIME_MILLIS, filterEndTimeMillis);
        args.putInt(KEY_USAGE_FLAGS, usageFlags);
@@ -164,7 +164,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
    private static final class UsageLoader extends AsyncTaskLoader<List<AppPermissionUsage>> {
        private final int mFilterUid;
        private @Nullable String mFilterPackageName;
        private @Nullable String mFilterPermissionGroup;
        private @Nullable String[] mFilterPermissionGroups;
        private final long mFilterBeginTimeMillis;
        private final long mFilterEndTimeMillis;
        private final int mUsageFlags;
@@ -175,7 +175,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
            super(context);
            mFilterUid = args.getInt(KEY_FILTER_UID);
            mFilterPackageName = args.getString(KEY_FILTER_PACKAGE_NAME);
            mFilterPermissionGroup = args.getString(KEY_FILTER_PERMISSION_GROUP);
            mFilterPermissionGroups = args.getStringArray(KEY_FILTER_PERMISSION_GROUP);
            mFilterBeginTimeMillis = args.getLong(KEY_FILTER_BEGIN_TIME_MILLIS);
            mFilterEndTimeMillis = args.getLong(KEY_FILTER_END_TIME_MILLIS);
            mUsageFlags = args.getInt(KEY_USAGE_FLAGS);
@@ -192,7 +192,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
        public @NonNull List<AppPermissionUsage> loadInBackground() {
            final List<PermissionGroup> groups = PermissionGroups.getPermissionGroups(
                    getContext(), this::isLoadInBackgroundCanceled, mGetUiInfo,
                    mGetNonPlatformPermissions, mFilterPermissionGroup, mFilterPackageName);
                    mGetNonPlatformPermissions, mFilterPermissionGroups, mFilterPackageName);
            if (!Utils.isPermissionsHubEnabled()) {
                return Collections.emptyList();
            }
+2 −6
Original line number Diff line number Diff line
@@ -75,8 +75,8 @@ public final class ReviewOngoingUsageActivity extends FragmentActivity {

        mPermissionUsages = new PermissionUsages(this);
        mStartTime = Math.max(System.currentTimeMillis() - numMillis, Instant.EPOCH.toEpochMilli());
        mPermissionUsages.load(null, null, mStartTime, Long.MAX_VALUE,
                PermissionUsages.USAGE_FLAG_LAST, getLoaderManager(), false, false,
        mPermissionUsages.load(null, new String[] { CAMERA, LOCATION, MICROPHONE }, mStartTime,
                Long.MAX_VALUE, PermissionUsages.USAGE_FLAG_LAST, getLoaderManager(), false, false,
                this::onPermissionUsagesLoaded, false);
    }

@@ -99,10 +99,6 @@ public final class ReviewOngoingUsageActivity extends FragmentActivity {
                if (groupUsage.getLastAccessTime() < mStartTime && !groupUsage.isRunning()) {
                    continue;
                }
                if (!groupName.equals(CAMERA) && !groupName.equals(LOCATION) && !groupName.equals(
                        MICROPHONE)) {
                    continue;
                }
                if (!Utils.isGroupOrBgGroupUserSensitive(groupUsage.getGroup())) {
                    continue;
                }
+1 −1
Original line number Diff line number Diff line
@@ -569,7 +569,7 @@ public class PermissionUsageFragment extends SettingsWithLargeHeader implements
        }
        final long filterTimeBeginMillis = Math.max(System.currentTimeMillis()
                - timeFilterItem.getTime(), Instant.EPOCH.toEpochMilli());
        mPermissionUsages.load(null /*filterPackageName*/, null /*filterPermissionGroup*/,
        mPermissionUsages.load(null /*filterPackageName*/, null /*filterPermissionGroups*/,
                filterTimeBeginMillis, Long.MAX_VALUE, PermissionUsages.USAGE_FLAG_LAST
                        | PermissionUsages.USAGE_FLAG_HISTORICAL, getActivity().getLoaderManager(),
                false /*getUiInfo*/, false /*getNonPlatformPermissions*/, this /*callback*/,