diff --git a/res/values/strings.xml b/res/values/strings.xml
index 618aead8b5f..eb138764536 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -9138,6 +9138,8 @@
Permission manager
Apps using %1$s
+
+ Apps using %1$s, and more
Tap to wake
diff --git a/src/com/android/settings/applications/AppPermissionsPreferenceController.java b/src/com/android/settings/applications/AppPermissionsPreferenceController.java
index 0a3bba7d07a..4458ea4105c 100644
--- a/src/com/android/settings/applications/AppPermissionsPreferenceController.java
+++ b/src/com/android/settings/applications/AppPermissionsPreferenceController.java
@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
public class AppPermissionsPreferenceController extends BasePreferenceController {
private static final String TAG = "AppPermissionPrefCtrl";
- private static int NUM_PACKAGE_TO_CHECK = 3;
+ private static final int NUM_PACKAGE_TO_CHECK = 4;
@VisibleForTesting
static int NUM_PERMISSIONS_TO_SHOW = 3;
@@ -78,7 +78,7 @@ public class AppPermissionsPreferenceController extends BasePreferenceController
void queryPermissionSummary() {
final List installedPackages =
mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
- // Here we only get the first three apps and check their permissions.
+ // Here we only get the first four apps and check their permissions.
final List packagesWithPermission = installedPackages.stream()
.filter(pInfo -> pInfo.permissions != null)
.limit(NUM_PACKAGE_TO_CHECK)
@@ -102,10 +102,21 @@ public class AppPermissionsPreferenceController extends BasePreferenceController
final List permissionsToShow = mPermissionGroups.stream()
.limit(NUM_PERMISSIONS_TO_SHOW)
.collect(Collectors.toList());
- final CharSequence summary = !permissionsToShow.isEmpty()
- ? mContext.getString(R.string.app_permissions_summary,
- ListFormatter.getInstance().format(permissionsToShow).toLowerCase())
- : mContext.getString(R.string.runtime_permissions_summary_no_permissions_granted);
+ final boolean isMoreShowed = mPermissionGroups.size() > NUM_PERMISSIONS_TO_SHOW;
+ CharSequence summary;
+
+ if (!permissionsToShow.isEmpty()) {
+ if (isMoreShowed) {
+ summary = mContext.getString(R.string.app_permissions_summary_more,
+ ListFormatter.getInstance().format(permissionsToShow).toLowerCase());
+ } else {
+ summary = mContext.getString(R.string.app_permissions_summary,
+ ListFormatter.getInstance().format(permissionsToShow).toLowerCase());
+ }
+ } else {
+ summary = mContext.getString(
+ R.string.runtime_permissions_summary_no_permissions_granted);
+ }
mPreference.setSummary(summary);
}
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
index f0fdc9c4dff..dfa938313b3 100644
--- a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
@@ -16,8 +16,6 @@
package com.android.settings.applications;
-import static com.android.settings.applications.AppPermissionsPreferenceController.NUM_PERMISSIONS_TO_SHOW;
-
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
@@ -75,7 +73,7 @@ public class AppPermissionsPreferenceControllerTest {
public void updateSummary_noGrantedPermission_shouldSetNoPermissionGrantedSummary() {
doNothing().when(mController).queryPermissionSummary();
mController.updateState(mPreference);
- mController.mNumPackageChecked = 2;
+ mController.mNumPackageChecked = 3;
mController.updateSummary(new ArrayList<>());
@@ -84,20 +82,55 @@ public class AppPermissionsPreferenceControllerTest {
}
@Test
- public void updateSummary_hasPermissionGroups_shouldSetPermissionAsSummary() {
+ public void updateSummary_hasOnePermission_shouldSetPermissionAsSummary() {
doNothing().when(mController).queryPermissionSummary();
mController.updateState(mPreference);
final String permission = "location";
final ArrayList labels = new ArrayList<>();
labels.add(permission);
final String summary = "Apps using " + permission;
- mController.mNumPackageChecked = 2;
+ mController.mNumPackageChecked = 3;
mController.updateSummary(labels);
assertThat(mPreference.getSummary()).isEqualTo(summary);
}
+ @Test
+ public void updateSummary_hasThreePermissions_shouldShowThreePermissionAsSummary() {
+ doNothing().when(mController).queryPermissionSummary();
+ mController.updateState(mPreference);
+ mController.mNumPackageChecked = 3;
+ final List labels = new ArrayList<>();
+ labels.add("Phone");
+ labels.add("SMS");
+ labels.add("Microphone");
+
+ mController.updateSummary(labels);
+
+ final String summary = "Apps using microphone, sms, and phone";
+ assertThat(mPreference.getSummary()).isEqualTo(summary);
+ }
+
+ @Test
+ public void updateSummary_hasFivePermissions_shouldShowThreePermissionsAndMoreAsSummary() {
+ doNothing().when(mController).queryPermissionSummary();
+ mController.updateState(mPreference);
+ mController.mNumPackageChecked = 3;
+ final List labels = new ArrayList<>();
+ labels.add("Phone");
+ labels.add("SMS");
+ labels.add("Microphone");
+ labels.add("Contacts");
+ labels.add("Camera");
+ labels.add("Location");
+
+ mController.updateSummary(labels);
+
+ final String summary = "Apps using microphone, contacts, and sms, and more";
+ assertThat(mPreference.getSummary()).isEqualTo(summary);
+ }
+
@Test
public void updateSummary_notReachCallbackCount_shouldNotSetSummary() {
doNothing().when(mController).queryPermissionSummary();
@@ -110,29 +143,4 @@ public class AppPermissionsPreferenceControllerTest {
verify(mPreference, never()).setSummary(anyString());
}
-
- @Test
- public void updateSummary_hasFiveItems_shouldShowCertainNumItems() {
- doNothing().when(mController).queryPermissionSummary();
- mController.updateState(mPreference);
- mController.mNumPackageChecked = 2;
-
- mController.updateSummary(getPermissionGroupsSet());
-
- final CharSequence summary = mPreference.getSummary();
- final int items = summary.toString().split(",").length;
- assertThat(items).isEqualTo(NUM_PERMISSIONS_TO_SHOW);
- }
-
- private List getPermissionGroupsSet() {
- final List labels = new ArrayList<>();
- labels.add("Phone");
- labels.add("SMS");
- labels.add("Microphone");
- labels.add("Contacts");
- labels.add("Camera");
- labels.add("Location");
-
- return labels;
- }
}