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

Commit 7636a42b authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Add better logic for what is 'system'" into mnc-dev

parents d713bc26 9f0442cd
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.AsyncTask;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseArray;

@@ -79,13 +80,13 @@ public class PermissionApps {
        new PermissionAppsLoader().execute();
    }

    public int getGrantedCount() {
    public int getGrantedCount(ArraySet<String> launcherPkgs) {
        int count = 0;
        for (PermissionApp app : mPermApps) {
            if (!Utils.shouldShowPermission(app)) {
                continue;
            }
            if (app.isSystem()) {
            if (Utils.isSystem(app, launcherPkgs)) {
                // We default to not showing system apps, so hide them from count.
                continue;
            }
@@ -96,13 +97,13 @@ public class PermissionApps {
        return count;
    }

    public int getTotalCount() {
    public int getTotalCount(ArraySet<String> launcherPkgs) {
        int count = 0;
        for (PermissionApp app : mPermApps) {
            if (!Utils.shouldShowPermission(app)) {
                continue;
            }
            if (app.isSystem()) {
            if (Utils.isSystem(app, launcherPkgs)) {
                // We default to not showing system apps, so hide them from count.
                continue;
            }
@@ -175,7 +176,7 @@ public class PermissionApps {
                            : app.applicationInfo.loadLabel(mPm).toString();
                    PermissionApp permApp = new PermissionApp(app.packageName,
                            group, label, getBadgedIcon(app.applicationInfo),
                            app.applicationInfo.isSystemApp());
                            app.applicationInfo);

                    permApps.add(permApp);
                }
@@ -268,19 +269,19 @@ public class PermissionApps {
        private final AppPermissionGroup mAppPermissionGroup;
        private final String mLabel;
        private final Drawable mIcon;
        private final boolean mSystem;
        private final ApplicationInfo mInfo;

        public PermissionApp(String packageName, AppPermissionGroup appPermissionGroup,
                String label, Drawable icon, boolean isSystem) {
                String label, Drawable icon, ApplicationInfo info) {
            mPackageName = packageName;
            mAppPermissionGroup = appPermissionGroup;
            mLabel = label;
            mIcon = icon;
            mSystem = isSystem;
            mInfo = info;
        }

        public boolean isSystem() {
            return mSystem;
        public ApplicationInfo getAppInfo() {
            return mInfo;
        }

        public String getKey() {
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.ArraySet;
import android.util.SparseArray;

import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
@@ -105,6 +106,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver {
    }

    public boolean getAppsWithPermissionsCount(Context context, int[] counts) {
        ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context);
        // Indexed by uid.
        SparseArray<Boolean> grantedApps = new SparseArray<>();
        SparseArray<Boolean> allApps = new SparseArray<>();
@@ -114,7 +116,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver {
            permissionApps.loadNowWithoutUi();
            for (PermissionApp app : permissionApps.getApps()) {
                int uid = app.getUid();
                if (app.isSystem()) {
                if (Utils.isSystem(app, launcherPkgs)) {
                    // We default to not showing system apps, so hide them from count.
                    continue;
                }
+6 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.util.ArraySet;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
@@ -47,6 +48,8 @@ public final class ManagePermissionsFragment extends PreferenceFragment

    private static final String EXTRA_PREFS_KEY = "extra_prefs_key";

    private ArraySet<String> mLauncherPkgs;

    private PermissionGroups mPermissions;

    private PreferenceScreen mExtraScreen;
@@ -65,6 +68,7 @@ public final class ManagePermissionsFragment extends PreferenceFragment
        if (ab != null) {
            ab.setDisplayHomeAsUpEnabled(true);
        }
        mLauncherPkgs = Utils.getLauncherPackages(getContext());
        mPermissions = new PermissionGroups(getActivity(), getLoaderManager(), this);
    }

@@ -187,8 +191,8 @@ public final class ManagePermissionsFragment extends PreferenceFragment
                    if (getActivity() == null) {
                        return;
                    }
                    int granted = permissionApps.getGrantedCount();
                    int total = permissionApps.getTotalCount();
                    int granted = permissionApps.getGrantedCount(mLauncherPkgs);
                    int total = permissionApps.getTotalCount(mLauncherPkgs);
                    finalPref.setSummary(getString(R.string.app_permissions_group_summary,
                            granted, total));
                }
+4 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.support.v4.util.ArrayMap;
import android.util.ArraySet;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -68,6 +69,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements
    private PermissionApps mPermissionApps;

    private ArrayMap<String, AppPermissionGroup> mToggledGroups;
    private ArraySet<String> mLauncherPkgs;
    private boolean mHasConfirmedRevoke;

    private boolean mShowSystem;
@@ -82,6 +84,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements
        if (ab != null) {
            ab.setDisplayHomeAsUpEnabled(true);
        }
        mLauncherPkgs = Utils.getLauncherPackages(getContext());
    }

    @Override
@@ -189,7 +192,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements
            }

            SwitchPreference pref = (SwitchPreference) findPreference(app.getKey());
            if (!mShowSystem && app.isSystem()) {
            if (!mShowSystem && Utils.isSystem(app, mLauncherPkgs)) {
                if (pref != null) {
                    preferences.removePreference(pref);
                }
+23 −0
Original line number Diff line number Diff line
@@ -18,10 +18,14 @@ package com.android.packageinstaller.permission.utils;

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.graphics.drawable.Drawable;
import android.util.ArraySet;
import android.util.Log;
import android.util.TypedValue;

@@ -46,6 +50,9 @@ public class Utils {
            Manifest.permission_group.STORAGE
    };

    private static final Intent LAUNCHER_INTENT = new Intent(Intent.ACTION_MAIN, null)
                            .addCategory(Intent.CATEGORY_LAUNCHER);

    private Utils() {
        /* do nothing - hide constructor */
    }
@@ -115,4 +122,20 @@ public class Utils {
        icon.setTint(context.getColor(typedValue.resourceId));
        return icon;
    }

    public static ArraySet<String> getLauncherPackages(Context context) {
        ArraySet<String> launcherPkgs = new ArraySet<>();
        for (ResolveInfo info :
            context.getPackageManager().queryIntentActivities(LAUNCHER_INTENT, 0)) {
            launcherPkgs.add(info.activityInfo.packageName);
        }

        return launcherPkgs;
    }

    public static boolean isSystem(PermissionApp app, ArraySet<String> launcherPkgs) {
        ApplicationInfo info = app.getAppInfo();
        return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0
                && !launcherPkgs.contains(info.packageName);
    }
}