This CL updates the DO Disclosures page (aka "Enterprise Privacy")
to make items that shows admin granted permissions actionable.
Item click will result in opening the list of apps for a permission.

Test: make RunSettingsRoboTests
Bug: 32692748

Change-Id: I5f2536b116998810857e379f48a26a1c40055590
diff --git a/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java
index 35648c8..8394262 100644
--- a/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java
+++ b/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java
@@ -24,7 +24,7 @@
             = "enterprise_privacy_number_camera_access_packages";
 
     public AdminGrantedCameraPermissionPreferenceController(Context context) {
-        super(context, new String[] {Manifest.permission.CAMERA});
+        super(context, new String[] {Manifest.permission.CAMERA}, Manifest.permission_group.CAMERA);
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java
index f570558..4dfc4be 100644
--- a/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java
+++ b/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java
@@ -25,7 +25,7 @@
 
     public AdminGrantedLocationPermissionsPreferenceController(Context context) {
         super(context, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
-                Manifest.permission.ACCESS_FINE_LOCATION});
+                Manifest.permission.ACCESS_FINE_LOCATION}, Manifest.permission_group.LOCATION);
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java
index 842235d..e2ab555 100644
--- a/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java
+++ b/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java
@@ -24,7 +24,8 @@
             = "enterprise_privacy_number_microphone_access_packages";
 
     public AdminGrantedMicrophonePermissionPreferenceController(Context context) {
-        super(context, new String[] {Manifest.permission.RECORD_AUDIO});
+        super(context, new String[] {Manifest.permission.RECORD_AUDIO},
+                Manifest.permission_group.MICROPHONE);
     }
 
     @Override
diff --git a/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java b/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java
index 2b972a5..5263817 100644
--- a/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java
+++ b/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBase.java
@@ -15,7 +15,7 @@
 package com.android.settings.enterprise;
 
 import android.content.Context;
-import android.content.res.Resources;
+import android.content.Intent;
 import android.support.v7.preference.Preference;
 
 import com.android.settings.R;
@@ -26,11 +26,15 @@
 public abstract class AdminGrantedPermissionsPreferenceControllerBase extends PreferenceController {
 
     private final String[] mPermissions;
+    private final String mPermissionGroup;
     private final ApplicationFeatureProvider mFeatureProvider;
 
-    public AdminGrantedPermissionsPreferenceControllerBase(Context context, String[] permissions) {
+    public AdminGrantedPermissionsPreferenceControllerBase(Context context,
+                                                           String[] permissions,
+                                                           String permissionGroup) {
         super(context);
         mPermissions = permissions;
+        mPermissionGroup = permissionGroup;
         mFeatureProvider = FeatureFactory.getFactory(context)
                 .getApplicationFeatureProvider(context);
     }
@@ -44,7 +48,7 @@
                     } else {
                         preference.setVisible(true);
                         preference.setSummary(mContext.getResources().getQuantityString(
-                                R.plurals.enterprise_privacy_number_packages, num, num));
+                                R.plurals.enterprise_privacy_number_packages_actionable, num, num));
                     }
                 });
     }
@@ -53,4 +57,15 @@
     public boolean isAvailable() {
         return true;
     }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!getPreferenceKey().equals(preference.getKey())) {
+            return false;
+        }
+        final Intent intent = new Intent(Intent.ACTION_MANAGE_PERMISSION_APPS)
+                .putExtra(Intent.EXTRA_PERMISSION_NAME, mPermissionGroup);
+        mContext.startActivity(intent);
+        return true;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.java
index 6efccfc..a998fb5 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceControllerTest.java
@@ -20,6 +20,7 @@
 
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.Config;
 
@@ -33,7 +34,8 @@
 
     public AdminGrantedCameraPermissionPreferenceControllerTest() {
         super("enterprise_privacy_number_camera_access_packages",
-                new String[] {Manifest.permission.CAMERA});
+                new String[] {Manifest.permission.CAMERA},
+                Manifest.permission_group.CAMERA);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java
index a23ad8b..e7aa358 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceControllerTest.java
@@ -20,6 +20,7 @@
 
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.Config;
 
@@ -34,7 +35,8 @@
     public AdminGrantedLocationPermissionsPreferenceControllerTest() {
         super("enterprise_privacy_number_location_access_packages",
                 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION,
-                        Manifest.permission.ACCESS_FINE_LOCATION});
+                        Manifest.permission.ACCESS_FINE_LOCATION},
+                Manifest.permission_group.LOCATION);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.java
index 39a715f..8c84af2 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceControllerTest.java
@@ -20,6 +20,7 @@
 
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.Config;
 
@@ -33,7 +34,8 @@
 
     public AdminGrantedMicrophonePermissionPreferenceControllerTest() {
         super("enterprise_privacy_number_microphone_access_packages",
-                new String[] {Manifest.permission.RECORD_AUDIO});
+                new String[] {Manifest.permission.RECORD_AUDIO},
+                Manifest.permission_group.MICROPHONE);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java
index 1f52b0e..0d53fb6 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerBaseTest.java
@@ -16,8 +16,14 @@
 
 package com.android.settings.enterprise;
 
+import android.Manifest;
+import android.content.Intent;
+import android.support.v7.preference.Preference;
+import android.text.TextUtils;
+
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.Config;
 
@@ -30,7 +36,7 @@
         AdminGrantedPermissionsPreferenceControllerTestBase {
 
     public AdminGrantedPermissionsPreferenceControllerBaseTest() {
-        super(null, new String[] {"some.permission"});
+        super("some.key", new String[] {"some.permission"}, "some.permission");
     }
 
     @Override
@@ -43,12 +49,14 @@
             AdminGrantedPermissionsPreferenceControllerBase {
 
         AdminGrantedPermissionsPreferenceControllerBaseTestable() {
-            super(AdminGrantedPermissionsPreferenceControllerBaseTest.this.mContext, mPermissions);
+            super(AdminGrantedPermissionsPreferenceControllerBaseTest.this.mContext, mPermissions,
+                    mPermissionGroup);
         }
 
         @Override
         public String getPreferenceKey() {
-            return null;
+            return "some.key";
         }
     }
 }
+
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
index 821fb34..5a70b7a 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
@@ -17,6 +17,7 @@
 package com.android.settings.enterprise;
 
 import android.content.Context;
+import android.content.Intent;
 import android.content.res.Resources;
 import android.support.v7.preference.Preference;
 
@@ -27,6 +28,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Answers;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
@@ -36,6 +38,7 @@
 import static org.mockito.Mockito.anyObject;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 /**
@@ -45,6 +48,7 @@
 
     protected final String mKey;
     protected final String[] mPermissions;
+    protected final String mPermissionGroup;
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     protected Context mContext;
@@ -52,9 +56,11 @@
 
     protected AdminGrantedPermissionsPreferenceControllerBase mController;
 
-    public AdminGrantedPermissionsPreferenceControllerTestBase(String key, String[] permissions) {
+    public AdminGrantedPermissionsPreferenceControllerTestBase(String key, String[] permissions,
+            String permissionGroup) {
         mKey = key;
         mPermissions = permissions;
+        mPermissionGroup = permissionGroup;
     }
 
     @Before
@@ -81,8 +87,9 @@
         preference.setVisible(false);
 
         setNumberOfPackagesWithAdminGrantedPermissions(20);
-        when(mContext.getResources().getQuantityString(R.plurals.enterprise_privacy_number_packages,
-                20, 20)).thenReturn("20 packages");
+        when(mContext.getResources().getQuantityString(
+                R.plurals.enterprise_privacy_number_packages_actionable,20, 20))
+                .thenReturn("20 packages");
         mController.updateState(preference);
         assertThat(preference.getSummary()).isEqualTo("20 packages");
         assertThat(preference.isVisible()).isTrue();
@@ -99,8 +106,19 @@
 
     @Test
     public void testHandlePreferenceTreeClick() {
-        assertThat(mController.handlePreferenceTreeClick(new Preference(mContext, null, 0, 0)))
-                .isFalse();
+        final Preference preference = new Preference(mContext, null, 0, 0);
+        preference.setKey(mKey);
+
+        assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
+
+        final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class);
+        verify(mContext).startActivity(argumentCaptor.capture());
+
+        final Intent intent = argumentCaptor.getValue();
+
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MANAGE_PERMISSION_APPS);
+        assertThat(intent.getStringExtra(Intent.EXTRA_PERMISSION_NAME)).
+                isEqualTo(mPermissionGroup);
     }
 
     @Test