From 375c3a080ebc7651a16cf09c12841a6f4d6b8c73 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Fri, 5 Jun 2015 14:32:10 -0700 Subject: [PATCH] Show list of permissions instead of just numbers Bug 21615746 Change-Id: I23439b3571f10d6d396174025a19b5ebb585dee9 --- res/values/strings.xml | 12 +++++ .../applications/AdvancedAppSettings.java | 6 +-- .../applications/InstalledAppDetails.java | 49 ++++++++++++++----- .../PermissionsSummaryHelper.java | 13 +++-- 4 files changed, 60 insertions(+), 20 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 4978d575d1f..4c2a41658be 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6475,6 +6475,18 @@ %d of %d permissions granted + + + %d additional permission + %d additional permissions + + + + No permissions granted + + + No permissions requested + Some defaults set diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java index f407cb15801..93ebf219ce6 100644 --- a/src/com/android/settings/applications/AdvancedAppSettings.java +++ b/src/com/android/settings/applications/AdvancedAppSettings.java @@ -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); } diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 26e3d49857f..cf4eb7dbb0b 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -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])); - } else { - mPermissionsPreference.setSummary(null); + 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 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 { + summary = ListFormatter.getInstance().format(list); + } + } } + mPermissionsPreference.setSummary(summary); + mPermissionsPreference.setEnabled(enabled); } }; } - - diff --git a/src/com/android/settings/applications/PermissionsSummaryHelper.java b/src/com/android/settings/applications/PermissionsSummaryHelper.java index e4ecd531412..1b384ead614 100644 --- a/src/com/android/settings/applications/PermissionsSummaryHelper.java +++ b/src/com/android/settings/applications/PermissionsSummaryHelper.java @@ -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); } }