Fixed testAudioRestriction for managed profile owner.
Disabled testAudioRestriction for managed profile, because
DISALLOW_UNMUTE_MICROPHONE can only be set by device owners
and profile owners on the primary user. Added/enabled
tests for DISALLOW_ADJUST_VOLUME. Also added permission
to run AudioManager.setMicrophoneMute().
BUG:27743508
Change-Id: Ieb5aeb07fc352bd1de7b67c61a46b0198ba38237
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml
index 5bd902c..eb337a3 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml
@@ -23,6 +23,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application>
<uses-library android:name="android.test.runner" />
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AudioRestrictionTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AudioRestrictionTest.java
index 0c60fa4..838580b 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AudioRestrictionTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/AudioRestrictionTest.java
@@ -27,6 +27,12 @@
public class AudioRestrictionTest extends BaseDeviceAdminTest {
private AudioManager mAudioManager;
+ private final Callable<Boolean> mCheckIfMasterVolumeMuted = new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ return mDevicePolicyManager.isMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT);
+ }
+ };
@Override
protected void setUp() throws Exception {
@@ -34,7 +40,37 @@
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
- private void disallowAdjustVolumeTestInternal(boolean setByAddUserRestiction) throws Exception {
+ // Here we test that DISALLOW_ADJUST_VOLUME disallows to unmute volume.
+ public void testDisallowAdjustVolume_muted() throws Exception {
+ // If we check that some value did not change, we must wait until the action is applied.
+ // Method waitUntil() may check old value before changes took place.
+ final int WAIT_TIME_MS = 1000;
+ final boolean initVolumeMuted =
+ mDevicePolicyManager.isMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT);
+ try {
+ // Unmute volume, if necessary.
+ if (initVolumeMuted) {
+ mDevicePolicyManager.setMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT, false);
+ waitUntil(false, mCheckIfMasterVolumeMuted);
+ }
+
+ // DISALLOW_ADJUST_VOLUME must mute volume.
+ mDevicePolicyManager.addUserRestriction(ADMIN_RECEIVER_COMPONENT,
+ UserManager.DISALLOW_ADJUST_VOLUME);
+ waitUntil(true, mCheckIfMasterVolumeMuted);
+
+ // Unmute should not have effect because the restriction does not allow this.
+ mDevicePolicyManager.setMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT, false);
+ Thread.sleep(WAIT_TIME_MS);
+ assertTrue(mDevicePolicyManager.isMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT));
+ } finally {
+ mDevicePolicyManager.clearUserRestriction(ADMIN_RECEIVER_COMPONENT,
+ UserManager.DISALLOW_ADJUST_VOLUME);
+ mDevicePolicyManager.setMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT, initVolumeMuted);
+ }
+ }
+
+ public void testDisallowAdjustVolume() throws Exception {
try {
// Set volume of ringtone to be 1.
mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 1, /* flag= */ 0);
@@ -42,12 +78,8 @@
// Disallow adjusting volume.
mDevicePolicyManager.addUserRestriction(ADMIN_RECEIVER_COMPONENT,
UserManager.DISALLOW_ADJUST_VOLUME);
- waitUntil(true, new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mDevicePolicyManager.isMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT);
- }
- });
+ waitUntil(true, mCheckIfMasterVolumeMuted);
+
// Verify that volume can't be changed.
mAudioManager.adjustVolume(AudioManager.ADJUST_RAISE, /* flag= */ 0);
assertEquals(1, mAudioManager.getStreamVolume(AudioManager.STREAM_RING));
@@ -55,12 +87,8 @@
// Allowing adjusting volume.
mDevicePolicyManager.clearUserRestriction(ADMIN_RECEIVER_COMPONENT,
UserManager.DISALLOW_ADJUST_VOLUME);
- waitUntil(false, new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mDevicePolicyManager.isMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT);
- }
- });
+ waitUntil(false, mCheckIfMasterVolumeMuted);
+
// Verify the volume can be changed now.
mAudioManager.adjustVolume(AudioManager.ADJUST_RAISE, /* flag= */ 0);
waitUntil(2, new Callable<Integer>() {
@@ -73,12 +101,7 @@
// Clear the restriction.
mDevicePolicyManager.clearUserRestriction(ADMIN_RECEIVER_COMPONENT,
UserManager.DISALLOW_ADJUST_VOLUME);
- waitUntil(false, new Callable<Boolean>() {
- @Override
- public Boolean call() throws Exception {
- return mDevicePolicyManager.isMasterVolumeMuted(ADMIN_RECEIVER_COMPONENT);
- }
- });
+ waitUntil(false, mCheckIfMasterVolumeMuted);
}
}
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
index 32110de..0f90959 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
@@ -91,4 +91,10 @@
public void testDisallowSetWallpaper_allowed() throws Exception {
// Managed profile doesn't have wallpaper.
}
+
+ @Override
+ public void testAudioRestriction() throws Exception {
+ // DISALLOW_UNMUTE_MICROPHONE and DISALLOW_ADJUST_VOLUME can only be set by device owners
+ // and profile owners on the primary user.
+ }
}