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

Commit f33338ab authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Add contacts and phone granular permission control"

parents 3625c0e2 55bbfb33
Loading
Loading
Loading
Loading
+3 −15
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.packageinstaller.permission.ui.handheld;

import android.Manifest;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.Context;
@@ -52,10 +51,6 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {

    private static final String KEY_OTHER = "other_perms";

    private boolean mPermissionReviewRequired;

    private String mFilterGroup;

    private static final String EXTRA_FILTER_GROUP =
            "com.android.packageinstaller.extra.FILTER_GROUP";

@@ -72,13 +67,6 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
        return instance;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mPermissionReviewRequired = context.getResources().getBoolean(
                com.android.internal.R.bool.config_permissionReviewRequired);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -165,9 +153,9 @@ public final class AllAppPermissionsFragment extends SettingsWithHeader {
                            continue;
                        }
                        PreferenceGroup pref = findOrCreate(group, pm, prefs);
                        // We allow individual permission control in SMS if review enabled
                        final boolean mutable = mPermissionReviewRequired
                                && Manifest.permission_group.SMS.equals(group.name);
                        // We allow individual permission control in some groups if review enabled
                        final boolean mutable = Utils.areGroupPermissionsIndividuallyControlled(
                                getContext(), group.name);
                        pref.addPreference(getPreference(info, perm, group, pm, mutable));
                    } else if (filterGroup == null) {
                        if (perm.protectionLevel == PermissionInfo.PROTECTION_NORMAL) {
+9 −19
Original line number Diff line number Diff line
@@ -16,14 +16,12 @@

package com.android.packageinstaller.permission.ui.handheld;

import android.Manifest;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
@@ -74,8 +72,6 @@ public final class AppPermissionsFragment extends SettingsWithHeader

    private boolean mHasConfirmedRevoke;

    private boolean mPermissionReviewRequired;

    public static AppPermissionsFragment newInstance(String packageName) {
        return setPackageName(new AppPermissionsFragment(), packageName);
    }
@@ -87,13 +83,6 @@ public final class AppPermissionsFragment extends SettingsWithHeader
        return fragment;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mPermissionReviewRequired = context.getResources().getBoolean(
                com.android.internal.R.bool.config_permissionReviewRequired);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -224,9 +213,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader
            RestrictedSwitchPreference preference = new RestrictedSwitchPreference(context);
            preference.setChecked(group.areRuntimePermissionsGranted());

            // SMS is a double target - one to toggle and one to fine manage
            if (mPermissionReviewRequired
                    && Manifest.permission_group.SMS.equals(group.getName())) {
            // Some groups may be a double target - one to toggle and one to fine manage
            if (Utils.areGroupPermissionsIndividuallyControlled(getContext(), group.getName())) {
                preference.setOnPreferenceClickListener((pref) -> {
                    showAllPermissions(group.getName());
                    return false;
@@ -235,11 +223,12 @@ public final class AppPermissionsFragment extends SettingsWithHeader
                preference.setSwitchOnClickListener(v -> {
                    Switch switchView = (Switch) v;
                    onPreferenceChange(preference, switchView.isChecked());
                    updateSmsPreferenceSummaryIfNeeded(group, preference);
                    updateSummaryForIndividuallyControlledPermissionGroup(
                            group, preference);
                    preference.setCheckedOverride(switchView.isChecked());
                });

                updateSmsPreferenceSummaryIfNeeded(group, preference);
                updateSummaryForIndividuallyControlledPermissionGroup(group, preference);
            } else {
                preference.setOnPreferenceChangeListener(this);
            }
@@ -331,7 +320,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader
                                (DialogInterface dialog, int which) -> {
                            ((SwitchPreference) preference).setChecked(false);
                            if (preference instanceof MultiTargetSwitchPreference) {
                                updateSmsPreferenceSummaryIfNeeded(group, preference);
                                updateSummaryForIndividuallyControlledPermissionGroup(
                                        group, preference);
                            }
                            group.revokeRuntimePermissions(false);
                            if (!grantedByDefault) {
@@ -354,8 +344,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader
        logToggledGroups();
    }

    private void updateSmsPreferenceSummaryIfNeeded(AppPermissionGroup group,
            Preference preference) {
    private void updateSummaryForIndividuallyControlledPermissionGroup(
            AppPermissionGroup group, Preference preference) {
        int revokedCount = 0;
        List<Permission> permissions = group.getPermissions();
        final int permissionCount = permissions.size();
+10 −0
Original line number Diff line number Diff line
@@ -145,4 +145,14 @@ public final class Utils {
        return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0
                && !launcherPkgs.contains(info.packageName);
    }

    public static boolean areGroupPermissionsIndividuallyControlled(Context context, String group) {
        if (!context.getResources().getBoolean(
                com.android.internal.R.bool.config_permissionReviewRequired)) {
            return false;
        }
        return Manifest.permission_group.SMS.equals(group)
                || Manifest.permission_group.PHONE.equals(group)
                || Manifest.permission_group.CONTACTS.equals(group);
    }
}