diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6c191159038..9d8dc630b4a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6479,6 +6479,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 c2966fe6b0d..47a0098b0ad 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -129,13 +129,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 6e96f6ac4b2..9649d2727a4 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;
@@ -79,6 +81,7 @@ import com.android.settingslib.applications.ApplicationsState.AppEntry;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -494,7 +497,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));
@@ -919,20 +922,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);
}
}