summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yan Han <yanha@google.com> 2023-04-19 17:06:27 +0200
committer Yan Han <yanha@google.com> 2023-05-10 16:53:43 +0200
commit71afeaa6f311f3683d7ced694e74a20391eb0b9e (patch)
tree1c080c45cdb06b683d42f1101408ab238299e8b2
parent091b2e2e908c728ad948094c68ff1248b2332519 (diff)
Add wrapper for AudioManager, allowing it to be faked in tests
Makes HdmiControlService's test constructor take a wrapper for AudioManager, allowing it to be to be faked in unit tests in a similar way to AudioDeviceVolumeManager. Adds the FakeAudioFramework class, which exposes a fake for both AudioManager and AudioDeviceVolumeManager. FakeAudioFramework stores the shared internal state for both managers, simulating AudioService. Renames the existing wrapper and wrapper interface for AudioDeviceVolumeManager to make it more consistent with PowerManagerInternal. For example, instead of ThingWrapper and FakeThingWrapper implementing ThingWrapperInterface, we have DefaultThingWrapper and FakeThingWrapper implementing ThingWrapper. Bug: 217923086 Test: atest com.android.server.hdmi Change-Id: Ia9d5f7aa382223d523771b8d0382d40d622aa292
-rw-r--r--services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java57
-rw-r--r--services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java61
-rw-r--r--services/core/java/com/android/server/hdmi/AudioManagerWrapper.java105
-rw-r--r--services/core/java/com/android/server/hdmi/DefaultAudioDeviceVolumeManagerWrapper.java (renamed from services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java)44
-rw-r--r--services/core/java/com/android/server/hdmi/DefaultAudioManagerWrapper.java115
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java31
-rw-r--r--services/core/java/com/android/server/hdmi/VolumeControlAction.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java15
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java17
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java14
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java166
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java15
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java5
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java5
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/FakeAudioFramework.java228
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java106
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java13
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java17
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java22
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java5
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiEarcLocalDeviceTxTest.java16
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java16
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToAudioSystemAvbTest.java9
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToTvAvbTest.java9
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java16
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java5
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java5
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java16
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java36
36 files changed, 710 insertions, 499 deletions
diff --git a/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java
index 438c1ea01e29..23e6a12e590d 100644
--- a/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java
+++ b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java
@@ -16,9 +16,11 @@
package com.android.server.hdmi;
+import static android.media.AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener;
+import static android.media.AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener;
+
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
-import android.content.Context;
import android.media.AudioDeviceAttributes;
import android.media.AudioDeviceVolumeManager;
import android.media.VolumeInfo;
@@ -26,42 +28,37 @@ import android.media.VolumeInfo;
import java.util.concurrent.Executor;
/**
- * Wrapper for {@link AudioDeviceVolumeManager}. Creates an instance of the class and directly
- * passes method calls to that instance.
+ * Interface with the methods from {@link AudioDeviceVolumeManager} used by the HDMI framework.
+ * Allows the class to be faked for tests.
+ *
+ * See implementations {@link DefaultAudioDeviceVolumeManagerWrapper} and
+ * {@link FakeAudioFramework.FakeAudioDeviceVolumeManagerWrapper}.
*/
-public class AudioDeviceVolumeManagerWrapper
- implements AudioDeviceVolumeManagerWrapperInterface {
-
- private static final String TAG = "AudioDeviceVolumeManagerWrapper";
-
- private final AudioDeviceVolumeManager mAudioDeviceVolumeManager;
-
- public AudioDeviceVolumeManagerWrapper(Context context) {
- mAudioDeviceVolumeManager = new AudioDeviceVolumeManager(context);
- }
+public interface AudioDeviceVolumeManagerWrapper {
- @Override
- public void addOnDeviceVolumeBehaviorChangedListener(
+ /**
+ * Wrapper for {@link AudioDeviceVolumeManager#addOnDeviceVolumeBehaviorChangedListener(
+ * Executor, OnDeviceVolumeBehaviorChangedListener)}
+ */
+ void addOnDeviceVolumeBehaviorChangedListener(
@NonNull @CallbackExecutor Executor executor,
- @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener)
- throws SecurityException {
- mAudioDeviceVolumeManager.addOnDeviceVolumeBehaviorChangedListener(executor, listener);
- }
+ @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener);
- @Override
- public void removeOnDeviceVolumeBehaviorChangedListener(
- @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener) {
- mAudioDeviceVolumeManager.removeOnDeviceVolumeBehaviorChangedListener(listener);
- }
+ /**
+ * Wrapper for {@link AudioDeviceVolumeManager#removeOnDeviceVolumeBehaviorChangedListener(
+ * OnDeviceVolumeBehaviorChangedListener)}
+ */
+ void removeOnDeviceVolumeBehaviorChangedListener(
+ @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener);
- @Override
- public void setDeviceAbsoluteVolumeBehavior(
+ /**
+ * Wrapper for {@link AudioDeviceVolumeManager#setDeviceAbsoluteVolumeBehavior(
+ * AudioDeviceAttributes, VolumeInfo, Executor, OnAudioDeviceVolumeChangedListener, boolean)}
+ */
+ void setDeviceAbsoluteVolumeBehavior(
@NonNull AudioDeviceAttributes device,
@NonNull VolumeInfo volume,
@NonNull @CallbackExecutor Executor executor,
@NonNull AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener vclistener,
- boolean handlesVolumeAdjustment) {
- mAudioDeviceVolumeManager.setDeviceAbsoluteVolumeBehavior(device, volume, executor,
- vclistener, handlesVolumeAdjustment);
- }
+ boolean handlesVolumeAdjustment);
}
diff --git a/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java
deleted file mode 100644
index 1a1d4c19358b..000000000000
--- a/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.hdmi;
-
-import static android.media.AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener;
-import static android.media.AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener;
-
-import android.annotation.CallbackExecutor;
-import android.annotation.NonNull;
-import android.media.AudioDeviceAttributes;
-import android.media.AudioDeviceVolumeManager;
-import android.media.VolumeInfo;
-
-import java.util.concurrent.Executor;
-
-/**
- * Interface with the methods from {@link AudioDeviceVolumeManager} used by the HDMI framework.
- * Allows the class to be faked for tests.
- */
-public interface AudioDeviceVolumeManagerWrapperInterface {
-
- /**
- * Wrapper for {@link AudioDeviceVolumeManager#addOnDeviceVolumeBehaviorChangedListener(
- * Executor, OnDeviceVolumeBehaviorChangedListener)}
- */
- void addOnDeviceVolumeBehaviorChangedListener(
- @NonNull @CallbackExecutor Executor executor,
- @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener);
-
- /**
- * Wrapper for {@link AudioDeviceVolumeManager#removeOnDeviceVolumeBehaviorChangedListener(
- * OnDeviceVolumeBehaviorChangedListener)}
- */
- void removeOnDeviceVolumeBehaviorChangedListener(
- @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener);
-
- /**
- * Wrapper for {@link AudioDeviceVolumeManager#setDeviceAbsoluteVolumeBehavior(
- * AudioDeviceAttributes, VolumeInfo, Executor, OnAudioDeviceVolumeChangedListener, boolean)}
- */
- void setDeviceAbsoluteVolumeBehavior(
- @NonNull AudioDeviceAttributes device,
- @NonNull VolumeInfo volume,
- @NonNull @CallbackExecutor Executor executor,
- @NonNull AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener vclistener,
- boolean handlesVolumeAdjustment);
-}
diff --git a/services/core/java/com/android/server/hdmi/AudioManagerWrapper.java b/services/core/java/com/android/server/hdmi/AudioManagerWrapper.java
new file mode 100644
index 000000000000..fd4dd516fd51
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/AudioManagerWrapper.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+import android.annotation.NonNull;
+import android.media.AudioAttributes;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioDeviceVolumeManager;
+import android.media.AudioManager;
+
+import java.util.List;
+
+/**
+ * Interface with the methods from {@link AudioDeviceVolumeManager} used by the HDMI control
+ * framework. Allows the class to be faked for tests.
+ *
+ * See implementations {@link DefaultAudioManagerWrapper} and
+ * {@link FakeAudioFramework.FakeAudioManagerWrapper}.
+ */
+public interface AudioManagerWrapper {
+
+ /**
+ * Wraps {@link AudioManager#adjustStreamVolume(int, int, int)}
+ */
+ void adjustStreamVolume(int streamType, int direction,
+ @AudioManager.PublicVolumeFlags int flags);
+
+ /**
+ * Wraps {@link AudioManager#setStreamVolume(int, int, int)}
+ */
+ void setStreamVolume(int streamType, int index, @AudioManager.PublicVolumeFlags int flags);
+
+ /**
+ * Wraps {@link AudioManager#getStreamVolume(int)}
+ */
+ int getStreamVolume(int streamType);
+
+ /**
+ * Wraps {@link AudioManager#getStreamMinVolume(int)}
+ */
+ int getStreamMinVolume(int streamType);
+
+ /**
+ * Wraps {@link AudioManager#getStreamMaxVolume(int)}
+ */
+ int getStreamMaxVolume(int streamType);
+
+ /**
+ * Wraps {@link AudioManager#isStreamMute(int)}
+ */
+ boolean isStreamMute(int streamType);
+
+ /**
+ * Wraps {@link AudioManager#setStreamMute(int, boolean)}
+ */
+ void setStreamMute(int streamType, boolean state);
+
+ /**
+ * Wraps {@link AudioManager#setHdmiSystemAudioSupported(boolean)}
+ */
+ int setHdmiSystemAudioSupported(boolean on);
+
+ /**
+ * Wraps {@link AudioManager#setWiredDeviceConnectionState(AudioDeviceAttributes, int)}
+ */
+ void setWiredDeviceConnectionState(AudioDeviceAttributes attributes, int state);
+
+ /**
+ * Wraps {@link AudioManager#setWiredDeviceConnectionState(int, int, String, String)}
+ */
+ void setWiredDeviceConnectionState(int device, int state, String address, String name);
+
+ /**
+ * Wraps {@link AudioManager#getDeviceVolumeBehavior(AudioDeviceAttributes)}
+ */
+ @AudioManager.DeviceVolumeBehavior
+ int getDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device);
+
+ /**
+ * Wraps {@link AudioManager#setDeviceVolumeBehavior(AudioDeviceAttributes, int)}
+ */
+ void setDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device,
+ @AudioManager.DeviceVolumeBehavior int deviceVolumeBehavior);
+
+ /**
+ * Wraps {@link AudioManager#getDevicesForAttributes(AudioAttributes)}
+ */
+ @NonNull
+ List<AudioDeviceAttributes> getDevicesForAttributes(
+ @NonNull AudioAttributes attributes);
+}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java b/services/core/java/com/android/server/hdmi/DefaultAudioDeviceVolumeManagerWrapper.java
index d33ef9bc8879..b9a78c93989f 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java
+++ b/services/core/java/com/android/server/hdmi/DefaultAudioDeviceVolumeManagerWrapper.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2022 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,44 +16,45 @@
package com.android.server.hdmi;
-import static android.media.AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener;
-import static android.media.AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener;
-
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
+import android.content.Context;
import android.media.AudioDeviceAttributes;
import android.media.AudioDeviceVolumeManager;
-import android.media.AudioManager;
import android.media.VolumeInfo;
-import java.util.HashSet;
-import java.util.Set;
import java.util.concurrent.Executor;
/**
- * Wrapper for {@link AudioDeviceVolumeManager} that stubs its methods. Useful for testing.
+ * "Default" wrapper for {@link AudioDeviceVolumeManager}, as opposed to a "Fake" wrapper for
+ * testing - see {@link FakeAudioFramework.FakeAudioDeviceVolumeManagerWrapper}.
+ *
+ * Creates an instance of {@link AudioDeviceVolumeManager} and directly passes method calls
+ * to that instance.
*/
-public class FakeAudioDeviceVolumeManagerWrapper implements
- AudioDeviceVolumeManagerWrapperInterface {
+public class DefaultAudioDeviceVolumeManagerWrapper
+ implements AudioDeviceVolumeManagerWrapper {
+
+ private static final String TAG = "AudioDeviceVolumeManagerWrapper";
- private final Set<OnDeviceVolumeBehaviorChangedListener> mVolumeBehaviorListeners;
+ private final AudioDeviceVolumeManager mAudioDeviceVolumeManager;
- public FakeAudioDeviceVolumeManagerWrapper() {
- mVolumeBehaviorListeners = new HashSet<>();
+ public DefaultAudioDeviceVolumeManagerWrapper(Context context) {
+ mAudioDeviceVolumeManager = new AudioDeviceVolumeManager(context);
}
@Override
public void addOnDeviceVolumeBehaviorChangedListener(
@NonNull @CallbackExecutor Executor executor,
- @NonNull OnDeviceVolumeBehaviorChangedListener listener)
+ @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener)
throws SecurityException {
- mVolumeBehaviorListeners.add(listener);
+ mAudioDeviceVolumeManager.addOnDeviceVolumeBehaviorChangedListener(executor, listener);
}
@Override
public void removeOnDeviceVolumeBehaviorChangedListener(
- @NonNull OnDeviceVolumeBehaviorChangedListener listener) {
- mVolumeBehaviorListeners.remove(listener);
+ @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener) {
+ mAudioDeviceVolumeManager.removeOnDeviceVolumeBehaviorChangedListener(listener);
}
@Override
@@ -61,12 +62,9 @@ public class FakeAudioDeviceVolumeManagerWrapper implements
@NonNull AudioDeviceAttributes device,
@NonNull VolumeInfo volume,
@NonNull @CallbackExecutor Executor executor,
- @NonNull OnAudioDeviceVolumeChangedListener vclistener,
+ @NonNull AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener vclistener,
boolean handlesVolumeAdjustment) {
- // Notify all volume behavior listeners that the device adopted absolute volume behavior
- for (OnDeviceVolumeBehaviorChangedListener listener : mVolumeBehaviorListeners) {
- listener.onDeviceVolumeBehaviorChanged(device,
- AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
- }
+ mAudioDeviceVolumeManager.setDeviceAbsoluteVolumeBehavior(device, volume, executor,
+ vclistener, handlesVolumeAdjustment);
}
}
diff --git a/services/core/java/com/android/server/hdmi/DefaultAudioManagerWrapper.java b/services/core/java/com/android/server/hdmi/DefaultAudioManagerWrapper.java
new file mode 100644
index 000000000000..061e145c27f3
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/DefaultAudioManagerWrapper.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.media.AudioAttributes;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioManager;
+
+import java.util.List;
+
+/**
+ * "Default" wrapper for {@link AudioManager}, as opposed to a "Fake" wrapper for testing -
+ * see {@link FakeAudioFramework.FakeAudioManagerWrapper}.
+ *
+ * Creates an instance of {@link AudioManager} and directly passes method calls to that instance.
+ *
+*/
+public class DefaultAudioManagerWrapper implements AudioManagerWrapper {
+
+ private static final String TAG = "DefaultAudioManagerWrapper";
+
+ private final AudioManager mAudioManager;
+
+ public DefaultAudioManagerWrapper(Context context) {
+ mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ }
+
+ @Override
+ public void adjustStreamVolume(int streamType, int direction,
+ @AudioManager.PublicVolumeFlags int flags) {
+ mAudioManager.adjustStreamVolume(streamType, direction, flags);
+ }
+
+ @Override
+ public void setStreamVolume(int streamType, int index,
+ @AudioManager.PublicVolumeFlags int flags) {
+ mAudioManager.setStreamVolume(streamType, index, flags);
+ }
+
+ @Override
+ public int getStreamVolume(int streamType) {
+ return mAudioManager.getStreamVolume(streamType);
+ }
+
+ @Override
+ public int getStreamMinVolume(int streamType) {
+ return mAudioManager.getStreamMinVolume(streamType);
+ }
+
+ @Override
+ public int getStreamMaxVolume(int streamType) {
+ return mAudioManager.getStreamMaxVolume(streamType);
+ }
+
+ @Override
+ public boolean isStreamMute(int streamType) {
+ return mAudioManager.isStreamMute(streamType);
+ }
+
+ @Override
+ public void setStreamMute(int streamType, boolean state) {
+ mAudioManager.setStreamMute(streamType, state);
+ }
+
+ @Override
+ public int setHdmiSystemAudioSupported(boolean on) {
+ return mAudioManager.setHdmiSystemAudioSupported(on);
+ }
+
+ @Override
+ public void setWiredDeviceConnectionState(AudioDeviceAttributes attributes, int state) {
+ mAudioManager.setWiredDeviceConnectionState(attributes, state);
+ }
+
+ @Override
+ public void setWiredDeviceConnectionState(int device, int state, String address, String name) {
+ mAudioManager.setWiredDeviceConnectionState(device, state, address, name);
+ }
+
+ @Override
+ @AudioManager.DeviceVolumeBehavior
+ public int getDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device) {
+ return mAudioManager.getDeviceVolumeBehavior(device);
+ }
+
+ @Override
+ public void setDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device,
+ @AudioManager.DeviceVolumeBehavior int deviceVolumeBehavior) {
+ mAudioManager.setDeviceVolumeBehavior(device, deviceVolumeBehavior);
+ }
+
+ @Override
+ @NonNull
+ public List<AudioDeviceAttributes> getDevicesForAttributes(
+ @NonNull AudioAttributes attributes) {
+ return mAudioManager.getDevicesForAttributes(attributes);
+ }
+
+}
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index e8e9b379e74b..741e730da022 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -491,10 +491,10 @@ public class HdmiControlService extends SystemService {
private PowerManagerInternalWrapper mPowerManagerInternal;
@Nullable
- private AudioManager mAudioManager;
+ private AudioManagerWrapper mAudioManager;
@Nullable
- private AudioDeviceVolumeManagerWrapperInterface mAudioDeviceVolumeManager;
+ private AudioDeviceVolumeManagerWrapper mAudioDeviceVolumeManager;
@Nullable
private Looper mIoLooper;
@@ -528,18 +528,20 @@ public class HdmiControlService extends SystemService {
/**
* Constructor for testing.
*
- * It's critical to use a fake AudioDeviceVolumeManager because a normally instantiated
- * AudioDeviceVolumeManager can access the "real" AudioService on the DUT.
+ * Takes fakes for AudioManager and AudioDeviceVolumeManager.
*
- * @see FakeAudioDeviceVolumeManagerWrapper
+ * This is especially important for AudioDeviceVolumeManager because a normally instantiated
+ * AudioDeviceVolumeManager can access the "real" AudioService on the DUT.
*/
@VisibleForTesting HdmiControlService(Context context, List<Integer> deviceTypes,
- AudioDeviceVolumeManagerWrapperInterface audioDeviceVolumeManager) {
+ AudioManagerWrapper audioManager,
+ AudioDeviceVolumeManagerWrapper audioDeviceVolumeManager) {
super(context);
mCecLocalDevices = deviceTypes;
mSettingsObserver = new SettingsObserver(mHandler);
mHdmiCecConfig = new HdmiCecConfig(context);
mDeviceConfig = new DeviceConfigWrapper();
+ mAudioManager = audioManager;
mAudioDeviceVolumeManager = audioDeviceVolumeManager;
}
@@ -934,11 +936,6 @@ public class HdmiControlService extends SystemService {
}
@VisibleForTesting
- void setAudioManager(AudioManager audioManager) {
- mAudioManager = audioManager;
- }
-
- @VisibleForTesting
void setCecController(HdmiCecController cecController) {
mCecController = cecController;
}
@@ -975,11 +972,13 @@ public class HdmiControlService extends SystemService {
Context.TV_INPUT_SERVICE);
mPowerManager = new PowerManagerWrapper(getContext());
mPowerManagerInternal = new PowerManagerInternalWrapper();
- mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
+ if (mAudioManager == null) {
+ mAudioManager = new DefaultAudioManagerWrapper(getContext());
+ }
mStreamMusicMaxVolume = getAudioManager().getStreamMaxVolume(AudioManager.STREAM_MUSIC);
if (mAudioDeviceVolumeManager == null) {
mAudioDeviceVolumeManager =
- new AudioDeviceVolumeManagerWrapper(getContext());
+ new DefaultAudioDeviceVolumeManagerWrapper(getContext());
}
getAudioDeviceVolumeManager().addOnDeviceVolumeBehaviorChangedListener(
mServiceThreadExecutor, this::onDeviceVolumeBehaviorChanged);
@@ -1773,7 +1772,7 @@ public class HdmiControlService extends SystemService {
== HdmiControlManager.VOLUME_CONTROL_DISABLED) {
return;
}
- AudioManager audioManager = getAudioManager();
+ AudioManagerWrapper audioManager = getAudioManager();
boolean muted = audioManager.isStreamMute(AudioManager.STREAM_MUSIC);
if (mute) {
if (!muted) {
@@ -3485,7 +3484,7 @@ public class HdmiControlService extends SystemService {
* Returns null before the boot phase {@link SystemService#PHASE_SYSTEM_SERVICES_READY}.
*/
@Nullable
- AudioManager getAudioManager() {
+ AudioManagerWrapper getAudioManager() {
return mAudioManager;
}
@@ -3493,7 +3492,7 @@ public class HdmiControlService extends SystemService {
* Returns null before the boot phase {@link SystemService#PHASE_SYSTEM_SERVICES_READY}.
*/
@Nullable
- private AudioDeviceVolumeManagerWrapperInterface getAudioDeviceVolumeManager() {
+ private AudioDeviceVolumeManagerWrapper getAudioDeviceVolumeManager() {
return mAudioDeviceVolumeManager;
}
diff --git a/services/core/java/com/android/server/hdmi/VolumeControlAction.java b/services/core/java/com/android/server/hdmi/VolumeControlAction.java
index d5761e170d1a..30b188c5dd78 100644
--- a/services/core/java/com/android/server/hdmi/VolumeControlAction.java
+++ b/services/core/java/com/android/server/hdmi/VolumeControlAction.java
@@ -159,7 +159,7 @@ final class VolumeControlAction extends HdmiCecFeatureAction {
// Update audio status if current volume position is edge of volume bar,
// i.e max or min volume.
- AudioManager audioManager = tv().getService().getAudioManager();
+ AudioManagerWrapper audioManager = tv().getService().getAudioManager();
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (mIsVolumeUp) {
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
index ad1ecf1ad1c8..da082682e912 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.ContextWrapper;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -61,19 +60,9 @@ public class ActiveSourceActionTest {
public void setUp() throws Exception {
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return new AudioManager() {
- @Override
- public void setWiredDeviceConnectionState(
- int type, int state, String address, String name) {
- // Do nothing.
- }
- };
- }
-
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
return false;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java
index 3df0449c14b7..5be3c8e4671c 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java
@@ -25,7 +25,6 @@ import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.ContextWrapper;
import android.hardware.tv.cec.V1_0.SendMessageResult;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -37,8 +36,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.Collections;
@@ -58,27 +55,21 @@ public class ArcInitiationActionFromAvrTest {
private TestLooper mTestLooper = new TestLooper();
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
- @Mock
- private AudioManager mAudioManager;
-
@Before
public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
HdmiControlService hdmiControlService =
new HdmiControlService(mContextSpy, Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
return false;
}
- @Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
@Override
boolean isAddressAllocated() {
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java
index 61ab99b1d017..7845c307c15f 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java
@@ -27,7 +27,6 @@ import android.content.ContextWrapper;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.tv.cec.V1_0.SendMessageResult;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -39,7 +38,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
@@ -61,8 +59,6 @@ public class ArcTerminationActionFromAvrTest {
private TestLooper mTestLooper = new TestLooper();
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
- @Mock
- private AudioManager mAudioManager;
@Before
public void setUp() throws Exception {
@@ -70,14 +66,12 @@ public class ArcTerminationActionFromAvrTest {
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
HdmiControlService hdmiControlService =
new HdmiControlService(mContextSpy, Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
-
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
return false;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java b/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java
index 759b271e73eb..fa8927e683dc 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java
@@ -24,16 +24,11 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_BOOT_UP;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.TruthJUnit.assume;
-import static org.mockito.AdditionalMatchers.not;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -59,8 +54,6 @@ import com.android.server.SystemService;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.InOrder;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
@@ -90,14 +83,15 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
private Context mContextSpy;
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
- @Mock protected AudioManager mAudioManager;
- protected FakeAudioDeviceVolumeManagerWrapper mAudioDeviceVolumeManager;
+ protected FakeAudioFramework mAudioFramework;
+ protected AudioManagerWrapper mAudioManager;
+ protected AudioDeviceVolumeManagerWrapper mAudioDeviceVolumeManager;
protected TestLooper mTestLooper = new TestLooper();
protected FakeNativeWrapper mNativeWrapper;
- // Audio Status given by the System Audio device in its initial <Report Audio Status> that
- // triggers AVB being enabled
+ // Default Audio Status given by the System Audio device in its initial <Report Audio Status>
+ // that triggers AVB being enabled
private static final AudioStatus INITIAL_SYSTEM_AUDIO_DEVICE_STATUS =
new AudioStatus(50, false);
@@ -110,6 +104,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
.setMinVolumeIndex(AudioStatus.MIN_VOLUME)
.build();
+ private static final int EMPTY_FLAGS = 0;
+
protected abstract HdmiCecLocalDevice createLocalDevice(HdmiControlService hdmiControlService);
protected abstract int getPhysicalAddress();
@@ -126,17 +122,17 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
mContextSpy = spy(new ContextWrapper(
InstrumentationRegistry.getInstrumentation().getTargetContext()));
- mAudioDeviceVolumeManager = spy(new FakeAudioDeviceVolumeManagerWrapper());
+ mAudioFramework = new FakeAudioFramework();
+ mAudioManager = spy(mAudioFramework.getAudioManager());
+ mAudioDeviceVolumeManager = spy(mAudioFramework.getAudioDeviceVolumeManager());
+
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 1, EMPTY_FLAGS);
+ mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(getDeviceType()),
- mAudioDeviceVolumeManager) {
- @Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
-
+ mAudioManager, mAudioDeviceVolumeManager) {
@Override
protected void writeStringSystemProperty(String key, String value) {
// do nothing
@@ -186,22 +182,12 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_BOOT_UP);
mTestLooper.dispatchAll();
- // Simulate AudioManager's behavior and response when setDeviceVolumeBehavior is called
- doAnswer(invocation -> {
- setDeviceVolumeBehavior(invocation.getArgument(0), invocation.getArgument(1));
- return null;
- }).when(mAudioManager).setDeviceVolumeBehavior(any(), anyInt());
-
- // Set starting volume behavior
- doReturn(AudioManager.DEVICE_VOLUME_BEHAVIOR_VARIABLE)
- .when(mAudioManager).getDeviceVolumeBehavior(eq(getAudioOutputDevice()));
-
// Audio service always plays STREAM_MUSIC on the device we need
- doReturn(Collections.singletonList(getAudioOutputDevice())).when(mAudioManager)
- .getDevicesForAttributes(HdmiControlService.STREAM_MUSIC_ATTRIBUTES);
+ mAudioFramework.setDevicesForAttributes(HdmiControlService.STREAM_MUSIC_ATTRIBUTES,
+ Collections.singletonList(getAudioOutputDevice()));
// Max volume of STREAM_MUSIC
- doReturn(25).when(mAudioManager).getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+ mAudioFramework.setStreamMaxVolume(AudioManager.STREAM_MUSIC, 25);
// Receive messages from devices to make sure they're registered in HdmiCecNetwork
mNativeWrapper.onCecMessage(HdmiCecMessageBuilder.buildGiveDevicePowerStatus(
@@ -221,16 +207,6 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
}
/**
- * Simulates the volume behavior of {@code device} being set to {@code behavior}.
- */
- protected void setDeviceVolumeBehavior(AudioDeviceAttributes device,
- @AudioManager.DeviceVolumeBehavior int behavior) {
- doReturn(behavior).when(mAudioManager).getDeviceVolumeBehavior(eq(device));
- mHdmiControlService.onDeviceVolumeBehaviorChanged(device, behavior);
- mTestLooper.dispatchAll();
- }
-
- /**
* Changes the setting for CEC volume.
*/
protected void setCecVolumeControlSetting(@HdmiControlManager.VolumeControl int setting) {
@@ -278,16 +254,6 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
}
/**
- * Has the device receive a <Report Audio Status> reporting the status in
- * {@link #INITIAL_SYSTEM_AUDIO_DEVICE_STATUS}
- */
- protected void receiveInitialReportAudioStatus() {
- receiveReportAudioStatus(
- INITIAL_SYSTEM_AUDIO_DEVICE_STATUS.getVolume(),
- INITIAL_SYSTEM_AUDIO_DEVICE_STATUS.getMute());
- }
-
- /**
* Has the device receive a <Report Audio Status> message from the System Audio Device.
*/
protected void receiveReportAudioStatus(int volume, boolean mute) {
@@ -303,37 +269,17 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
* Triggers all the conditions required to enable absolute volume behavior.
*/
protected void enableAbsoluteVolumeBehavior() {
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_ENABLED);
receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_SUPPORTED);
enableSystemAudioModeIfNeeded();
- receiveInitialReportAudioStatus();
-
- verifyAbsoluteVolumeEnabled();
- }
-
- /**
- * Verifies that the audio output device's volume behavior was last set to
- * absolute volume behavior.
- */
- protected void verifyAbsoluteVolumeEnabled() {
- InOrder inOrder = inOrder(mAudioManager, mAudioDeviceVolumeManager);
- inOrder.verify(mAudioDeviceVolumeManager, atLeastOnce()).setDeviceAbsoluteVolumeBehavior(
- eq(getAudioOutputDevice()), any(), any(), any(), anyBoolean());
- inOrder.verify(mAudioManager, never()).setDeviceVolumeBehavior(
- eq(getAudioOutputDevice()), not(eq(AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE)));
- }
+ receiveReportAudioStatus(
+ INITIAL_SYSTEM_AUDIO_DEVICE_STATUS.getVolume(),
+ INITIAL_SYSTEM_AUDIO_DEVICE_STATUS.getMute());
- /**
- * Verifies that the audio output device's volume behavior was last set to something other than
- * absolute volume behavior.
- */
- protected void verifyAbsoluteVolumeDisabled() {
- InOrder inOrder = inOrder(mAudioManager, mAudioDeviceVolumeManager);
- inOrder.verify(mAudioManager, atLeastOnce()).setDeviceVolumeBehavior(
- eq(getAudioOutputDevice()), not(eq(AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE)));
- inOrder.verify(mAudioDeviceVolumeManager, never()).setDeviceAbsoluteVolumeBehavior(
- eq(getAudioOutputDevice()), any(), any(), any(), anyBoolean());
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
}
protected void verifyGiveAudioStatusNeverSent() {
@@ -350,7 +296,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
@Test
public void allConditionsExceptSavlSupportMet_sendsSetAudioVolumeLevelAndGiveFeatures() {
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_ENABLED);
enableSystemAudioModeIfNeeded();
@@ -365,7 +312,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
@Test
public void allConditionsMet_savlSupportLast_reportFeatures_giveAudioStatusSent() {
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_ENABLED);
enableSystemAudioModeIfNeeded();
verifyGiveAudioStatusNeverSent();
@@ -376,7 +324,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
@Test
public void allConditionsMet_savlSupportLast_noFeatureAbort_giveAudioStatusSent() {
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_ENABLED);
enableSystemAudioModeIfNeeded();
verifyGiveAudioStatusNeverSent();
@@ -388,7 +337,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
@Test
public void allConditionsMet_cecVolumeEnabledLast_giveAudioStatusSent() {
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
enableSystemAudioModeIfNeeded();
receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_SUPPORTED);
verifyGiveAudioStatusNeverSent();
@@ -404,7 +354,9 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_SUPPORTED);
verifyGiveAudioStatusNeverSent();
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mTestLooper.dispatchAll();
verifyGiveAudioStatusSent();
}
@@ -413,7 +365,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
// Only run when the System Audio device is an Audio System.
assume().that(getSystemAudioDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_ENABLED);
receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_SUPPORTED);
verifyGiveAudioStatusNeverSent();
@@ -424,17 +377,32 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
@Test
public void giveAudioStatusSent_systemAudioDeviceSendsReportAudioStatus_avbEnabled() {
+ mAudioManager.setDeviceVolumeBehavior(getAudioOutputDevice(),
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_ENABLED);
enableSystemAudioModeIfNeeded();
receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_SUPPORTED);
- setDeviceVolumeBehavior(getAudioOutputDevice(), AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
- // Verify that AVB was never enabled
- verify(mAudioDeviceVolumeManager, never()).setDeviceAbsoluteVolumeBehavior(
- eq(getAudioOutputDevice()), any(), any(), any(), anyBoolean());
- receiveInitialReportAudioStatus();
+ // AVB should not be enabled before receiving <Report Audio Status>
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
- verifyAbsoluteVolumeEnabled();
+ receiveReportAudioStatus(60, false);
+
+ // Check that absolute volume behavior was the last one adopted
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
+
+ // Check that the volume and mute status received were included when setting AVB
+ verify(mAudioDeviceVolumeManager).setDeviceAbsoluteVolumeBehavior(
+ eq(getAudioOutputDevice()),
+ eq(new VolumeInfo.Builder(AudioManager.STREAM_MUSIC)
+ .setVolumeIndex(60)
+ .setMuted(false)
+ .setMaxVolumeIndex(AudioStatus.MAX_VOLUME)
+ .setMinVolumeIndex(AudioStatus.MIN_VOLUME)
+ .build()),
+ any(), any(), anyBoolean());
}
@Test
@@ -457,7 +425,9 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
enableAbsoluteVolumeBehavior();
setCecVolumeControlSetting(HdmiControlManager.VOLUME_CONTROL_DISABLED);
- verifyAbsoluteVolumeDisabled();
+
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
}
@Test
@@ -465,7 +435,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
enableAbsoluteVolumeBehavior();
receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_NOT_SUPPORTED);
- verifyAbsoluteVolumeDisabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
}
@Test
@@ -476,7 +447,8 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
getSystemAudioDeviceLogicalAddress(), getLogicalAddress(),
Constants.MESSAGE_SET_AUDIO_VOLUME_LEVEL, Constants.ABORT_UNRECOGNIZED_OPCODE));
mTestLooper.dispatchAll();
- verifyAbsoluteVolumeDisabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
}
@Test
@@ -487,9 +459,9 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
enableAbsoluteVolumeBehavior();
receiveSetSystemAudioMode(false);
- verifyAbsoluteVolumeDisabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
}
-
@Test
public void avbEnabled_receiveReportAudioStatus_notifiesVolumeOrMuteChanges() {
// Initial <Report Audio Status> has volume=50 and mute=false
@@ -583,8 +555,10 @@ public abstract class BaseAbsoluteVolumeBehaviorTest {
mHdmiControlService.getAbsoluteVolumeChangedListener().onAudioDeviceVolumeChanged(
getAudioOutputDevice(),
- new VolumeInfo.Builder(ENABLE_AVB_VOLUME_INFO)
+ new VolumeInfo.Builder(AudioManager.STREAM_MUSIC)
.setVolumeIndex(20)
+ .setMaxVolumeIndex(AudioStatus.MAX_VOLUME)
+ .setMinVolumeIndex(AudioStatus.MIN_VOLUME)
.build()
);
mTestLooper.dispatchAll();
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java
index 28ba4bb503f9..9b65762e48ec 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java
@@ -54,9 +54,13 @@ public class DetectTvSystemAudioModeSupportActionTest {
@Before
public void SetUp() {
mDeviceInfoForTests = HdmiDeviceInfo.hardwarePort(1001, 1234);
+
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
HdmiControlService hdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
- Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) {
+ Collections.emptyList(), audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
void sendCecCommand(
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java
index c4c5c2a7008e..af4eab39492d 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java
@@ -31,7 +31,6 @@ import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.tv.cec.V1_0.SendMessageResult;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -76,19 +75,11 @@ public class DevicePowerStatusActionTest {
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService = new HdmiControlService(mContextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return new AudioManager() {
- @Override
- public void setWiredDeviceConnectionState(
- int type, int state, String address, String name) {
- // Do nothing.
- }
- };
- }
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java
index b571f4354452..5070b08a10cc 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java
@@ -97,10 +97,13 @@ public class DeviceSelectActionFromPlaybackTest {
Context context = InstrumentationRegistry.getTargetContext();
mMyLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return true;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java
index 9c1b67010d03..49023c6a22c4 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java
@@ -106,10 +106,13 @@ public class DeviceSelectActionFromTvTest {
Context context = InstrumentationRegistry.getTargetContext();
mMyLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return true;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioFramework.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioFramework.java
new file mode 100644
index 000000000000..3bcfac38e85b
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioFramework.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+import static android.media.AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener;
+import static android.media.AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener;
+
+import android.annotation.CallbackExecutor;
+import android.annotation.NonNull;
+import android.media.AudioAttributes;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioManager;
+import android.media.AudioSystem;
+import android.media.VolumeInfo;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Executor;
+
+/**
+ * Contains a fake AudioManager and fake AudioDeviceVolumeManager.
+ * Stores the shared state for these managers, simulating a fake AudioService.
+ */
+public class FakeAudioFramework {
+
+ private final FakeAudioManagerWrapper mAudioManager = new FakeAudioManagerWrapper();
+ private final FakeAudioDeviceVolumeManagerWrapper mAudioDeviceVolumeManager =
+ new FakeAudioDeviceVolumeManagerWrapper();
+
+ private static final int DEFAULT_DEVICE_VOLUME_BEHAVIOR =
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_VARIABLE;
+ private final Map<AudioDeviceAttributes, Integer> mDeviceVolumeBehaviors = new HashMap<>();
+
+ private final Set<OnDeviceVolumeBehaviorChangedListener> mVolumeBehaviorListeners =
+ new HashSet<>();
+
+ private final Map<AudioAttributes, List<AudioDeviceAttributes>> mDevicesForAttributes =
+ new HashMap<>();
+
+ private static final int DEFAULT_VOLUME = 0;
+ private final Map<Integer, Integer> mStreamVolumes = new HashMap<>();
+
+ private static final int DEFAULT_MAX_VOLUME = 100;
+ private final Map<Integer, Integer> mStreamMaxVolumes = new HashMap<>();
+
+ private static final boolean DEFAULT_MUTE_STATUS = false;
+ private final Map<Integer, Boolean> mStreamMuteStatuses = new HashMap<>();
+
+ public FakeAudioFramework() {
+ }
+
+ /**
+ * Returns a fake AudioManager whose methods affect this object's internal state.
+ */
+ public FakeAudioManagerWrapper getAudioManager() {
+ return mAudioManager;
+ }
+
+ public class FakeAudioManagerWrapper implements AudioManagerWrapper {
+ @Override
+ public void adjustStreamVolume(int streamType, int direction,
+ @AudioManager.PublicVolumeFlags int flags) {
+ switch (direction) {
+ case AudioManager.ADJUST_MUTE:
+ mStreamMuteStatuses.put(streamType, true);
+ break;
+ case AudioManager.ADJUST_UNMUTE:
+ mStreamMuteStatuses.put(streamType, false);
+ break;
+ default:
+ // Other adjustments not implemented
+ }
+ }
+
+ @Override
+ public void setStreamVolume(int streamType, int index,
+ @AudioManager.PublicVolumeFlags int flags) {
+ mStreamVolumes.put(streamType, index);
+ }
+
+ @Override
+ public int getStreamVolume(int streamType) {
+ return mStreamVolumes.getOrDefault(streamType, DEFAULT_VOLUME);
+ }
+
+ @Override
+ public int getStreamMinVolume(int streamType) {
+ return 0;
+ }
+
+ @Override
+ public int getStreamMaxVolume(int streamType) {
+ return mStreamMaxVolumes.getOrDefault(streamType, DEFAULT_MAX_VOLUME);
+ }
+
+ @Override
+ public boolean isStreamMute(int streamType) {
+ return mStreamMuteStatuses.getOrDefault(streamType, DEFAULT_MUTE_STATUS);
+ }
+
+ @Override
+ public void setStreamMute(int streamType, boolean state) {
+ mStreamMuteStatuses.put(streamType, state);
+ }
+
+ @Override
+ public int setHdmiSystemAudioSupported(boolean on) {
+ return AudioSystem.DEVICE_NONE;
+ }
+
+ @Override
+ public void setWiredDeviceConnectionState(AudioDeviceAttributes attributes, int state) {
+ // Do nothing
+ }
+
+ @Override
+ public void setWiredDeviceConnectionState(int device, int state, String address,
+ String name) {
+ // Do nothing
+ }
+
+
+ @Override
+ @AudioManager.DeviceVolumeBehavior
+ public int getDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device) {
+ return mDeviceVolumeBehaviors.getOrDefault(device, DEFAULT_DEVICE_VOLUME_BEHAVIOR);
+ }
+
+ public void setDeviceVolumeBehavior(@NonNull AudioDeviceAttributes device,
+ @AudioManager.DeviceVolumeBehavior int deviceVolumeBehavior) {
+ setVolumeBehaviorHelper(device, deviceVolumeBehavior);
+ }
+
+ @Override
+ @NonNull
+ public List<AudioDeviceAttributes> getDevicesForAttributes(
+ @NonNull AudioAttributes attributes) {
+ return mDevicesForAttributes.getOrDefault(attributes, Collections.emptyList());
+ }
+ }
+
+ /**
+ * Returns a fake AudioDeviceVolumeManager whose methods affect this object's internal state.
+ */
+ public FakeAudioDeviceVolumeManagerWrapper getAudioDeviceVolumeManager() {
+ return mAudioDeviceVolumeManager;
+ }
+
+ public class FakeAudioDeviceVolumeManagerWrapper implements AudioDeviceVolumeManagerWrapper {
+ @Override
+ public void addOnDeviceVolumeBehaviorChangedListener(
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull OnDeviceVolumeBehaviorChangedListener listener)
+ throws SecurityException {
+ mVolumeBehaviorListeners.add(listener);
+ }
+
+ @Override
+ public void removeOnDeviceVolumeBehaviorChangedListener(
+ @NonNull OnDeviceVolumeBehaviorChangedListener listener) {
+ mVolumeBehaviorListeners.remove(listener);
+ }
+
+ @Override
+ public void setDeviceAbsoluteVolumeBehavior(
+ @NonNull AudioDeviceAttributes device,
+ @NonNull VolumeInfo volume,
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull OnAudioDeviceVolumeChangedListener vclistener,
+ boolean handlesVolumeAdjustment) {
+ setVolumeBehaviorHelper(device, AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
+ }
+ }
+
+ /**
+ * Allows tests to manipulate the return value of
+ * {@link FakeAudioManagerWrapper#getDevicesForAttributes}
+ */
+ public void setDevicesForAttributes(AudioAttributes attributes,
+ List<AudioDeviceAttributes> devices) {
+ mDevicesForAttributes.put(attributes, devices);
+ }
+
+ /**
+ * Allows tests to manipulate the return value of
+ * {@link FakeAudioManagerWrapper#getStreamMaxVolume}
+ */
+ public void setStreamMaxVolume(int streamType, int maxVolume) {
+ mStreamMaxVolumes.put(streamType, maxVolume);
+ }
+
+ /**
+ * Helper method for changing an audio device's volume behavior. Notifies listeners.
+ */
+ private void setVolumeBehaviorHelper(AudioDeviceAttributes device,
+ @AudioManager.DeviceVolumeBehavior int newVolumeBehavior) {
+
+ int currentVolumeBehavior = mDeviceVolumeBehaviors.getOrDefault(
+ device, DEFAULT_DEVICE_VOLUME_BEHAVIOR);
+
+ mDeviceVolumeBehaviors.put(device, newVolumeBehavior);
+
+ if (newVolumeBehavior != currentVolumeBehavior) {
+ // Notify volume behavior listeners
+ for (OnDeviceVolumeBehaviorChangedListener listener : mVolumeBehaviorListeners) {
+ listener.onDeviceVolumeBehaviorChanged(device, newVolumeBehavior);
+ }
+ }
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
index e3d95586f943..5e54d3b8c237 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
@@ -86,9 +86,11 @@ public class HdmiCecAtomLoggingTest {
mContextSpy = spy(new ContextWrapper(
InstrumentationRegistry.getInstrumentation().getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()));
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()));
doNothing().when(mHdmiControlServiceSpy)
.writeStringSystemProperty(anyString(), anyString());
doReturn(mHdmiCecAtomWriterSpy).when(mHdmiControlServiceSpy).getAtomWriter();
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java
index a7232fefed10..0870bac6ef38 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java
@@ -100,9 +100,11 @@ public class HdmiCecControllerTest {
public void SetUp() {
mMyLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlServiceSpy = spy(new HdmiControlService(
InstrumentationRegistry.getTargetContext(), Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper()));
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()));
doReturn(mMyLooper).when(mHdmiControlServiceSpy).getIoLooper();
doReturn(mMyLooper).when(mHdmiControlServiceSpy).getServiceLooper();
doAnswer(__ -> mCecVersion).when(mHdmiControlServiceSpy).getCecVersion();
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
index f5c0f2a0a4b6..a6e05ddc792c 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
@@ -54,23 +54,23 @@ import java.util.ArrayList;
@RunWith(JUnit4.class)
/** Tests for {@link HdmiCecLocalDeviceAudioSystem} class. */
public class HdmiCecLocalDeviceAudioSystemTest {
-
private static final HdmiCecMessage MESSAGE_REQUEST_SAD_LCPM =
HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
ADDR_TV, ADDR_AUDIO_SYSTEM, new int[] {Constants.AUDIO_CODEC_LPCM});
+ private static final int EMPTY_FLAGS = 0;
+
private HdmiControlService mHdmiControlService;
private HdmiCecController mHdmiCecController;
private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
private HdmiCecLocalDevicePlayback mHdmiCecLocalDevicePlayback;
private FakeNativeWrapper mNativeWrapper;
private FakePowerManagerWrapper mPowerManager;
+ private FakeAudioFramework mAudioFramework;
+ private AudioManagerWrapper mAudioManager;
private Looper mMyLooper;
private TestLooper mTestLooper = new TestLooper();
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
- private int mMusicVolume;
- private int mMusicMaxVolume;
- private boolean mMusicMute;
private static final int SELF_PHYSICAL_ADDRESS = 0x2000;
private static final int HDMI_1_PHYSICAL_ADDRESS = 0x2100;
private static final int HDMI_2_PHYSICAL_ADDRESS = 0x2200;
@@ -88,66 +88,12 @@ public class HdmiCecLocalDeviceAudioSystemTest {
mLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_PLAYBACK);
mLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
+ mAudioFramework = new FakeAudioFramework();
+ mAudioManager = mAudioFramework.getAudioManager();
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
- mLocalDeviceTypes,
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return new AudioManager() {
- @Override
- public int getStreamVolume(int streamType) {
- switch (streamType) {
- case STREAM_MUSIC:
- return mMusicVolume;
- default:
- return 0;
- }
- }
-
- @Override
- public boolean isStreamMute(int streamType) {
- switch (streamType) {
- case STREAM_MUSIC:
- return mMusicMute;
- default:
- return false;
- }
- }
-
- @Override
- public int getStreamMaxVolume(int streamType) {
- switch (streamType) {
- case STREAM_MUSIC:
- return mMusicMaxVolume;
- default:
- return 100;
- }
- }
-
- @Override
- public void adjustStreamVolume(
- int streamType, int direction, int flags) {
- switch (streamType) {
- case STREAM_MUSIC:
- if (direction == AudioManager.ADJUST_UNMUTE) {
- mMusicMute = false;
- } else if (direction == AudioManager.ADJUST_MUTE) {
- mMusicMute = true;
- }
- break;
- default:
- }
- }
-
- @Override
- public void setWiredDeviceConnectionState(
- int type, int state, String address, String name) {
- // Do nothing.
- }
- };
- }
-
+ mLocalDeviceTypes, mAudioManager,
+ mAudioFramework.getAudioDeviceVolumeManager()) {
@Override
void invokeDeviceEventListeners(HdmiDeviceInfo device, int status) {
mDeviceInfo = device;
@@ -236,10 +182,12 @@ public class HdmiCecLocalDeviceAudioSystemTest {
@Test
public void handleGiveAudioStatus_volume_10_mute_true() throws Exception {
- mMusicVolume = 10;
- mMusicMute = true;
- mMusicMaxVolume = 20;
- int scaledVolume = VolumeControlAction.scaleToCecVolume(10, mMusicMaxVolume);
+ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 10, EMPTY_FLAGS);
+ mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
+ EMPTY_FLAGS);
+ mAudioFramework.setStreamMaxVolume(AudioManager.STREAM_MUSIC, 20);
+ int scaledVolume = VolumeControlAction.scaleToCecVolume(10,
+ mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
HdmiCecMessage expectedMessage =
HdmiCecMessageBuilder.buildReportAudioStatus(
ADDR_AUDIO_SYSTEM, ADDR_TV, scaledVolume, true);
@@ -303,7 +251,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
@Test
@Ignore("b/120845532")
public void handleSetSystemAudioMode_setOn_orignalOff() throws Exception {
- mMusicMute = true;
+ mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
HdmiCecMessage messageSet =
HdmiCecMessageBuilder.buildSetSystemAudioMode(ADDR_TV, ADDR_AUDIO_SYSTEM, true);
HdmiCecMessage messageGive =
@@ -326,13 +274,13 @@ public class HdmiCecLocalDeviceAudioSystemTest {
.isEqualTo(Constants.HANDLED);
mTestLooper.dispatchAll();
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
- assertThat(mMusicMute).isFalse();
+ assertThat(mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)).isFalse();
}
@Test
@Ignore("b/120845532")
public void handleSystemAudioModeRequest_turnOffByTv() throws Exception {
- assertThat(mMusicMute).isFalse();
+ assertThat(mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)).isFalse();
// Check if feature correctly turned off
HdmiCecMessage messageGive =
HdmiCecMessageBuilder.buildGiveSystemAudioModeStatus(ADDR_TV, ADDR_AUDIO_SYSTEM);
@@ -354,7 +302,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
.isEqualTo(Constants.HANDLED);
mTestLooper.dispatchAll();
assertThat(mNativeWrapper.getOnlyResultMessage()).isEqualTo(expectedMessage);
- assertThat(mMusicMute).isTrue();
+ assertThat(mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)).isTrue();
}
@Test
@@ -368,7 +316,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
HdmiCecMessageBuilder.buildSetSystemAudioMode(
ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false);
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
- assertThat(mMusicMute).isTrue();
+ assertThat(mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)).isTrue();
}
@Test
@@ -463,13 +411,13 @@ public class HdmiCecLocalDeviceAudioSystemTest {
public void terminateSystemAudioMode_systemAudioModeOff() throws Exception {
mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(false);
assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isFalse();
- mMusicMute = false;
+ mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, false);
HdmiCecMessage message =
HdmiCecMessageBuilder.buildSetSystemAudioMode(
ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false);
mHdmiCecLocalDeviceAudioSystem.terminateSystemAudioMode();
assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isFalse();
- assertThat(mMusicMute).isFalse();
+ assertThat(mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)).isFalse();
assertThat(mNativeWrapper.getResultMessages()).isEmpty();
}
@@ -477,13 +425,13 @@ public class HdmiCecLocalDeviceAudioSystemTest {
public void terminateSystemAudioMode_systemAudioModeOn() throws Exception {
mHdmiCecLocalDeviceAudioSystem.checkSupportAndSetSystemAudioMode(true);
assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isTrue();
- mMusicMute = false;
+ mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, false);
HdmiCecMessage expectedMessage =
HdmiCecMessageBuilder.buildSetSystemAudioMode(
ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false);
mHdmiCecLocalDeviceAudioSystem.terminateSystemAudioMode();
assertThat(mHdmiCecLocalDeviceAudioSystem.isSystemAudioActivated()).isFalse();
- assertThat(mMusicMute).isTrue();
+ assertThat(mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)).isTrue();
mTestLooper.dispatchAll();
assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage);
}
@@ -705,8 +653,6 @@ public class HdmiCecLocalDeviceAudioSystemTest {
@Test
public void giveAudioStatus_volumeEnabled() {
- mMusicVolume = 50;
- mMusicMaxVolume = 100;
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
HdmiControlManager.VOLUME_CONTROL_ENABLED);
mHdmiCecLocalDeviceAudioSystem.setSystemAudioControlFeatureEnabled(true);
@@ -733,8 +679,6 @@ public class HdmiCecLocalDeviceAudioSystemTest {
@Test
public void giveAudioStatus_volumeDisabled() {
- mMusicVolume = 50;
- mMusicMaxVolume = 100;
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
HdmiControlManager.VOLUME_CONTROL_DISABLED);
mHdmiCecLocalDeviceAudioSystem.setSystemAudioControlFeatureEnabled(true);
@@ -761,8 +705,6 @@ public class HdmiCecLocalDeviceAudioSystemTest {
@Test
public void reportAudioStatus_volumeEnabled() {
- mMusicVolume = 50;
- mMusicMaxVolume = 100;
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
HdmiControlManager.VOLUME_CONTROL_ENABLED);
mHdmiCecLocalDeviceAudioSystem.setSystemAudioControlFeatureEnabled(true);
@@ -786,8 +728,6 @@ public class HdmiCecLocalDeviceAudioSystemTest {
@Test
public void reportAudioStatus_volumeDisabled() {
- mMusicVolume = 50;
- mMusicMaxVolume = 100;
mHdmiControlService.setHdmiCecVolumeControlEnabledInternal(
HdmiControlManager.VOLUME_CONTROL_DISABLED);
mHdmiCecLocalDeviceAudioSystem.setSystemAudioControlFeatureEnabled(true);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
index beba9c64a88f..40c762c28194 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
@@ -31,7 +31,6 @@ import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.tv.cec.V1_0.SendMessageResult;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.RemoteException;
import android.os.test.TestLooper;
@@ -46,7 +45,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
@@ -88,8 +86,6 @@ public class HdmiCecLocalDevicePlaybackTest {
private boolean mActiveMediaSessionsPaused;
private FakePowerManagerInternalWrapper mPowerManagerInternal =
new FakePowerManagerInternalWrapper();
- @Mock
- protected AudioManager mAudioManager;
@Before
public void setUp() {
@@ -98,10 +94,12 @@ public class HdmiCecLocalDevicePlaybackTest {
Context context = InstrumentationRegistry.getTargetContext();
mMyLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
void wakeUp() {
@@ -110,11 +108,6 @@ public class HdmiCecLocalDevicePlaybackTest {
}
@Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
-
- @Override
void pauseActiveMediaSessions() {
mActiveMediaSessionsPaused = true;
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java
index 9c5c0d4dd66f..9882670432ae 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java
@@ -33,6 +33,7 @@ import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -53,8 +54,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.Arrays;
@@ -128,18 +127,17 @@ public class HdmiCecLocalDeviceTest {
private boolean isControlEnabled;
private int mPowerStatus;
- @Mock
- private AudioManager mAudioManager;
+ private AudioManagerWrapper mAudioManager;
@Before
public void SetUp() {
- MockitoAnnotations.initMocks(this);
-
Context context = InstrumentationRegistry.getTargetContext();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+ mAudioManager = spy(audioFramework.getAudioManager());
mHdmiControlService =
new HdmiControlService(context, Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ mAudioManager, audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return isControlEnabled;
@@ -171,11 +169,6 @@ public class HdmiCecLocalDeviceTest {
void wakeUp() {
mWakeupMessageReceived = true;
}
-
- @Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
};
mHdmiControlService.setIoLooper(mTestLooper.getLooper());
mHdmiControlService.setHdmiCecConfig(new FakeHdmiCecConfig(context));
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
index d2b1bdd127d2..d52b7ea38725 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
@@ -33,9 +33,9 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.content.Context;
import android.hardware.hdmi.HdmiControlManager;
@@ -55,8 +55,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.Collections;
@@ -122,20 +120,21 @@ public class HdmiCecLocalDeviceTvTest {
}
}
- @Mock
- private AudioManager mAudioManager;
+ private FakeAudioFramework mAudioFramework;
+ private AudioManagerWrapper mAudioManager;
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
-
Context context = InstrumentationRegistry.getTargetContext();
mMyLooper = mTestLooper.getLooper();
+ mAudioFramework = new FakeAudioFramework();
+ mAudioManager = spy(mAudioFramework.getAudioManager());
+
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ mAudioManager, mAudioFramework.getAudioDeviceVolumeManager()) {
@Override
void wakeUp() {
mWokenUp = true;
@@ -167,11 +166,6 @@ public class HdmiCecLocalDeviceTvTest {
}
@Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
-
- @Override
void invokeDeviceEventListeners(HdmiDeviceInfo device, int status) {
mDeviceEventListeners.add(new DeviceEventListener(device, status));
}
@@ -967,7 +961,7 @@ public class HdmiCecLocalDeviceTvTest {
@Test
public void receiveSetAudioVolumeLevel_samNotActivated_noFeatureAbort_volumeChanges() {
- when(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)).thenReturn(25);
+ mAudioFramework.setStreamMaxVolume(AudioManager.STREAM_MUSIC, 25);
// Max volume of STREAM_MUSIC is retrieved on boot
mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
index c53a7a708cfd..ded744c09818 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
@@ -51,9 +51,11 @@ public class HdmiCecMessageValidatorTest {
@Before
public void setUp() throws Exception {
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
HdmiControlService mHdmiControlService = new HdmiControlService(
InstrumentationRegistry.getTargetContext(), Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper());
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager());
mHdmiControlService.setIoLooper(mTestLooper.getLooper());
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java
index d341153ac0ce..1ad9ce02daa3 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java
@@ -67,8 +67,11 @@ public class HdmiCecNetworkTest {
@Before
public void setUp() throws Exception {
mContext = InstrumentationRegistry.getTargetContext();
+
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService = new HdmiControlService(mContext, Collections.emptyList(),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
void invokeDeviceEventListeners(HdmiDeviceInfo device, int status) {
mDeviceEventListenerStatuses.add(status);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java
index 55e8b20ca7f0..c002067ae9e7 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java
@@ -64,9 +64,11 @@ public class HdmiCecPowerStatusControllerTest {
Context contextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
Looper myLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService = new HdmiControlService(contextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return true;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
index fd6eb9286651..0e6b412e330d 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
@@ -49,7 +49,6 @@ import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.hdmi.IHdmiCecVolumeControlFeatureListener;
import android.hardware.hdmi.IHdmiControlStatusChangeListener;
import android.hardware.hdmi.IHdmiVendorCommandListener;
-import android.media.AudioManager;
import android.os.Binder;
import android.os.Looper;
import android.os.RemoteException;
@@ -64,9 +63,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
import java.util.Arrays;
@@ -96,19 +93,17 @@ public class HdmiControlServiceTest {
private HdmiPortInfo[] mHdmiPortInfo;
private ArrayList<Integer> mLocalDeviceTypes = new ArrayList<>();
- @Mock protected AudioManager mAudioManager;
-
@Before
public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
mLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_PLAYBACK);
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, mLocalDeviceTypes,
- new FakeAudioDeviceVolumeManagerWrapper()));
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()));
doNothing().when(mHdmiControlServiceSpy)
.writeStringSystemProperty(anyString(), anyString());
@@ -171,7 +166,6 @@ public class HdmiControlServiceTest {
mPowerManager = new FakePowerManagerWrapper(mContextSpy);
mHdmiControlServiceSpy.setPowerManager(mPowerManager);
mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
- mHdmiControlServiceSpy.setAudioManager(mAudioManager);
mHdmiControlServiceSpy.setEarcSupported(true);
mTestLooper.dispatchAll();
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiEarcLocalDeviceTxTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiEarcLocalDeviceTxTest.java
index c3aec841ac3d..185f90f4e803 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiEarcLocalDeviceTxTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiEarcLocalDeviceTxTest.java
@@ -28,6 +28,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -35,7 +36,6 @@ import android.content.Context;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.media.AudioDescriptor;
import android.media.AudioDeviceAttributes;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -49,7 +49,6 @@ import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
-import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
@@ -78,8 +77,7 @@ public class HdmiEarcLocalDeviceTxTest {
private Looper mMyLooper;
private TestLooper mTestLooper = new TestLooper();
- @Mock
- private AudioManager mAudioManager;
+ private AudioManagerWrapper mAudioManager;
@Captor
ArgumentCaptor<AudioDeviceAttributes> mAudioAttributesCaptor;
@@ -91,10 +89,13 @@ public class HdmiEarcLocalDeviceTxTest {
Context context = InstrumentationRegistry.getTargetContext();
mMyLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+ mAudioManager = spy(audioFramework.getAudioManager());
+
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ mAudioManager, audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return true;
@@ -114,11 +115,6 @@ public class HdmiEarcLocalDeviceTxTest {
boolean isPowerStandby() {
return false;
}
-
- @Override
- AudioManager getAudioManager() {
- return mAudioManager;
- }
};
mHdmiControlService.setIoLooper(mMyLooper);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java
index b0e8ca75d2d8..1172a8744da7 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java
@@ -31,7 +31,6 @@ import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.tv.cec.V1_0.SendMessageResult;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -88,20 +87,11 @@ public class OneTouchPlayActionTest {
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
mHdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService = new HdmiControlService(mContextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return new AudioManager() {
- @Override
- public void setWiredDeviceConnectionState(
- int type, int state, String address, String name) {
- // Do nothing.
- }
- };
- }
-
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
return false;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToAudioSystemAvbTest.java b/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToAudioSystemAvbTest.java
index 29fc9424fc70..abfe0e2e6db8 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToAudioSystemAvbTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToAudioSystemAvbTest.java
@@ -16,10 +16,13 @@
package com.android.server.hdmi;
+import static com.google.common.truth.Truth.assertThat;
+
import android.hardware.hdmi.DeviceFeatures;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.media.AudioDeviceAttributes;
+import android.media.AudioManager;
import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
@@ -82,7 +85,8 @@ public class PlaybackDeviceToAudioSystemAvbTest extends BaseAbsoluteVolumeBehavi
// Audio System disables System Audio Mode. AVB should be disabled.
receiveSetSystemAudioMode(false);
- verifyAbsoluteVolumeDisabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
// TV reports support for <Set Audio Volume Level>
mNativeWrapper.onCecMessage(ReportFeaturesMessage.build(
@@ -102,6 +106,7 @@ public class PlaybackDeviceToAudioSystemAvbTest extends BaseAbsoluteVolumeBehavi
false));
mTestLooper.dispatchAll();
- verifyAbsoluteVolumeEnabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToTvAvbTest.java b/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToTvAvbTest.java
index 19af558fb4b4..c65b26a1e8bf 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToTvAvbTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/PlaybackDeviceToTvAvbTest.java
@@ -16,12 +16,15 @@
package com.android.server.hdmi;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.clearInvocations;
import android.hardware.hdmi.DeviceFeatures;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.media.AudioDeviceAttributes;
+import android.media.AudioManager;
import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
@@ -83,7 +86,8 @@ public class PlaybackDeviceToTvAvbTest extends BaseAbsoluteVolumeBehaviorTest {
// Audio System enables System Audio Mode. AVB should be disabled.
receiveSetSystemAudioMode(true);
- verifyAbsoluteVolumeDisabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_FULL);
clearInvocations(mAudioManager, mAudioDeviceVolumeManager);
@@ -105,6 +109,7 @@ public class PlaybackDeviceToTvAvbTest extends BaseAbsoluteVolumeBehaviorTest {
false));
mTestLooper.dispatchAll();
- verifyAbsoluteVolumeEnabled();
+ assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java
index 89743cdeabf5..9f0a44ce008a 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java
@@ -30,7 +30,6 @@ import android.content.ContextWrapper;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiPortInfo;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -65,20 +64,11 @@ public class PowerStatusMonitorActionTest {
public void setUp() throws Exception {
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService = new HdmiControlService(mContextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return new AudioManager() {
- @Override
- public void setWiredDeviceConnectionState(
- int type, int state, String address, String name) {
- // Do nothing.
- }
- };
- }
-
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
return false;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java
index 1c193411b932..043db1eb298d 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java
@@ -95,9 +95,12 @@ public class RequestSadActionTest {
Context context = InstrumentationRegistry.getTargetContext();
mMyLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService =
new HdmiControlService(context, Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return true;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java
index 5b1bdf6916da..1bc99b6b8ffb 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java
@@ -146,10 +146,13 @@ public class RoutingControlActionTest {
HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(context);
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService =
new HdmiControlService(InstrumentationRegistry.getTargetContext(),
Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
+ audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isCecControlEnabled() {
return true;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java
index a3d02d4fe26f..a73f4aa35cf9 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java
@@ -80,9 +80,11 @@ public class SetAudioVolumeLevelDiscoveryActionTest {
mContextSpy = spy(new ContextWrapper(
InstrumentationRegistry.getInstrumentation().getTargetContext()));
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
- new FakeAudioDeviceVolumeManagerWrapper()));
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()));
doNothing().when(mHdmiControlServiceSpy)
.writeStringSystemProperty(anyString(), anyString());
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java
index c40cd0eeaf7e..c3beff74ca1c 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java
@@ -29,7 +29,6 @@ import android.content.Context;
import android.content.ContextWrapper;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiPortInfo;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -68,20 +67,11 @@ public class SystemAudioAutoInitiationActionTest {
Looper myLooper = mTestLooper.getLooper();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
mHdmiControlService = new HdmiControlService(mContextSpy,
Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
- new FakeAudioDeviceVolumeManagerWrapper()) {
- @Override
- AudioManager getAudioManager() {
- return new AudioManager() {
- @Override
- public void setWiredDeviceConnectionState(
- int type, int state, String address, String name) {
- // Do nothing.
- }
- };
- }
-
+ audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
@Override
boolean isPowerStandby() {
return false;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java
index b13ef4fa7014..f801f8853980 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java
@@ -24,7 +24,6 @@ import android.annotation.Nullable;
import android.content.Context;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.tv.cec.V1_0.SendMessageResult;
-import android.media.AudioManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -68,8 +67,11 @@ public class SystemAudioInitiationActionFromAvrTest {
Context context = InstrumentationRegistry.getTargetContext();
+ FakeAudioFramework audioFramework = new FakeAudioFramework();
+
HdmiControlService hdmiControlService = new HdmiControlService(context,
- Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) {
+ Collections.emptyList(), audioFramework.getAudioManager(),
+ audioFramework.getAudioDeviceVolumeManager()) {
@Override
void sendCecCommand(
HdmiCecMessage command, @Nullable SendMessageCallback callback) {
@@ -100,36 +102,6 @@ public class SystemAudioInitiationActionFromAvrTest {
}
@Override
- AudioManager getAudioManager() {
- return new AudioManager() {
-
- @Override
- public int setHdmiSystemAudioSupported(boolean on) {
- return 0;
- }
-
- @Override
- public int getStreamVolume(int streamType) {
- return 0;
- }
-
- @Override
- public boolean isStreamMute(int streamType) {
- return false;
- }
-
- @Override
- public int getStreamMaxVolume(int streamType) {
- return 100;
- }
-
- @Override
- public void adjustStreamVolume(
- int streamType, int direction, int flags) {}
- };
- }
-
- @Override
boolean isPowerStandby() {
return false;
}