diff options
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; } |