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

Commit 799be3a6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Optimize Permissions Hub by not loading non-platform permission groups."

parents ad2474b6 7c2ca01a
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -55,16 +55,19 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
    private final Context mContext;
    private final PermissionsGroupsChangeCallback mCallback;
    private final boolean mGetAppUiInfo;
    private final boolean mGetNonPlatformPermissions;

    public interface PermissionsGroupsChangeCallback {
        public void onPermissionGroupsChanged();
    }

    public PermissionGroups(Context context, LoaderManager loaderManager,
            PermissionsGroupsChangeCallback callback, boolean getAppUiInfo) {
            PermissionsGroupsChangeCallback callback, boolean getAppUiInfo,
            boolean getNonPlatformPermissions) {
        mContext = context;
        mCallback = callback;
        mGetAppUiInfo = getAppUiInfo;
        mGetNonPlatformPermissions = getNonPlatformPermissions;

        // Don't update immediately as otherwise we can get a callback before this object is
        // initialized.
@@ -73,7 +76,7 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr

    @Override
    public Loader<List<PermissionGroup>> onCreateLoader(int id, Bundle args) {
        return new PermissionsLoader(mContext, mGetAppUiInfo);
        return new PermissionsLoader(mContext, mGetAppUiInfo, mGetNonPlatformPermissions);
    }

    @Override
@@ -135,12 +138,15 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
     * @param context Context to use
     * @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
     *
     * @return the list of all groups int the system
     */
    public static @NonNull List<PermissionGroup> getAllPermissionGroups(@NonNull Context context,
            @Nullable Supplier<Boolean> isCanceled, boolean getAppUiInfo) {
        return getPermissionGroups(context, isCanceled, getAppUiInfo, null, null);
            @Nullable Supplier<Boolean> isCanceled, boolean getAppUiInfo,
            boolean getNonPlatformPermissions) {
        return getPermissionGroups(context, isCanceled, getAppUiInfo, getNonPlatformPermissions,
                null, null);
    }

    /**
@@ -149,6 +155,7 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
     * @param context Context to use
     * @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 packageName Optional package to filter for.
     *
@@ -156,7 +163,8 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
     */
    public static @NonNull List<PermissionGroup> getPermissionGroups(@NonNull Context context,
            @Nullable Supplier<Boolean> isCanceled, boolean getAppUiInfo,
            @Nullable String groupName, @Nullable String packageName) {
            boolean getNonPlatformPermissions, @Nullable String groupName,
            @Nullable String packageName) {
        ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context);
        PermissionApps.PmCache pmCache = new PermissionApps.PmCache(
                context.getPackageManager());
@@ -175,6 +183,11 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
                return Collections.emptyList();
            }

            // Ignore non-platform permissions and the UNDEFINED group.
            if (!getNonPlatformPermissions && !Utils.isModernPermissionGroup(groupInfo.name)) {
                continue;
            }

            // Get the permissions in this group.
            final List<PermissionInfo> groupPermissions;
            try {
@@ -248,6 +261,12 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
                    continue;
                }

                // Ignore non-platform permissions and the UNDEFINED group.
                if (!getNonPlatformPermissions && !Utils.isModernPermissionGroup(
                        permissionInfo.name)) {
                    continue;
                }

                // If no app uses this permission,
                if (!requestedPermissions.contains(permissionInfo.name)) {
                    continue;
@@ -303,10 +322,13 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
    private static final class PermissionsLoader extends AsyncTaskLoader<List<PermissionGroup>>
            implements PackageManager.OnPermissionsChangedListener {
        private final boolean mGetAppUiInfo;
        private final boolean mGetNonPlatformPermissions;

        PermissionsLoader(Context context, boolean getAppUiInfo) {
        PermissionsLoader(Context context, boolean getAppUiInfo,
                boolean getNonPlatformPermissions) {
            super(context);
            mGetAppUiInfo = getAppUiInfo;
            mGetNonPlatformPermissions = getNonPlatformPermissions;
        }

        @Override
@@ -323,7 +345,7 @@ public final class PermissionGroups implements LoaderCallbacks<List<PermissionGr
        @Override
        public List<PermissionGroup> loadInBackground() {
            return getAllPermissionGroups(getContext(), this::isLoadInBackgroundCanceled,
                    mGetAppUiInfo);
                    mGetAppUiInfo, mGetNonPlatformPermissions);
        }

        @Override
+12 −5
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
    private static final String KEY_FILTER_END_TIME_MILLIS =  "KEY_FILTER_END_TIME_MILLIS";
    private static final String KEY_USAGE_FLAGS =  "KEY_USAGE_FLAGS";
    private static final String KEY_GET_UI_INFO =  "KEY_GET_UI_INFO";
    private static final String KEY_GET_NON_PLATFORM_PERMISSIONS =
            "KEY_GET_NON_PLATFORM_PERMISSIONS";

    private @Nullable PermissionsUsagesChangeCallback mCallback;

@@ -77,16 +79,18 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
    public void load(@Nullable String filterPackageName, @Nullable String filterPermissionGroup,
            long filterBeginTimeMillis, long filterEndTimeMillis, int usageFlags,
            @NonNull LoaderManager loaderManager, boolean getUiInfo,
            @NonNull PermissionsUsagesChangeCallback callback, boolean sync) {
            boolean getNonPlatformPermissions, @NonNull PermissionsUsagesChangeCallback callback,
            boolean sync) {
        load(Process.INVALID_UID, filterPackageName, filterPermissionGroup, filterBeginTimeMillis,
                filterEndTimeMillis, usageFlags, loaderManager, getUiInfo, callback, sync);
                filterEndTimeMillis, usageFlags, loaderManager, getUiInfo,
                getNonPlatformPermissions, callback, sync);
    }

    public void load(int filterUid, @Nullable String filterPackageName,
            @Nullable String filterPermissionGroup, long filterBeginTimeMillis,
            long filterEndTimeMillis, int usageFlags, @NonNull LoaderManager loaderManager,
            boolean getUiInfo, @NonNull PermissionsUsagesChangeCallback callback,
            boolean sync) {
            boolean getUiInfo, boolean getNonPlatformPermissions,
            @NonNull PermissionsUsagesChangeCallback callback, boolean sync) {
        mCallback = callback;
        final Bundle args = new Bundle();
        args.putInt(KEY_FILTER_UID, filterUid);
@@ -96,6 +100,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
        args.putLong(KEY_FILTER_END_TIME_MILLIS, filterEndTimeMillis);
        args.putInt(KEY_USAGE_FLAGS, usageFlags);
        args.putBoolean(KEY_GET_UI_INFO, getUiInfo);
        args.putBoolean(KEY_GET_NON_PLATFORM_PERMISSIONS, getNonPlatformPermissions);
        if (sync) {
            final UsageLoader loader = new UsageLoader(mContext, args);
            final List<AppPermissionUsage> usages = loader.loadInBackground();
@@ -166,6 +171,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
        private final long mFilterEndTimeMillis;
        private final int mUsageFlags;
        private final boolean mGetUiInfo;
        private final boolean mGetNonPlatformPermissions;

        UsageLoader(@NonNull Context context, @NonNull Bundle args) {
            super(context);
@@ -176,6 +182,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
            mFilterEndTimeMillis = args.getLong(KEY_FILTER_END_TIME_MILLIS);
            mUsageFlags = args.getInt(KEY_USAGE_FLAGS);
            mGetUiInfo = args.getBoolean(KEY_GET_UI_INFO);
            mGetNonPlatformPermissions = args.getBoolean(KEY_GET_NON_PLATFORM_PERMISSIONS);
        }

        @Override
@@ -187,7 +194,7 @@ public final class PermissionUsages implements LoaderCallbacks<List<AppPermissio
        public @NonNull List<AppPermissionUsage> loadInBackground() {
            final List<PermissionGroup> groups = PermissionGroups.getPermissionGroups(
                    getContext(), this::isLoadInBackgroundCanceled, mGetUiInfo,
                    mFilterPermissionGroup, mFilterPackageName);
                    mGetNonPlatformPermissions, mFilterPermissionGroup, mFilterPackageName);
            if (!Utils.isPermissionsHubEnabled()) {
                return Collections.emptyList();
            }
+1 −1
Original line number Diff line number Diff line
@@ -452,7 +452,7 @@ public final class PermissionControllerServiceImpl extends PermissionControllerS
        long filterTimeBeginMillis = Math.max(System.currentTimeMillis() - numMillis, 0);
        usages.load(null, null, filterTimeBeginMillis, Long.MAX_VALUE,
                PermissionUsages.USAGE_FLAG_LAST | PermissionUsages.USAGE_FLAG_HISTORICAL, null,
                false, null, true);
                false, false, null, true);

        List<AppPermissionUsage> appPermissionUsages = usages.getUsages();
        int numApps = appPermissionUsages.size();
+1 −1
Original line number Diff line number Diff line
@@ -275,6 +275,6 @@ public class AppPermissionUsageFragment extends SettingsWithButtonHeader impleme
        mPermissionUsages.load(mAppInfo.uid, mPackageName, null, beginTimeMillis, Long.MAX_VALUE,
                PermissionUsages.USAGE_FLAG_LAST | PermissionUsages.USAGE_FLAG_HISTORICAL,
                getActivity().getLoaderManager(),
                true, this::updateUi, false);
                true, false, this::updateUi, false);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ abstract class ManagePermissionsFragment extends PermissionsFrameFragment
        }

        mPermissions = new PermissionGroups(getContext(), getActivity().getLoaderManager(), this,
                false);
                false, true);
        mCollator = Collator.getInstance(
                getContext().getResources().getConfiguration().getLocales().get(0));
    }
Loading