diff --git a/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java b/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java index 35648c8f8c0..83942628d15 100644 --- a/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java +++ b/src/com/android/settings/enterprise/AdminGrantedCameraPermissionPreferenceController.java @@ -24,7 +24,7 @@ public class AdminGrantedCameraPermissionPreferenceController extends = "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 f5705580aaf..4dfc4be08c2 100644 --- a/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java +++ b/src/com/android/settings/enterprise/AdminGrantedLocationPermissionsPreferenceController.java @@ -25,7 +25,7 @@ public class AdminGrantedLocationPermissionsPreferenceController extends 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 842235d64e2..e2ab55511a2 100644 --- a/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java +++ b/src/com/android/settings/enterprise/AdminGrantedMicrophonePermissionPreferenceController.java @@ -24,7 +24,8 @@ public class AdminGrantedMicrophonePermissionPreferenceController extends = "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 2b972a5207d..5263817554b 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 @@ import com.android.settings.overlay.FeatureFactory; 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 @@ public abstract class AdminGrantedPermissionsPreferenceControllerBase extends Pr } 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 abstract class AdminGrantedPermissionsPreferenceControllerBase extends Pr 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 6efccfcf9ba..a998fb57f38 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 android.Manifest; 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 final class AdminGrantedCameraPermissionPreferenceControllerTest extends 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 a23ad8bfba3..e7aa358f5d1 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 android.Manifest; 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 final class AdminGrantedLocationPermissionsPreferenceControllerTest exten 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 39a715f66dc..8c84af27ab7 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 android.Manifest; 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 final class AdminGrantedMicrophonePermissionPreferenceControllerTest exte 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 1f52b0ed1a9..0d53fb6daa4 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 @@ public final class AdminGrantedPermissionsPreferenceControllerBaseTest extends AdminGrantedPermissionsPreferenceControllerTestBase { public AdminGrantedPermissionsPreferenceControllerBaseTest() { - super(null, new String[] {"some.permission"}); + super("some.key", new String[] {"some.permission"}, "some.permission"); } @Override @@ -43,12 +49,14 @@ public final class AdminGrantedPermissionsPreferenceControllerBaseTest extends 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 821fb342cf3..5a70b7a4f40 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 com.android.settings.testutils.FakeFeatureFactory; 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 com.google.common.truth.Truth.assertThat; 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 @@ public abstract class AdminGrantedPermissionsPreferenceControllerTestBase { 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 @@ public abstract class AdminGrantedPermissionsPreferenceControllerTestBase { 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 @@ public abstract class AdminGrantedPermissionsPreferenceControllerTestBase { 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 @@ public abstract class AdminGrantedPermissionsPreferenceControllerTestBase { @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 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