summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}