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

Commit 375c3a08 authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Show list of permissions instead of just numbers

Bug 21615746

Change-Id: I23439b3571f10d6d396174025a19b5ebb585dee9
parent 7e38eea8
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -6475,6 +6475,18 @@
       <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> of <xliff:g id="count" example="10">%d</xliff:g> permissions granted</item>
   </plurals>

    <!-- Runtime permissions preference summary.  Number of additional permissions granted. [CHAR LIMIT=40] -->
    <plurals name="runtime_permissions_additional_count">
        <item quantity="one"><xliff:g id="count" example="1">%d</xliff:g> additional permission</item>
        <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> additional permissions</item>
    </plurals>

    <!-- Runtime permissions preference summary, shown when the app has no permissions granted. [CHAR LIMIT=40] -->
    <string name="runtime_permissions_summary_no_permissions_granted">No permissions granted</string>

    <!-- Runtime permissions preference summary, shown when the app requests no permissions. [CHAR LIMIT=40] -->
    <string name="runtime_permissions_summary_no_permissions_requested">No permissions requested</string>

    <!-- Launch defaults preference summary with some set [CHAR LIMIT=40] -->
    <string name="launch_defaults_some">Some defaults set</string>
    <!-- Launch defaults preference summary with none set [CHAR LIMIT=40] -->
+3 −3
Original line number Diff line number Diff line
@@ -128,13 +128,13 @@ public class AdvancedAppSettings extends SettingsPreferenceFragment implements

    private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() {
        @Override
        public void onPermissionCountResult(int[] result) {
        public void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels) {
            if (getActivity() == null) {
                return;
            }
            if (result != null) {
            if (counts != null) {
                mAppPermsPreference.setSummary(getContext().getString(
                        R.string.app_permissions_summary, result[0], result[1]));
                        R.string.app_permissions_summary, counts[0], counts[1]));
            } else {
                mAppPermsPreference.setSummary(null);
            }
+36 −13
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.icu.text.ListFormatter;
import android.net.INetworkStatsService;
import android.net.INetworkStatsSession;
import android.net.NetworkTemplate;
@@ -78,6 +80,7 @@ import com.android.settings.notification.NotificationBackend.AppRow;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

@@ -493,7 +496,7 @@ public class InstalledAppDetails extends AppInfoBase
        // Update the preference summaries.
        Activity context = getActivity();
        mStoragePreference.setSummary(AppStorageSettings.getSummary(mAppEntry, context));
        PermissionsSummaryHelper.getPermissionCounts(getContext(), mPackageName,
        PermissionsSummaryHelper.getPermissionSummary(getContext(), mPackageName,
                mPermissionCallback);
        mLaunchPreference.setSummary(Utils.getLaunchByDeafaultSummary(mAppEntry, mUsbManager,
                mPm, context));
@@ -918,20 +921,40 @@ public class InstalledAppDetails extends AppInfoBase
        }
    };

    private final PermissionsResultCallback mPermissionCallback = new PermissionsResultCallback() {
    private final PermissionsResultCallback mPermissionCallback
            = new PermissionsResultCallback() {
        @Override
        public void onPermissionCountResult(int[] result) {
            if (getActivity() == null) {
                return;
            }
            if (result != null) {
                mPermissionsPreference.setSummary(getResources().getQuantityString(
                        R.plurals.runtime_permissions_summary, result[1], result[0], result[1]));
        public void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels) {
            final Resources res = getResources();
            CharSequence summary = null;
            boolean enabled = false;
            if (counts != null) {
                int totalCount = counts[1];
                int additionalCounts = counts[2];

                if (totalCount == 0) {
                    summary = res.getString(
                            R.string.runtime_permissions_summary_no_permissions_requested);
                } else {
                    enabled = true;

                    final ArrayList<CharSequence> list = new ArrayList(Arrays.asList(groupLabels));
                    if (additionalCounts > 0) {
                        // N additional permissions.
                        list.add(res.getQuantityString(
                                R.plurals.runtime_permissions_additional_count,
                                additionalCounts, additionalCounts));
                    }
                    if (list.size() == 0) {
                        summary = res.getString(
                                R.string.runtime_permissions_summary_no_permissions_granted);
                    } else {
                mPermissionsPreference.setSummary(null);
                        summary = ListFormatter.getInstance().format(list);
                    }
                }
            }
            mPermissionsPreference.setSummary(summary);
            mPermissionsPreference.setEnabled(enabled);
        }
    };
}

+9 −4
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ public class PermissionsSummaryHelper {
    private static final String ACTION_APP_COUNT_RESPONSE
            = "com.android.settings.APP_COUNT_RESPONSE";

    public static void getPermissionCounts(Context context, String pkg,
    public static void getPermissionSummary(Context context, String pkg,
            PermissionsResultCallback callback) {
        Intent request = new Intent(Intent.ACTION_GET_PERMISSIONS_COUNT);
        request.putExtra(Intent.EXTRA_PACKAGE_NAME, pkg);
@@ -45,8 +45,13 @@ public class PermissionsSummaryHelper {
        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int[] result = intent.getIntArrayExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT);
                callback.onPermissionCountResult(result);
                int[] counts = intent.getIntArrayExtra(Intent.EXTRA_GET_PERMISSIONS_COUNT_RESULT);

                CharSequence[] groups = intent.getCharSequenceArrayExtra(
                        Intent.EXTRA_GET_PERMISSIONS_GROUP_LIST_RESULT);

                callback.onPermissionSummaryResult(counts, groups);

                context.unregisterReceiver(this);
            }
        };
@@ -57,6 +62,6 @@ public class PermissionsSummaryHelper {
    }

    public interface PermissionsResultCallback {
        void onPermissionCountResult(int[] result);
        void onPermissionSummaryResult(int[] counts, CharSequence[] groupLabels);
    }
}