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

Commit 95985848 authored by Joel Galenson's avatar Joel Galenson
Browse files

Speed up search indexing.

The search indexing currently loads all PermissionGroups and
PermissionApps, which is slow.  To speed it up, we use the existing
list of platform permissions and only load what we need.

Change-Id: Id89fc290a1feb7add27969a07a09b912baab58fd
Fixes: 123666289
Test: Clear search index, it loads more quickly.
parent 0950ecf4
Loading
Loading
Loading
Loading
+29 −19
Original line number Diff line number Diff line
@@ -26,18 +26,18 @@ import static android.provider.SearchIndexablesContract.RawData.COLUMN_KEYWORDS;
import static android.provider.SearchIndexablesContract.RawData.COLUMN_RANK;
import static android.provider.SearchIndexablesContract.RawData.COLUMN_TITLE;

import static com.android.packageinstaller.permission.model.PermissionGroups.getAllPermissionGroups;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.provider.SearchIndexablesProvider;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.packageinstaller.permission.model.PermissionGroup;
import com.android.packageinstaller.permission.utils.Utils;
import com.android.permissioncontroller.R;

import java.io.FileInputStream;
@@ -48,7 +48,8 @@ import java.util.List;
import java.util.UUID;

public class PermissionSearchIndexablesProvider extends SearchIndexablesProvider {
    private static final String OS_PKG = "android";
    private static final String LOG_TAG = PermissionSearchIndexablesProvider.class.getSimpleName();

    private static final String EXTRA_SETTINGS_SEARCH_KEY = ":settings:fragment_args_key";

    public static final String ACTION_MANAGE_PERMISSION_APPS =
@@ -73,25 +74,25 @@ public class PermissionSearchIndexablesProvider extends SearchIndexablesProvider
    public Cursor queryRawData(String[] projection) {
        String password = getPassword(getContext());

        List<PermissionGroup> permissionGroups = getAllPermissionGroups(getContext(), null, false);
        PackageManager pm = getContext().getPackageManager();

        List<String> permissionGroupNames = Utils.getPlatformPermissionGroups();
        MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS);

        int numPermissionGroups = permissionGroups.size();
        int numPermissionGroups = permissionGroupNames.size();
        for (int i = 0; i < numPermissionGroups; i++) {
            PermissionGroup group = permissionGroups.get(i);
            String groupName = permissionGroupNames.get(i);

            if (OS_PKG.equals(group.getDeclaringPackage())) {
                CharSequence label = group.getLabel();
            CharSequence label = getPermissionGroupLabel(groupName, pm);

            cursor.newRow().add(COLUMN_RANK, 0)
                    .add(COLUMN_TITLE, label)
                    .add(COLUMN_KEYWORDS, label + ", "
                            + getContext().getString(R.string.permission_search_keyword))
                    .add(COLUMN_KEY, password + getContext().getPackageName()
                                + "," + group.getName())
                            + "," + groupName)
                    .add(COLUMN_INTENT_ACTION, ACTION_MANAGE_PERMISSION_APPS);
        }
        }

        cursor.newRow().add(COLUMN_RANK, 0)
                .add(COLUMN_TITLE, getContext().getString(R.string.permission_usage_title))
@@ -103,6 +104,15 @@ public class PermissionSearchIndexablesProvider extends SearchIndexablesProvider
        return cursor;
    }

    private CharSequence getPermissionGroupLabel(String groupName, PackageManager pm) {
        try {
            return pm.getPermissionGroupInfo(groupName, 0).loadLabel(pm);
        } catch (PackageManager.NameNotFoundException e) {
            Log.w(LOG_TAG, "Cannot find group label for " + groupName, e);
        }
        return null;
    }

    @Override
    public Cursor queryNonIndexableKeys(String[] projection) {
        return new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS);
+9 −0
Original line number Diff line number Diff line
@@ -395,6 +395,15 @@ public final class Utils {
        return PLATFORM_PERMISSION_GROUPS.containsKey(name);
    }

    /**
     * Get the names of the platform permission groups.
     *
     * @return the names of the platform permission groups.
     */
    public static List<String> getPlatformPermissionGroups() {
        return new ArrayList<>(PLATFORM_PERMISSION_GROUPS.keySet());
    }

    /**
     * Should UI show this permission.
     *