From 6613fd3fbba8bbd4315ce71d5cc530ad036d5ca9 Mon Sep 17 00:00:00 2001 From: Yan Han Date: Tue, 29 Mar 2022 15:25:08 +0200 Subject: [PATCH] Add wrapper for AudioDeviceVolumeManager in the HDMI framework Adding a wrapper interface for AudioDeviceVolumeManager allows the class to be faked. This allows tests that instantiate HdmiControlService to avoid also instantiating AudioDeviceVolumeManager, which can affect the state of AudioService on the DUT. Using an interface instead of inheritance allows constructors to be more independent, and allows the same class to "wrap" multiple managers in the future if they need to share state (e.g. AudioManager and AudioDeviceVolumeManager). Bug: 217923086 Test: atest com.android.server.hdmi Change-Id: I673ab6e3a6acbbc6af8998e2f5c048fec59ad47a --- .../hdmi/AudioDeviceVolumeManagerWrapper.java | 67 +++++++++++++++++ ...ioDeviceVolumeManagerWrapperInterface.java | 61 ++++++++++++++++ .../server/hdmi/HdmiControlService.java | 45 +++++++++--- .../server/hdmi/ActiveSourceActionTest.java | 3 +- .../hdmi/ArcInitiationActionFromAvrTest.java | 3 +- .../hdmi/ArcTerminationActionFromAvrTest.java | 3 +- ...ectTvSystemAudioModeSupportActionTest.java | 2 +- .../hdmi/DevicePowerStatusActionTest.java | 3 +- .../DeviceSelectActionFromPlaybackTest.java | 2 +- .../hdmi/DeviceSelectActionFromTvTest.java | 2 +- .../FakeAudioDeviceVolumeManagerWrapper.java | 72 +++++++++++++++++++ .../server/hdmi/HdmiCecAtomLoggingTest.java | 3 +- .../server/hdmi/HdmiCecControllerTest.java | 3 +- .../HdmiCecLocalDeviceAudioSystemTest.java | 2 +- .../hdmi/HdmiCecLocalDevicePlaybackTest.java | 2 +- .../server/hdmi/HdmiCecLocalDeviceTest.java | 3 +- .../server/hdmi/HdmiCecLocalDeviceTvTest.java | 2 +- .../hdmi/HdmiCecMessageValidatorTest.java | 3 +- .../server/hdmi/HdmiCecNetworkTest.java | 3 +- .../HdmiCecPowerStatusControllerTest.java | 3 +- .../server/hdmi/HdmiControlServiceTest.java | 3 +- .../server/hdmi/OneTouchPlayActionTest.java | 3 +- .../hdmi/PowerStatusMonitorActionTest.java | 3 +- .../server/hdmi/RequestSadActionTest.java | 4 +- .../server/hdmi/RoutingControlActionTest.java | 2 +- ...etAudioVolumeLevelDiscoveryActionTest.java | 3 +- .../SystemAudioAutoInitiationActionTest.java | 3 +- ...ystemAudioInitiationActionFromAvrTest.java | 2 +- 28 files changed, 275 insertions(+), 35 deletions(-) create mode 100644 services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java create mode 100644 services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java create mode 100644 services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java diff --git a/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java new file mode 100644 index 0000000000000..438c1ea01e29f --- /dev/null +++ b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapper.java @@ -0,0 +1,67 @@ +/* + * 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 android.annotation.CallbackExecutor; +import android.annotation.NonNull; +import android.content.Context; +import android.media.AudioDeviceAttributes; +import android.media.AudioDeviceVolumeManager; +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. + */ +public class AudioDeviceVolumeManagerWrapper + implements AudioDeviceVolumeManagerWrapperInterface { + + private static final String TAG = "AudioDeviceVolumeManagerWrapper"; + + private final AudioDeviceVolumeManager mAudioDeviceVolumeManager; + + public AudioDeviceVolumeManagerWrapper(Context context) { + mAudioDeviceVolumeManager = new AudioDeviceVolumeManager(context); + } + + @Override + public void addOnDeviceVolumeBehaviorChangedListener( + @NonNull @CallbackExecutor Executor executor, + @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener) + throws SecurityException { + mAudioDeviceVolumeManager.addOnDeviceVolumeBehaviorChangedListener(executor, listener); + } + + @Override + public void removeOnDeviceVolumeBehaviorChangedListener( + @NonNull AudioDeviceVolumeManager.OnDeviceVolumeBehaviorChangedListener listener) { + mAudioDeviceVolumeManager.removeOnDeviceVolumeBehaviorChangedListener(listener); + } + + @Override + public 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); + } +} diff --git a/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java new file mode 100644 index 0000000000000..1a1d4c19358be --- /dev/null +++ b/services/core/java/com/android/server/hdmi/AudioDeviceVolumeManagerWrapperInterface.java @@ -0,0 +1,61 @@ +/* + * 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/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 12380abd0d380..65530e2343245 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -410,6 +410,9 @@ public class HdmiControlService extends SystemService { @Nullable private PowerManagerInternalWrapper mPowerManagerInternal; + @Nullable + private AudioDeviceVolumeManagerWrapperInterface mAudioDeviceVolumeManager; + @Nullable private Looper mIoLooper; @@ -439,11 +442,21 @@ public class HdmiControlService extends SystemService { private final SelectRequestBuffer mSelectRequestBuffer = new SelectRequestBuffer(); - @VisibleForTesting HdmiControlService(Context context, List deviceTypes) { + /** + * Constructor for testing. + * + * It's critical to use a fake AudioDeviceVolumeManager because a normally instantiated + * AudioDeviceVolumeManager can access the "real" AudioService on the DUT. + * + * @see FakeAudioDeviceVolumeManagerWrapper + */ + @VisibleForTesting HdmiControlService(Context context, List deviceTypes, + AudioDeviceVolumeManagerWrapperInterface audioDeviceVolumeManager) { super(context); mLocalDevices = deviceTypes; mSettingsObserver = new SettingsObserver(mHandler); mHdmiCecConfig = new HdmiCecConfig(context); + mAudioDeviceVolumeManager = audioDeviceVolumeManager; } public HdmiControlService(Context context) { @@ -744,6 +757,8 @@ public class HdmiControlService extends SystemService { Context.TV_INPUT_SERVICE); mPowerManager = new PowerManagerWrapper(getContext()); mPowerManagerInternal = new PowerManagerInternalWrapper(); + mAudioDeviceVolumeManager = + new AudioDeviceVolumeManagerWrapper(getContext()); } else if (phase == SystemService.PHASE_BOOT_COMPLETED) { runOnServiceThread(this::bootCompleted); } @@ -3086,15 +3101,17 @@ public class HdmiControlService extends SystemService { private void announceHdmiCecVolumeControlFeatureChange( @HdmiControlManager.VolumeControl int hdmiCecVolumeControl) { assertRunOnServiceThread(); - mHdmiCecVolumeControlFeatureListenerRecords.broadcast(listener -> { - try { - listener.onHdmiCecVolumeControlFeature(hdmiCecVolumeControl); - } catch (RemoteException e) { - Slog.e(TAG, - "Failed to report HdmiControlVolumeControlStatusChange: " - + hdmiCecVolumeControl); - } - }); + synchronized (mLock) { + mHdmiCecVolumeControlFeatureListenerRecords.broadcast(listener -> { + try { + listener.onHdmiCecVolumeControlFeature(hdmiCecVolumeControl); + } catch (RemoteException e) { + Slog.e(TAG, + "Failed to report HdmiControlVolumeControlStatusChange: " + + hdmiCecVolumeControl); + } + }); + } } public HdmiCecLocalDeviceTv tv() { @@ -3135,6 +3152,14 @@ public class HdmiControlService extends SystemService { return (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); } + /** + * Returns null before the boot phase {@link SystemService#PHASE_SYSTEM_SERVICES_READY}. + */ + @Nullable + private AudioDeviceVolumeManagerWrapperInterface getAudioDeviceVolumeManager() { + return mAudioDeviceVolumeManager; + } + boolean isControlEnabled() { synchronized (mLock) { return mHdmiControlEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; 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 18f264277b41d..3fc7918627123 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java @@ -61,7 +61,8 @@ public class ActiveSourceActionTest { public void setUp() throws Exception { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { + mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return new AudioManager() { 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 e4c5ad6769d75..e4eecc6f6fa05 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java @@ -68,7 +68,8 @@ public class ArcInitiationActionFromAvrTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); HdmiControlService hdmiControlService = - new HdmiControlService(mContextSpy, Collections.emptyList()) { + new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isPowerStandby() { return false; 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 d73cdb5f53b0c..5b114661fae89 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java @@ -68,7 +68,8 @@ public class ArcTerminationActionFromAvrTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); HdmiControlService hdmiControlService = - new HdmiControlService(mContextSpy, Collections.emptyList()) { + new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return mAudioManager; 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 5cec8ad1e63d3..28ba4bb503f91 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/DetectTvSystemAudioModeSupportActionTest.java @@ -56,7 +56,7 @@ public class DetectTvSystemAudioModeSupportActionTest { mDeviceInfoForTests = HdmiDeviceInfo.hardwarePort(1001, 1234); HdmiControlService hdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @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 52a0b6cdc2beb..59e7501f6059a 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java @@ -78,7 +78,8 @@ public class DevicePowerStatusActionTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { + mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return new AudioManager() { 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 35432edfcf16c..a1263307e79f9 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java @@ -100,7 +100,7 @@ public class DeviceSelectActionFromPlaybackTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isControlEnabled() { 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 e77cd91b46d84..26aa83fdf13f9 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java @@ -109,7 +109,7 @@ public class DeviceSelectActionFromTvTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isControlEnabled() { return true; diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java new file mode 100644 index 0000000000000..d33ef9bc88799 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeAudioDeviceVolumeManagerWrapper.java @@ -0,0 +1,72 @@ +/* + * 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.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. + */ +public class FakeAudioDeviceVolumeManagerWrapper implements + AudioDeviceVolumeManagerWrapperInterface { + + private final Set mVolumeBehaviorListeners; + + public FakeAudioDeviceVolumeManagerWrapper() { + mVolumeBehaviorListeners = new HashSet<>(); + } + + @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) { + // Notify all volume behavior listeners that the device adopted absolute volume behavior + for (OnDeviceVolumeBehaviorChangedListener listener : mVolumeBehaviorListeners) { + listener.onDeviceVolumeBehaviorChanged(device, + AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE); + } + } +} 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 30bcc7e8afa10..9f744f9373ed0 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java @@ -89,7 +89,8 @@ public class HdmiCecAtomLoggingTest { mContextSpy = spy(new ContextWrapper( InstrumentationRegistry.getInstrumentation().getTargetContext())); - mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList())); + mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper())); 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 2dcc449e36a56..0cba10669c858 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java @@ -101,7 +101,8 @@ public class HdmiCecControllerTest { mMyLooper = mTestLooper.getLooper(); mHdmiControlServiceSpy = spy(new HdmiControlService( - InstrumentationRegistry.getTargetContext(), Collections.emptyList())); + InstrumentationRegistry.getTargetContext(), Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper())); 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 70bc460411c86..91d265c810839 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java @@ -88,7 +88,7 @@ public class HdmiCecLocalDeviceAudioSystemTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return new AudioManager() { 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 86130daf4aac7..74761d8a97e8f 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -92,7 +92,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override void wakeUp() { mWokenUp = 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 fb8baa30e6b4d..f3867ec5dfc41 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java @@ -137,7 +137,8 @@ public class HdmiCecLocalDeviceTest { Context context = InstrumentationRegistry.getTargetContext(); mHdmiControlService = - new HdmiControlService(context, Collections.emptyList()) { + new HdmiControlService(context, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isControlEnabled() { return isControlEnabled; 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 df4aa5dac9df3..3ccae1ce28f52 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java @@ -125,7 +125,7 @@ public class HdmiCecLocalDeviceTvTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override void wakeUp() { mWokenUp = true; 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 50c9f70ccb035..a446e109c9214 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java @@ -51,7 +51,8 @@ public class HdmiCecMessageValidatorTest { @Before public void setUp() throws Exception { HdmiControlService mHdmiControlService = new HdmiControlService( - InstrumentationRegistry.getTargetContext(), Collections.emptyList()); + InstrumentationRegistry.getTargetContext(), Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()); 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 03532ae1cb1fc..b8a1ba3633735 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java @@ -67,7 +67,8 @@ public class HdmiCecNetworkTest { @Before public void setUp() throws Exception { mContext = InstrumentationRegistry.getTargetContext(); - mHdmiControlService = new HdmiControlService(mContext, Collections.emptyList()) { + mHdmiControlService = new HdmiControlService(mContext, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @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 7a68285bc0037..0c508632cc954 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java @@ -65,7 +65,8 @@ public class HdmiCecPowerStatusControllerTest { Context contextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); Looper myLooper = mTestLooper.getLooper(); - mHdmiControlService = new HdmiControlService(contextSpy, Collections.emptyList()) { + mHdmiControlService = new HdmiControlService(contextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isControlEnabled() { 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 3987c32277cd4..6266571d33d45 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -91,7 +91,8 @@ public class HdmiControlServiceTest { HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); - mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList())); + mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper())); doNothing().when(mHdmiControlServiceSpy) .writeStringSystemProperty(anyString(), anyString()); 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 561e6a5fec410..bd552c4b567aa 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java @@ -87,7 +87,8 @@ public class OneTouchPlayActionTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); mHdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { + mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return new AudioManager() { 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 c878f99f79129..40b413f85a842 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java @@ -68,7 +68,8 @@ public class PowerStatusMonitorActionTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); mHdmiControlService = new HdmiControlService(mContextSpy, - Collections.singletonList(HdmiDeviceInfo.DEVICE_TV)) { + Collections.singletonList(HdmiDeviceInfo.DEVICE_TV), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return new AudioManager() { 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 6184c2116e1d8..2b2f537adcdb4 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java @@ -96,8 +96,8 @@ public class RequestSadActionTest { mMyLooper = mTestLooper.getLooper(); mHdmiControlService = - new HdmiControlService(context, - Collections.emptyList()) { + new HdmiControlService(context, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isControlEnabled() { 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 0587864eeb20a..14af7d95b95da 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java @@ -149,7 +149,7 @@ public class RoutingControlActionTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override boolean isControlEnabled() { 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 a34b55c003085..0484bd14b6f85 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SetAudioVolumeLevelDiscoveryActionTest.java @@ -81,7 +81,8 @@ public class SetAudioVolumeLevelDiscoveryActionTest { mContextSpy = spy(new ContextWrapper( InstrumentationRegistry.getInstrumentation().getTargetContext())); - mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList())); + mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper())); 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 9d143418fd4cc..356539c3a1743 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java @@ -69,7 +69,8 @@ public class SystemAudioAutoInitiationActionTest { Looper myLooper = mTestLooper.getLooper(); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { + mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(), + new FakeAudioDeviceVolumeManagerWrapper()) { @Override AudioManager getAudioManager() { return new AudioManager() { 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 095c69c776a20..c2f706ad1220f 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java @@ -69,7 +69,7 @@ public class SystemAudioInitiationActionFromAvrTest { Context context = InstrumentationRegistry.getTargetContext(); HdmiControlService hdmiControlService = new HdmiControlService(context, - Collections.emptyList()) { + Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) { @Override void sendCecCommand( HdmiCecMessage command, @Nullable SendMessageCallback callback) {