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

Commit 55bbfb33 authored by Svet Ganov's avatar Svet Ganov Committed by Svetoslav Ganov
Browse files

Add contacts and phone granular permission control

Change-Id: I2bf2e52cf9e95e4d1b85c31182a5fbaf3ffbe839
parent 5e3cc533
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);
    }
}