From 922064ed69556e6f25e54070bffd745ccc67bf80 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Mon, 6 May 2019 14:12:00 +0800 Subject: [PATCH] Limit the number of permissions being displayed. To avoid a long permission summary, let's limit the number to three. Fixes: 117978938 Test: robotests Change-Id: Id83fac7ad91140b22757d3e6e8eb72d86ad6ad42 --- .../AppPermissionsPreferenceController.java | 11 +++++-- ...ppPermissionsPreferenceControllerTest.java | 30 +++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/applications/AppPermissionsPreferenceController.java b/src/com/android/settings/applications/AppPermissionsPreferenceController.java index 751e33854d4..59341d5447f 100644 --- a/src/com/android/settings/applications/AppPermissionsPreferenceController.java +++ b/src/com/android/settings/applications/AppPermissionsPreferenceController.java @@ -35,6 +35,9 @@ public class AppPermissionsPreferenceController extends BasePreferenceController private static final String TAG = "AppPermissionPrefCtrl"; private static int NUM_PACKAGE_TO_CHECK = 3; + @VisibleForTesting + static int NUM_PERMISSIONS_TO_SHOW = 3; + private final PackageManager mPackageManager; private final Set mPermissionGroups; @@ -95,9 +98,13 @@ public class AppPermissionsPreferenceController extends BasePreferenceController if (mNumPackageChecked < NUM_PACKAGE_TO_CHECK) { return; } - final CharSequence summary = !mPermissionGroups.isEmpty() + + 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(mPermissionGroups).toLowerCase()) + ListFormatter.getInstance().format(permissionsToShow).toLowerCase()) : null; mPreference.setSummary(summary); } diff --git a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java index 107821c15f0..986c2c77fb2 100644 --- a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java @@ -16,6 +16,8 @@ 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; @@ -32,11 +34,11 @@ import androidx.preference.Preference; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; +import java.util.List; @RunWith(RobolectricTestRunner.class) public class AppPermissionsPreferenceControllerTest { @@ -47,7 +49,6 @@ public class AppPermissionsPreferenceControllerTest { @Before public void setUp() throws NameNotFoundException { - MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mPreference = spy(new Preference(mContext)); mController = spy(new AppPermissionsPreferenceController(mContext, "pref_key")); @@ -106,4 +107,29 @@ 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; + } }