diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index b0c0c831ac979..f993b5d91fdb0 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -405,7 +405,7 @@ public class HdmiControlService extends SystemService { private TvInputManager mTvInputManager; @Nullable - private PowerManager mPowerManager; + private PowerManagerWrapper mPowerManager; @Nullable private Looper mIoLooper; @@ -734,7 +734,7 @@ public class HdmiControlService extends SystemService { if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) { mTvInputManager = (TvInputManager) getContext().getSystemService( Context.TV_INPUT_SERVICE); - mPowerManager = getContext().getSystemService(PowerManager.class); + mPowerManager = new PowerManagerWrapper(getContext()); } else if (phase == SystemService.PHASE_BOOT_COMPLETED) { runOnServiceThread(this::bootCompleted); } @@ -755,7 +755,11 @@ public class HdmiControlService extends SystemService { } @VisibleForTesting - protected PowerManager getPowerManager() { + void setPowerManager(PowerManagerWrapper powerManager) { + mPowerManager = powerManager; + } + + PowerManagerWrapper getPowerManager() { return mPowerManager; } @@ -3148,7 +3152,7 @@ public class HdmiControlService extends SystemService { }); } - private boolean canGoToStandby() { + boolean canGoToStandby() { for (HdmiCecLocalDevice device : mHdmiCecNetwork.getLocalDeviceList()) { if (!device.canGoToStandby()) return false; } diff --git a/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java b/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java new file mode 100644 index 0000000000000..f0810687290ea --- /dev/null +++ b/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2021 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.content.Context; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; + +/** + * Abstraction around {@link PowerManager} to allow faking PowerManager in tests. + */ +public class PowerManagerWrapper { + private static final String TAG = "PowerManagerWrapper"; + + private final PowerManager mPowerManager; + + public PowerManagerWrapper(Context context) { + mPowerManager = context.getSystemService(PowerManager.class); + } + + boolean isInteractive() { + return mPowerManager.isInteractive(); + } + + void wakeUp(long time, int reason, String details) { + mPowerManager.wakeUp(time, reason, details); + } + + void goToSleep(long time, int reason, int flags) { + mPowerManager.goToSleep(time, reason, flags); + } + + WakeLock newWakeLock(int levelAndFlags, String tag) { + return mPowerManager.newWakeLock(levelAndFlags, tag); + } +} 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 88f70af7b202c..ac2756beff75d 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java @@ -22,16 +22,11 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -41,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; @@ -55,28 +48,16 @@ public class ActiveSourceActionTest { private Context mContextSpy; private HdmiControlService mHdmiControlService; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); private int mPhysicalAddress; - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; - @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { @Override AudioManager getAudioManager() { @@ -89,21 +70,11 @@ public class ActiveSourceActionTest { }; } - @Override - void wakeUp() { - } - @Override boolean isPowerStandby() { return false; } - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper())); - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -120,6 +91,8 @@ public class ActiveSourceActionTest { mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService)); mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService)); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlService.setPowerManager(mPowerManager); mPhysicalAddress = 0x2000; mNativeWrapper.setPhysicalAddress(mPhysicalAddress); mTestLooper.dispatchAll(); 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 5cf81ec2ccf8d..4ff7c6694aaee 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java @@ -20,17 +20,12 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -56,14 +51,14 @@ public class ArcInitiationActionFromAvrTest { private Context mContextSpy; private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private ArcInitiationActionFromAvr mAction; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; - @Mock private AudioManager mAudioManager; + @Mock + private AudioManager mAudioManager; @Before public void setUp() throws Exception { @@ -71,14 +66,6 @@ public class ArcInitiationActionFromAvrTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - HdmiControlService hdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { @Override @@ -86,16 +73,6 @@ public class ArcInitiationActionFromAvrTest { return false; } - @Override - void wakeUp() { - } - - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper())); - } - @Override AudioManager getAudioManager() { return mAudioManager; @@ -133,6 +110,8 @@ public class ArcInitiationActionFromAvrTest { hdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(hdmiControlService)); hdmiControlService.setMessageValidator(new HdmiCecMessageValidator(hdmiControlService)); hdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + hdmiControlService.setPowerManager(mPowerManager); mAction = new ArcInitiationActionFromAvr(mHdmiCecLocalDeviceAudioSystem); mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem); 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 1462839ff5a16..c6bb9144b983b 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java @@ -20,17 +20,12 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -55,16 +50,15 @@ public class ArcTerminationActionFromAvrTest { private Context mContextSpy; private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; + private FakePowerManagerWrapper mPowerManager; private ArcTerminationActionFromAvr mAction; private FakeNativeWrapper mNativeWrapper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); - - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; - @Mock private AudioManager mAudioManager; + @Mock + private AudioManager mAudioManager; @Before public void setUp() throws Exception { @@ -72,26 +66,8 @@ public class ArcTerminationActionFromAvrTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - HdmiControlService hdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { - @Override - void wakeUp() { - } - - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper())); - } - @Override AudioManager getAudioManager() { return mAudioManager; @@ -127,7 +103,8 @@ public class ArcTerminationActionFromAvrTest { hdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(hdmiControlService)); hdmiControlService.setMessageValidator(new HdmiCecMessageValidator(hdmiControlService)); hdmiControlService.initService(); - + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + hdmiControlService.setPowerManager(mPowerManager); mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(hdmiControlService) { @Override protected void setPreferredAddress(int addr) { 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 57756f9683865..29eb0da23e71d 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/DevicePowerStatusActionTest.java @@ -24,7 +24,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; @@ -33,11 +32,7 @@ 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.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -64,6 +59,7 @@ public class DevicePowerStatusActionTest { private HdmiControlService mHdmiControlService; private HdmiCecLocalDevice mPlaybackDevice; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); @@ -71,9 +67,8 @@ public class DevicePowerStatusActionTest { private DevicePowerStatusAction mDevicePowerStatusAction; - @Mock private IHdmiControlCallback mCallbackMock; - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; + @Mock + private IHdmiControlCallback mCallbackMock; @Before public void setUp() throws Exception { @@ -81,14 +76,6 @@ public class DevicePowerStatusActionTest { mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { @Override AudioManager getAudioManager() { @@ -101,21 +88,11 @@ public class DevicePowerStatusActionTest { }; } - @Override - void wakeUp() { - } - @Override boolean isPowerStandby() { return false; } - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper())); - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -132,6 +109,8 @@ public class DevicePowerStatusActionTest { mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService)); mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService)); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlService.setPowerManager(mPowerManager); mPhysicalAddress = 0x2000; mNativeWrapper.setPhysicalAddress(mPhysicalAddress); mPlaybackDevice = new HdmiCecLocalDevicePlayback( 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 0c6254d6c1e82..28ee592e49a05 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java @@ -34,11 +34,7 @@ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiControlCallback; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -50,8 +46,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; @@ -89,19 +83,13 @@ public class DeviceSelectActionFromTvTest { private HdmiCecController mHdmiCecController; private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; - @Before public void setUp() { - MockitoAnnotations.initMocks(this); - Context context = InstrumentationRegistry.getTargetContext(); mMyLooper = mTestLooper.getLooper(); @@ -113,10 +101,6 @@ public class DeviceSelectActionFromTvTest { return true; } - @Override - void wakeUp() { - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -126,12 +110,6 @@ public class DeviceSelectActionFromTvTest { boolean isPowerStandbyOrTransient() { return false; } - - @Override - protected PowerManager getPowerManager() { - return new PowerManager(context, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mMyLooper)); - } }; mHdmiCecLocalDeviceTv = new HdmiCecLocalDeviceTv(mHdmiControlService); @@ -154,6 +132,8 @@ public class DeviceSelectActionFromTvTest { true, false, false); mNativeWrapper.setPortInfo(hdmiPortInfos); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.setPhysicalAddress(0x0000); mTestLooper.dispatchAll(); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java b/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java new file mode 100644 index 0000000000000..7c8a11ec1cea0 --- /dev/null +++ b/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 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; + +/** + * Fake class which stubs PowerManagerWrapper (useful for testing). + */ +final class FakePowerManagerWrapper extends PowerManagerWrapper { + private boolean mInteractive; + + FakePowerManagerWrapper(@NonNull Context context) { + super(context); + mInteractive = true; + } + + @Override + boolean isInteractive() { + return mInteractive; + } + + void setInteractive(boolean interactive) { + mInteractive = interactive; + } + + @Override + void wakeUp(long time, int reason, String details) { + mInteractive = true; + return; + } + + @Override + void goToSleep(long time, int reason, int flags) { + mInteractive = false; + return; + } + + // Don't stub WakeLock. +} 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 da10ec459508e..b903b1649fc8d 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java @@ -31,7 +31,6 @@ import static org.mockito.Mockito.doReturn; 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.content.ContextWrapper; @@ -39,11 +38,7 @@ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.os.Binder; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.RemoteException; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -58,8 +53,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; @@ -77,6 +70,7 @@ public class HdmiCecAtomLoggingTest { private HdmiCecLocalDevicePlayback mHdmiCecLocalDevicePlayback; private HdmiMhlControllerStub mHdmiMhlControllerStub; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private HdmiCecNetwork mHdmiCecNetwork; private Looper mLooper; private Context mContextSpy; @@ -85,13 +79,8 @@ public class HdmiCecAtomLoggingTest { private ArrayList mLocalDevices = new ArrayList<>(); private HdmiPortInfo[] mHdmiPortInfo; - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; - @Before public void setUp() throws RemoteException { - MockitoAnnotations.initMocks(this); - mHdmiCecAtomWriterSpy = spy(new HdmiCecAtomWriter()); mLooper = mTestLooper.getLooper(); @@ -99,12 +88,6 @@ public class HdmiCecAtomLoggingTest { mContextSpy = spy(new ContextWrapper( InstrumentationRegistry.getInstrumentation().getTargetContext())); - - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mLooper))); - doReturn(true).when(mIPowerManagerMock).isInteractive(); - mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList())); doNothing().when(mHdmiControlServiceSpy) .writeStringSystemProperty(anyString(), anyString()); @@ -145,6 +128,8 @@ public class HdmiCecAtomLoggingTest { mLocalDevices.add(mHdmiCecLocalDevicePlayback); mHdmiControlServiceSpy.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlServiceSpy.setPowerManager(mPowerManager); mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mHdmiControlServiceSpy.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY); 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 7eb89900d7d47..17f827da1ae7e 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java @@ -31,11 +31,7 @@ import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -49,8 +45,6 @@ import org.junit.Ignore; 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; @@ -70,6 +64,7 @@ public class HdmiCecLocalDeviceAudioSystemTest { private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; private HdmiCecLocalDevicePlayback mHdmiCecLocalDevicePlayback; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); @@ -84,15 +79,9 @@ public class HdmiCecLocalDeviceAudioSystemTest { private HdmiDeviceInfo mDeviceInfo; private boolean mArcSupport; private HdmiPortInfo[] mHdmiPortInfo; - private boolean mWokenUp; - - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; @Before public void setUp() { - MockitoAnnotations.initMocks(this); - Context context = InstrumentationRegistry.getTargetContext(); mMyLooper = mTestLooper.getLooper(); @@ -155,11 +144,6 @@ public class HdmiCecLocalDeviceAudioSystemTest { }; } - @Override - void wakeUp() { - mWokenUp = true; - } - @Override void invokeDeviceEventListeners(HdmiDeviceInfo device, int status) { mDeviceInfo = device; @@ -180,12 +164,6 @@ public class HdmiCecLocalDeviceAudioSystemTest { return defVal; } } - - @Override - protected PowerManager getPowerManager() { - return new PowerManager(context, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mMyLooper)); - } }; mHdmiControlService.getHdmiCecConfig().setIntValue( @@ -228,6 +206,8 @@ public class HdmiCecLocalDeviceAudioSystemTest { 4, HdmiPortInfo.PORT_INPUT, HDMI_3_PHYSICAL_ADDRESS, true, false, false); mNativeWrapper.setPortInfo(mHdmiPortInfo); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + mHdmiControlService.setPowerManager(mPowerManager); // No TV device interacts with AVR so system audio control won't be turned on here mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); @@ -675,16 +655,16 @@ public class HdmiCecLocalDeviceAudioSystemTest { @Test public void doNotWakeUpOnHotPlug_PlugIn() { - mWokenUp = false; + mPowerManager.setInteractive(false); mHdmiCecLocalDeviceAudioSystem.onHotplug(0, true); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test public void doNotWakeUpOnHotPlug_PlugOut() { - mWokenUp = false; + mPowerManager.setInteractive(false); mHdmiCecLocalDeviceAudioSystem.onHotplug(0, false); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test 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 337276d8f6d59..8a84c6f9c6e84 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -24,18 +24,12 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.when; - import android.content.Context; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiControlCallback; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.RemoteException; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -49,8 +43,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; @@ -75,22 +67,15 @@ public class HdmiCecLocalDevicePlaybackTest { private FakeNativeWrapper mNativeWrapper; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); + private FakePowerManagerWrapper mPowerManager; private ArrayList mLocalDevices = new ArrayList<>(); private int mPlaybackPhysicalAddress; private int mPlaybackLogicalAddress; private boolean mWokenUp; - private boolean mStandby; private boolean mActiveMediaSessionsPaused; - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; - @Before public void setUp() { - MockitoAnnotations.initMocks(this); - Context context = InstrumentationRegistry.getTargetContext(); mMyLooper = mTestLooper.getLooper(); @@ -100,12 +85,7 @@ public class HdmiCecLocalDevicePlaybackTest { @Override void wakeUp() { mWokenUp = true; - } - - @Override - void standby() { - mStandby = true; - mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF); + super.wakeUp(); } @Override @@ -113,11 +93,6 @@ public class HdmiCecLocalDevicePlaybackTest { mActiveMediaSessionsPaused = true; } - @Override - protected boolean isStandbyMessageReceived() { - return mStandby; - } - @Override boolean isControlEnabled() { return true; @@ -144,9 +119,8 @@ public class HdmiCecLocalDevicePlaybackTest { } @Override - protected PowerManager getPowerManager() { - return new PowerManager(context, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mMyLooper)); + boolean canGoToStandby() { + return true; } }; @@ -167,6 +141,8 @@ public class HdmiCecLocalDevicePlaybackTest { mNativeWrapper.setPortInfo(hdmiPortInfos); mNativeWrapper.setPortConnectionStatus(1, true); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mPlaybackPhysicalAddress = 0x2000; mNativeWrapper.setPhysicalAddress(mPlaybackPhysicalAddress); @@ -183,7 +159,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl = HdmiProperties.playback_device_action_on_routing_control_values.NONE; - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, @@ -196,7 +172,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse(); } @@ -205,7 +181,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl = HdmiProperties.playback_device_action_on_routing_control_values.NONE; - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, @@ -218,7 +194,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse(); } @@ -227,7 +203,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl = HdmiProperties.playback_device_action_on_routing_control_values.WAKE_UP_ONLY; - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, @@ -240,7 +216,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse(); } @@ -249,7 +225,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mPlaybackDeviceActionOnRoutingControl = HdmiProperties.playback_device_action_on_routing_control_values.WAKE_UP_ONLY; - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, @@ -262,7 +238,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mNativeWrapper.getResultMessages().contains(expectedMessage)).isFalse(); } @@ -273,7 +249,7 @@ public class HdmiCecLocalDevicePlaybackTest { .playback_device_action_on_routing_control_values .WAKE_UP_AND_SEND_ACTIVE_SOURCE; - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, @@ -286,7 +262,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage); } @@ -297,7 +273,7 @@ public class HdmiCecLocalDevicePlaybackTest { .playback_device_action_on_routing_control_values .WAKE_UP_AND_SEND_ACTIVE_SOURCE; - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, @@ -310,7 +286,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage); } @@ -321,7 +297,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) @@ -331,7 +307,7 @@ public class HdmiCecLocalDevicePlaybackTest { 0x5000); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( ADDR_INVALID); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -341,7 +317,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, mPlaybackPhysicalAddress); @@ -352,7 +328,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( mPlaybackLogicalAddress); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -362,7 +338,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, mPlaybackPhysicalAddress); @@ -373,7 +349,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( ADDR_INVALID); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -383,13 +359,13 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test @@ -399,13 +375,13 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -415,14 +391,14 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -480,7 +456,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); @@ -489,7 +465,7 @@ public class HdmiCecLocalDevicePlaybackTest { 0x5000); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( ADDR_INVALID); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -499,7 +475,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, mPlaybackPhysicalAddress); @@ -510,7 +486,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( mPlaybackLogicalAddress); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -520,7 +496,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, mPlaybackPhysicalAddress); @@ -531,7 +507,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( ADDR_INVALID); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -541,13 +517,13 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test @@ -557,13 +533,13 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -573,14 +549,14 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -681,16 +657,16 @@ public class HdmiCecLocalDevicePlaybackTest { @Test public void doNotWakeUpOnHotPlug_PlugIn() { - mWokenUp = false; + mPowerManager.setInteractive(false); mHdmiCecLocalDevicePlayback.onHotplug(0, true); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test public void doNotWakeUpOnHotPlug_PlugOut() { - mWokenUp = false; + mPowerManager.setInteractive(false); mHdmiCecLocalDevicePlayback.onHotplug(0, false); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test @@ -1048,13 +1024,13 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo( mPlaybackPhysicalAddress); @@ -1067,12 +1043,12 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000); assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo( 0x0000); @@ -1085,13 +1061,13 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress); assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); } @@ -1100,12 +1076,12 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST, HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000); assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); } @@ -1164,7 +1140,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); - mStandby = false; + mPowerManager.setInteractive(true); // 1. DUT is . HdmiCecMessage message1 = HdmiCecMessageBuilder.buildActiveSource( @@ -1173,15 +1149,15 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message1)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); // 2. DUT loses and goes to sleep. HdmiCecMessage message2 = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000); assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message2)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); + mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF); // 3. DUT becomes again. - mWokenUp = false; HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, mPlaybackPhysicalAddress); mHdmiCecLocalDevicePlayback.dispatchMessage(setStreamPath); @@ -1191,7 +1167,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.getDeviceInfo().getLogicalAddress(), mPlaybackPhysicalAddress); assertThat(mNativeWrapper.getResultMessages()).contains(activeSource); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); // 4. DUT turned off. mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF); @@ -1463,8 +1439,7 @@ public class HdmiCecLocalDevicePlaybackTest { @Test public void handleSetStreamPath_Dreaming() throws RemoteException { - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - + mPowerManager.setInteractive(true); mWokenUp = false; HdmiCecMessage message = @@ -1474,6 +1449,7 @@ public class HdmiCecLocalDevicePlaybackTest { assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)) .isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mWokenUp).isTrue(); } @@ -1484,7 +1460,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)) @@ -1494,7 +1470,7 @@ public class HdmiCecLocalDevicePlaybackTest { 0x5000); assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo( ADDR_INVALID); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -1504,13 +1480,13 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test @@ -1520,13 +1496,13 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiControlManager.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW); mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, "HdmiCecLocalDevicePlaybackTest"); - mStandby = false; + mPowerManager.setInteractive(true); HdmiCecMessage message = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000); assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)) .isEqualTo(Constants.HANDLED); assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -1733,7 +1709,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, HdmiControlManager.POWER_CONTROL_MODE_TV); - mStandby = false; + mPowerManager.setInteractive(true); mHdmiControlService.toggleAndFollowTvPower(); HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON); @@ -1744,7 +1720,7 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildStandby( mPlaybackLogicalAddress, ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test @@ -1752,7 +1728,7 @@ public class HdmiCecLocalDevicePlaybackTest { mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setStringValue( HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE, HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); - mStandby = false; + mPowerManager.setInteractive(true); mHdmiControlService.toggleAndFollowTvPower(); HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_ON); @@ -1763,12 +1739,12 @@ public class HdmiCecLocalDevicePlaybackTest { HdmiCecMessage expectedMessage = HdmiCecMessageBuilder.buildStandby( mPlaybackLogicalAddress, ADDR_BROADCAST); assertThat(mNativeWrapper.getResultMessages()).contains(expectedMessage); - assertThat(mStandby).isTrue(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test public void toggleAndFollowTvPower_TvStatusStandby() { - mStandby = false; + mPowerManager.setInteractive(true); mHdmiControlService.toggleAndFollowTvPower(); HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_STANDBY); @@ -1782,12 +1758,12 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackLogicalAddress, mPlaybackPhysicalAddress); assertThat(mNativeWrapper.getResultMessages()).contains(textViewOn); assertThat(mNativeWrapper.getResultMessages()).contains(activeSource); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test public void toggleAndFollowTvPower_TvStatusUnknown() { - mStandby = false; + mPowerManager.setInteractive(true); mHdmiControlService.toggleAndFollowTvPower(); HdmiCecMessage tvPowerStatus = HdmiCecMessageBuilder.buildReportPowerStatus(ADDR_TV, mPlaybackLogicalAddress, HdmiControlManager.POWER_STATUS_UNKNOWN); @@ -1802,31 +1778,31 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackLogicalAddress, Constants.ADDR_TV); assertThat(mNativeWrapper.getResultMessages()).contains(userControlPressed); assertThat(mNativeWrapper.getResultMessages()).contains(userControlReleased); - assertThat(mStandby).isFalse(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test public void toggleAndFollowTvPower_isInteractive() throws RemoteException { - when(mIPowerManagerMock.isInteractive()).thenReturn(true); + mPowerManager.setInteractive(true); mActiveMediaSessionsPaused = false; mWokenUp = false; mHdmiControlService.toggleAndFollowTvPower(); assertThat(mActiveMediaSessionsPaused).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mWokenUp).isFalse(); } @Test public void toggleAndFollowTvPower_isNotInteractive() throws RemoteException { - when(mIPowerManagerMock.isInteractive()).thenReturn(false); + mPowerManager.setInteractive(false); mActiveMediaSessionsPaused = false; - mWokenUp = false; mHdmiControlService.toggleAndFollowTvPower(); assertThat(mActiveMediaSessionsPaused).isFalse(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); } 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 35c7e5d598440..7acf9469df846 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java @@ -37,11 +37,7 @@ import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.tv.cec.V1_0.SendMessageResult; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -67,18 +63,15 @@ public class HdmiCecLocalDeviceTvTest { private HdmiCecController mHdmiCecController; private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); private int mTvPhysicalAddress; private int mTvLogicalAddress; - private boolean mWokenUp; @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; - @Mock private AudioManager mAudioManager; + private AudioManager mAudioManager; @Before public void setUp() { @@ -90,11 +83,6 @@ public class HdmiCecLocalDeviceTvTest { mHdmiControlService = new HdmiControlService(InstrumentationRegistry.getTargetContext(), Collections.emptyList()) { - @Override - void wakeUp() { - mWokenUp = true; - } - @Override boolean isControlEnabled() { return true; @@ -115,12 +103,6 @@ public class HdmiCecLocalDeviceTvTest { return false; } - @Override - protected PowerManager getPowerManager() { - return new PowerManager(context, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mMyLooper)); - } - @Override AudioManager getAudioManager() { return mAudioManager; @@ -145,6 +127,8 @@ public class HdmiCecLocalDeviceTvTest { new HdmiPortInfo(2, HdmiPortInfo.PORT_INPUT, 0x2000, true, false, true); mNativeWrapper.setPortInfo(hdmiPortInfos); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTvPhysicalAddress = 0x0000; mNativeWrapper.setPhysicalAddress(mTvPhysicalAddress); @@ -238,12 +222,12 @@ public class HdmiCecLocalDeviceTvTest { HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, HdmiControlManager.TV_WAKE_ON_ONE_TOUCH_PLAY_ENABLED); mTestLooper.dispatchAll(); - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(ADDR_PLAYBACK_1, mTvLogicalAddress); assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(textViewOn)).isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -252,12 +236,12 @@ public class HdmiCecLocalDeviceTvTest { HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, HdmiControlManager.TV_WAKE_ON_ONE_TOUCH_PLAY_ENABLED); mTestLooper.dispatchAll(); - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage imageViewOn = new HdmiCecMessage(ADDR_PLAYBACK_1, mTvLogicalAddress, Constants.MESSAGE_IMAGE_VIEW_ON, HdmiCecMessage.EMPTY_PARAM); assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(imageViewOn)).isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isTrue(); + assertThat(mPowerManager.isInteractive()).isTrue(); } @Test @@ -266,12 +250,12 @@ public class HdmiCecLocalDeviceTvTest { HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, HdmiControlManager.TV_WAKE_ON_ONE_TOUCH_PLAY_DISABLED); mTestLooper.dispatchAll(); - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(ADDR_PLAYBACK_1, mTvLogicalAddress); assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(textViewOn)).isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test @@ -280,12 +264,12 @@ public class HdmiCecLocalDeviceTvTest { HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, HdmiControlManager.TV_WAKE_ON_ONE_TOUCH_PLAY_DISABLED); mTestLooper.dispatchAll(); - mWokenUp = false; + mPowerManager.setInteractive(false); HdmiCecMessage imageViewOn = new HdmiCecMessage(ADDR_PLAYBACK_1, mTvLogicalAddress, Constants.MESSAGE_IMAGE_VIEW_ON, HdmiCecMessage.EMPTY_PARAM); assertThat(mHdmiCecLocalDeviceTv.dispatchMessage(imageViewOn)).isEqualTo(Constants.HANDLED); mTestLooper.dispatchAll(); - assertThat(mWokenUp).isFalse(); + assertThat(mPowerManager.isInteractive()).isFalse(); } @Test 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 ceb41cf8eee16..bff12968e8cda 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java @@ -20,17 +20,12 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -43,8 +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; import java.util.Collections; @@ -61,28 +54,16 @@ public class HdmiCecPowerStatusControllerTest { HdmiControlManager.POWER_STATUS_STANDBY}; private HdmiCecPowerStatusController mHdmiCecPowerStatusController; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; private HdmiControlService mHdmiControlService; private HdmiCecLocalDevicePlayback mHdmiCecLocalDevicePlayback; @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - Context contextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); Looper myLooper = mTestLooper.getLooper(); - when(contextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(contextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(myLooper))); - when(contextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(contextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(myLooper))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); mHdmiControlService = new HdmiControlService(contextSpy, Collections.emptyList()) { @Override @@ -125,6 +106,8 @@ public class HdmiCecPowerStatusControllerTest { mNativeWrapper.setPortInfo(hdmiPortInfos); mNativeWrapper.setPortConnectionStatus(1, true); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(contextSpy); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.getHdmiCecNetwork().initPortInfo(); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.setPhysicalAddress(0x2000); 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 6492e0f127abb..c525f9beb1ade 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -35,7 +35,6 @@ import static org.mockito.Mockito.doReturn; 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.content.ContextWrapper; @@ -44,10 +43,7 @@ import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiCecVolumeControlFeatureListener; import android.hardware.hdmi.IHdmiControlStatusChangeListener; import android.os.Binder; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.RemoteException; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -60,9 +56,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; @@ -77,107 +71,6 @@ import java.util.Optional; @RunWith(JUnit4.class) public class HdmiControlServiceTest { - protected static class MockPlaybackDevice extends HdmiCecLocalDevicePlayback { - - private boolean mCanGoToStandby; - private boolean mIsStandby; - private boolean mIsDisabled; - - MockPlaybackDevice(HdmiControlService service) { - super(service); - } - - @Override - protected void onAddressAllocated(int logicalAddress, int reason) {} - - @Override - protected int getPreferredAddress() { - return 0; - } - - @Override - protected void setPreferredAddress(int addr) {} - - @Override - protected boolean canGoToStandby() { - return mCanGoToStandby; - } - - @Override - protected void disableDevice( - boolean initiatedByCec, final PendingActionClearedCallback originalCallback) { - mIsDisabled = true; - originalCallback.onCleared(this); - } - - @Override - protected void onStandby(boolean initiatedByCec, int standbyAction) { - mIsStandby = true; - } - - protected boolean isStandby() { - return mIsStandby; - } - - protected boolean isDisabled() { - return mIsDisabled; - } - - protected void setCanGoToStandby(boolean canGoToStandby) { - mCanGoToStandby = canGoToStandby; - } - } - protected static class MockAudioSystemDevice extends HdmiCecLocalDeviceAudioSystem { - - private boolean mCanGoToStandby; - private boolean mIsStandby; - private boolean mIsDisabled; - - MockAudioSystemDevice(HdmiControlService service) { - super(service); - } - - @Override - protected void onAddressAllocated(int logicalAddress, int reason) {} - - @Override - protected int getPreferredAddress() { - return 0; - } - - @Override - protected void setPreferredAddress(int addr) {} - - @Override - protected boolean canGoToStandby() { - return mCanGoToStandby; - } - - @Override - protected void disableDevice( - boolean initiatedByCec, final PendingActionClearedCallback originalCallback) { - mIsDisabled = true; - originalCallback.onCleared(this); - } - - @Override - protected void onStandby(boolean initiatedByCec, int standbyAction) { - mIsStandby = true; - } - - protected boolean isStandby() { - return mIsStandby; - } - - protected boolean isDisabled() { - return mIsDisabled; - } - - protected void setCanGoToStandby(boolean canGoToStandby) { - mCanGoToStandby = canGoToStandby; - } - } - private static final String TAG = "HdmiControlServiceTest"; private Context mContextSpy; private HdmiControlService mHdmiControlServiceSpy; @@ -185,28 +78,16 @@ public class HdmiControlServiceTest { private MockAudioSystemDevice mAudioSystemDeviceSpy; private MockPlaybackDevice mPlaybackDeviceSpy; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); private HdmiPortInfo[] mHdmiPortInfo; - @Mock private IPowerManager mIPowerManagerMock; - @Mock private IThermalService mIThermalServiceMock; - @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, null)); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, null)); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList())); @@ -237,15 +118,17 @@ public class HdmiControlServiceTest { mLocalDevices.add(mPlaybackDeviceSpy); mHdmiPortInfo = new HdmiPortInfo[4]; mHdmiPortInfo[0] = - new HdmiPortInfo(1, HdmiPortInfo.PORT_INPUT, 0x2100, true, false, false); + new HdmiPortInfo(1, HdmiPortInfo.PORT_INPUT, 0x2100, true, false, false); mHdmiPortInfo[1] = - new HdmiPortInfo(2, HdmiPortInfo.PORT_INPUT, 0x2200, true, false, false); + new HdmiPortInfo(2, HdmiPortInfo.PORT_INPUT, 0x2200, true, false, false); mHdmiPortInfo[2] = - new HdmiPortInfo(3, HdmiPortInfo.PORT_INPUT, 0x2000, true, false, false); + new HdmiPortInfo(3, HdmiPortInfo.PORT_INPUT, 0x2000, true, false, false); mHdmiPortInfo[3] = - new HdmiPortInfo(4, HdmiPortInfo.PORT_INPUT, 0x3000, true, false, false); + new HdmiPortInfo(4, HdmiPortInfo.PORT_INPUT, 0x3000, true, false, false); mNativeWrapper.setPortInfo(mHdmiPortInfo); mHdmiControlServiceSpy.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlServiceSpy.setPowerManager(mPowerManager); mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mTestLooper.dispatchAll(); @@ -283,7 +166,7 @@ public class HdmiControlServiceTest { @Test public void initialPowerStatus_quiescentBoot_isTransientToStandby() throws RemoteException { - when(mIPowerManagerMock.isInteractive()).thenReturn(false); + mPowerManager.setInteractive(false); assertThat(mHdmiControlServiceSpy.getInitialPowerStatus()).isEqualTo( HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY); } @@ -298,7 +181,7 @@ public class HdmiControlServiceTest { @Test public void powerStatusAfterBootComplete_quiescentBoot_isStandby() throws RemoteException { - when(mIPowerManagerMock.isInteractive()).thenReturn(false); + mPowerManager.setInteractive(false); mHdmiControlServiceSpy.onBootPhase(PHASE_BOOT_COMPLETED); assertThat(mHdmiControlServiceSpy.getPowerStatus()).isEqualTo( HdmiControlManager.POWER_STATUS_STANDBY); @@ -785,30 +668,6 @@ public class HdmiControlServiceTest { assertThat(hdmiControlStatusCallback.mCecAvailable).isTrue(); } - private static class HdmiControlStatusCallback extends IHdmiControlStatusChangeListener.Stub { - boolean mCecEnabled = false; - boolean mCecAvailable = false; - - @Override - public void onStatusChange(int isCecEnabled, boolean isCecAvailable) - throws RemoteException { - mCecEnabled = isCecEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; - mCecAvailable = isCecAvailable; - } - } - - private static class VolumeControlFeatureCallback extends - IHdmiCecVolumeControlFeatureListener.Stub { - boolean mCallbackReceived = false; - int mVolumeControlEnabled = -1; - - @Override - public void onHdmiCecVolumeControlFeature(int enabled) throws RemoteException { - this.mCallbackReceived = true; - this.mVolumeControlEnabled = enabled; - } - } - @Test public void handleCecCommand_errorParameter_returnsAbortInvalidOperand() { // Validity ERROR_PARAMETER. Taken from HdmiCecMessageValidatorTest#isValid_menuStatus @@ -1011,4 +870,134 @@ public class HdmiControlServiceTest { .containsExactly(DEVICE_PLAYBACK, DEVICE_AUDIO_SYSTEM); } + protected static class MockPlaybackDevice extends HdmiCecLocalDevicePlayback { + + private boolean mCanGoToStandby; + private boolean mIsStandby; + private boolean mIsDisabled; + + MockPlaybackDevice(HdmiControlService service) { + super(service); + } + + @Override + protected void onAddressAllocated(int logicalAddress, int reason) { + } + + @Override + protected int getPreferredAddress() { + return 0; + } + + @Override + protected void setPreferredAddress(int addr) { + } + + @Override + protected boolean canGoToStandby() { + return mCanGoToStandby; + } + + @Override + protected void disableDevice( + boolean initiatedByCec, final PendingActionClearedCallback originalCallback) { + mIsDisabled = true; + originalCallback.onCleared(this); + } + + @Override + protected void onStandby(boolean initiatedByCec, int standbyAction) { + mIsStandby = true; + } + + protected boolean isStandby() { + return mIsStandby; + } + + protected boolean isDisabled() { + return mIsDisabled; + } + + protected void setCanGoToStandby(boolean canGoToStandby) { + mCanGoToStandby = canGoToStandby; + } + } + + protected static class MockAudioSystemDevice extends HdmiCecLocalDeviceAudioSystem { + + private boolean mCanGoToStandby; + private boolean mIsStandby; + private boolean mIsDisabled; + + MockAudioSystemDevice(HdmiControlService service) { + super(service); + } + + @Override + protected void onAddressAllocated(int logicalAddress, int reason) { + } + + @Override + protected int getPreferredAddress() { + return 0; + } + + @Override + protected void setPreferredAddress(int addr) { + } + + @Override + protected boolean canGoToStandby() { + return mCanGoToStandby; + } + + @Override + protected void disableDevice( + boolean initiatedByCec, final PendingActionClearedCallback originalCallback) { + mIsDisabled = true; + originalCallback.onCleared(this); + } + + @Override + protected void onStandby(boolean initiatedByCec, int standbyAction) { + mIsStandby = true; + } + + protected boolean isStandby() { + return mIsStandby; + } + + protected boolean isDisabled() { + return mIsDisabled; + } + + protected void setCanGoToStandby(boolean canGoToStandby) { + mCanGoToStandby = canGoToStandby; + } + } + + private static class HdmiControlStatusCallback extends IHdmiControlStatusChangeListener.Stub { + boolean mCecEnabled = false; + boolean mCecAvailable = false; + + @Override + public void onStatusChange(int isCecEnabled, boolean isCecAvailable) + throws RemoteException { + mCecEnabled = isCecEnabled == HdmiControlManager.HDMI_CEC_CONTROL_ENABLED; + mCecAvailable = isCecAvailable; + } + } + + private static class VolumeControlFeatureCallback extends + IHdmiCecVolumeControlFeatureListener.Stub { + boolean mCallbackReceived = false; + int mVolumeControlEnabled = -1; + + @Override + public void onHdmiCecVolumeControlFeature(int enabled) throws RemoteException { + this.mCallbackReceived = true; + this.mVolumeControlEnabled = enabled; + } + } + } 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 d5b116f7b0c22..5074f64a9830e 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/OneTouchPlayActionTest.java @@ -23,7 +23,6 @@ import static com.android.server.hdmi.OneTouchPlayAction.STATE_WAITING_FOR_REPOR import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; @@ -31,11 +30,7 @@ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -46,8 +41,6 @@ import com.android.server.hdmi.HdmiCecFeatureAction.ActionTimer; 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; @@ -69,36 +62,22 @@ public class OneTouchPlayActionTest { private Context mContextSpy; private HdmiControlService mHdmiControlService; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private FakeHdmiCecConfig mHdmiCecConfig; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); private int mPhysicalAddress; - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; - /** * Manually called before tests, because some tests require HDMI control to be disabled. * @param hdmiControlEnabled whether to enable the global setting hdmi_control. * @throws Exception */ public void setUp(boolean hdmiControlEnabled) throws Exception { - MockitoAnnotations.initMocks(this); - mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); mHdmiCecConfig = new FakeHdmiCecConfig(mContextSpy); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { @Override AudioManager getAudioManager() { @@ -111,21 +90,11 @@ public class OneTouchPlayActionTest { }; } - @Override - void wakeUp() { - } - @Override boolean isPowerStandby() { return false; } - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper())); - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -143,6 +112,8 @@ public class OneTouchPlayActionTest { mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService)); mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService)); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlService.setPowerManager(mPowerManager); mPhysicalAddress = 0x2000; mNativeWrapper.setPhysicalAddress(mPhysicalAddress); mTestLooper.dispatchAll(); 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 60c0f41a57206..a12aa295bcd65 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/PowerStatusMonitorActionTest.java @@ -24,7 +24,6 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; @@ -32,11 +31,7 @@ import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -46,8 +41,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; @@ -61,31 +54,17 @@ public class PowerStatusMonitorActionTest { private Context mContextSpy; private HdmiControlService mHdmiControlService; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); private int mPhysicalAddress; private HdmiCecLocalDeviceTv mTvDevice; - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; - @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper()))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); - mHdmiControlService = new HdmiControlService(mContextSpy, Collections.singletonList(HdmiDeviceInfo.DEVICE_TV)) { @Override @@ -99,21 +78,11 @@ public class PowerStatusMonitorActionTest { }; } - @Override - void wakeUp() { - } - @Override boolean isPowerStandby() { return false; } - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mTestLooper.getLooper())); - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -140,6 +109,8 @@ public class PowerStatusMonitorActionTest { new HdmiPortInfo(2, HdmiPortInfo.PORT_INPUT, 0x2000, true, false, false); mNativeWrapper.setPortInfo(hdmiPortInfo); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlService.setPowerManager(mPowerManager); mPhysicalAddress = 0x0000; mNativeWrapper.setPhysicalAddress(mPhysicalAddress); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); 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 00e3bf13d136c..9589b73371bf6 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java @@ -22,11 +22,7 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; import android.content.Context; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -38,8 +34,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; @@ -68,6 +62,7 @@ public class RequestSadActionTest { private HdmiCecController mHdmiCecController; private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); @@ -80,10 +75,6 @@ public class RequestSadActionTest { mSupportedSads = supportedSads; } }; - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; private static byte[] concatenateSads(List sads) { byte[] concatenatedSads = new byte[sads.size() * 3]; @@ -97,8 +88,6 @@ public class RequestSadActionTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); - Context context = InstrumentationRegistry.getTargetContext(); mMyLooper = mTestLooper.getLooper(); @@ -110,10 +99,6 @@ public class RequestSadActionTest { return true; } - @Override - void wakeUp() { - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -123,12 +108,6 @@ public class RequestSadActionTest { boolean isPowerStandbyOrTransient() { return false; } - - @Override - protected PowerManager getPowerManager() { - return new PowerManager(context, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mMyLooper)); - } }; mHdmiCecLocalDeviceTv = new HdmiCecLocalDeviceTv(mHdmiControlService); @@ -143,6 +122,8 @@ public class RequestSadActionTest { mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService)); mLocalDevices.add(mHdmiCecLocalDeviceTv); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.setPhysicalAddress(0x0000); mTestLooper.dispatchAll(); 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 bd307fdf6e50e..0916b1225197b 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java @@ -33,11 +33,7 @@ import android.content.Context; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiControlCallback; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -49,8 +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; import java.util.Collections; @@ -101,9 +95,9 @@ public class RoutingControlActionTest { private static final int VENDOR_ID_AVR = 0x11233; private static final byte[] TUNER_PARAM = - new byte[] {(PHYSICAL_ADDRESS_TUNER >> 8) & 0xFF, PHYSICAL_ADDRESS_TUNER & 0xFF}; + new byte[]{(PHYSICAL_ADDRESS_TUNER >> 8) & 0xFF, PHYSICAL_ADDRESS_TUNER & 0xFF}; private static final byte[] PLAYER_PARAM = - new byte[] {(PHYSICAL_ADDRESS_PLAYER >> 8) & 0xFF, PHYSICAL_ADDRESS_PLAYER & 0xFF}; + new byte[]{(PHYSICAL_ADDRESS_PLAYER >> 8) & 0xFF, PHYSICAL_ADDRESS_PLAYER & 0xFF}; private static final HdmiDeviceInfo DEVICE_INFO_AVR = new HdmiDeviceInfo(ADDR_AUDIO_SYSTEM, PHYSICAL_ADDRESS_AVR, PORT_1, @@ -124,23 +118,20 @@ public class RoutingControlActionTest { private HdmiCecController mHdmiCecController; private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private Looper mMyLooper; private TestLooper mTestLooper = new TestLooper(); private ArrayList mLocalDevices = new ArrayList<>(); - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; + private static RoutingControlAction createRoutingControlAction(HdmiCecLocalDeviceTv localDevice, + TestInputSelectCallback callback) { + return new RoutingControlAction(localDevice, PHYSICAL_ADDRESS_AVR, callback); + } @Before public void setUp() { - MockitoAnnotations.initMocks(this); - Context context = InstrumentationRegistry.getTargetContext(); mMyLooper = mTestLooper.getLooper(); - PowerManager powerManager = new PowerManager(context, mIPowerManagerMock, - mIThermalServiceMock, new Handler(mMyLooper)); HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(context); @@ -152,10 +143,6 @@ public class RoutingControlActionTest { return true; } - @Override - void wakeUp() { - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -166,11 +153,6 @@ public class RoutingControlActionTest { return false; } - @Override - protected PowerManager getPowerManager() { - return powerManager; - } - @Override protected HdmiCecConfig getHdmiCecConfig() { return hdmiCecConfig; @@ -190,9 +172,11 @@ public class RoutingControlActionTest { HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1]; hdmiPortInfos[0] = new HdmiPortInfo(1, HdmiPortInfo.PORT_INPUT, PHYSICAL_ADDRESS_AVR, - true, false, false); + true, false, false); mNativeWrapper.setPortInfo(hdmiPortInfos); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.setPhysicalAddress(0x0000); mTestLooper.dispatchAll(); @@ -200,6 +184,50 @@ public class RoutingControlActionTest { mHdmiControlService.getHdmiCecNetwork().addCecDevice(DEVICE_INFO_AVR); } + // Routing control succeeds against the device connected directly to the port. Action + // won't get any in this case. It times out on , + // regards the directly connected one as the new routing path to switch to. + @Test + public void testRoutingControl_succeedForDirectlyConnectedDevice() { + TestInputSelectCallback callback = new TestInputSelectCallback(); + TestActionTimer actionTimer = new TestActionTimer(); + mHdmiControlService.getHdmiCecNetwork().addCecDevice(DEVICE_INFO_AVR); + + RoutingControlAction action = createRoutingControlAction(mHdmiCecLocalDeviceTv, callback); + action.setActionTimer(actionTimer); + action.start(); + assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_ROUTING_INFORMATION); + + action.handleTimerEvent(actionTimer.getState()); + mTestLooper.dispatchAll(); + HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath( + ADDR_TV, PHYSICAL_ADDRESS_AVR); + assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath); + } + + // Succeeds by receiving a couple of commands, followed by + // going out in the end. + @Test + public void testRoutingControl_succeedForDeviceBehindSwitch() { + TestInputSelectCallback callback = new TestInputSelectCallback(); + TestActionTimer actionTimer = new TestActionTimer(); + mHdmiControlService.getHdmiCecNetwork().addCecDevice(DEVICE_INFO_PLAYER); + RoutingControlAction action = createRoutingControlAction(mHdmiCecLocalDeviceTv, callback); + action.setActionTimer(actionTimer); + action.start(); + + assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_ROUTING_INFORMATION); + + action.processCommand(ROUTING_INFORMATION_TUNER); + action.processCommand(ROUTING_INFORMATION_PLAYER); + + action.handleTimerEvent(actionTimer.getState()); + mTestLooper.dispatchAll(); + HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath( + ADDR_TV, PHYSICAL_ADDRESS_PLAYER); + assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath); + } + private static class TestActionTimer implements ActionTimer { private int mState; @@ -230,53 +258,4 @@ public class RoutingControlActionTest { return mCallbackResult.get(0); } } - - private static RoutingControlAction createRoutingControlAction(HdmiCecLocalDeviceTv localDevice, - TestInputSelectCallback callback) { - return new RoutingControlAction(localDevice, PHYSICAL_ADDRESS_AVR, callback); - } - - // Routing control succeeds against the device connected directly to the port. Action - // won't get any in this case. It times out on , - // regards the directly connected one as the new routing path to switch to. - @Test - public void testRoutingControl_succeedForDirectlyConnectedDevice() { - TestInputSelectCallback callback = new TestInputSelectCallback(); - TestActionTimer actionTimer = new TestActionTimer(); - mHdmiControlService.getHdmiCecNetwork().addCecDevice(DEVICE_INFO_AVR); - - RoutingControlAction action = createRoutingControlAction(mHdmiCecLocalDeviceTv, callback); - action.setActionTimer(actionTimer); - action.start(); - assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_ROUTING_INFORMATION); - - action.handleTimerEvent(actionTimer.getState()); - mTestLooper.dispatchAll(); - HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath( - ADDR_TV, PHYSICAL_ADDRESS_AVR); - assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath); - } - - // Succeeds by receiving a couple of commands, followed by - // going out in the end. - @Test - public void testRoutingControl_succeedForDeviceBehindSwitch() { - TestInputSelectCallback callback = new TestInputSelectCallback(); - TestActionTimer actionTimer = new TestActionTimer(); - mHdmiControlService.getHdmiCecNetwork().addCecDevice(DEVICE_INFO_PLAYER); - RoutingControlAction action = createRoutingControlAction(mHdmiCecLocalDeviceTv, callback); - action.setActionTimer(actionTimer); - action.start(); - - assertThat(actionTimer.getState()).isEqualTo(STATE_WAIT_FOR_ROUTING_INFORMATION); - - action.processCommand(ROUTING_INFORMATION_TUNER); - action.processCommand(ROUTING_INFORMATION_PLAYER); - - action.handleTimerEvent(actionTimer.getState()); - mTestLooper.dispatchAll(); - HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath( - ADDR_TV, PHYSICAL_ADDRESS_PLAYER); - assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath); - } } 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 c650f4b5862de..949cf9fd8cc1f 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java @@ -24,17 +24,12 @@ import static com.android.server.hdmi.SystemAudioAutoInitiationAction.RETRIES_ON import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import android.content.Context; import android.content.ContextWrapper; import android.hardware.hdmi.HdmiPortInfo; import android.media.AudioManager; -import android.os.Handler; -import android.os.IPowerManager; -import android.os.IThermalService; import android.os.Looper; -import android.os.PowerManager; import android.os.test.TestLooper; import androidx.test.InstrumentationRegistry; @@ -44,8 +39,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; @@ -60,6 +53,7 @@ public class SystemAudioAutoInitiationActionTest { private Context mContextSpy; private HdmiControlService mHdmiControlService; private FakeNativeWrapper mNativeWrapper; + private FakePowerManagerWrapper mPowerManager; private HdmiCecLocalDeviceTv mHdmiCecLocalDeviceTv; @@ -67,25 +61,11 @@ public class SystemAudioAutoInitiationActionTest { private ArrayList mLocalDevices = new ArrayList<>(); private int mPhysicalAddress; - @Mock - private IPowerManager mIPowerManagerMock; - @Mock - private IThermalService mIThermalServiceMock; - @Before public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); Looper myLooper = mTestLooper.getLooper(); - when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(myLooper))); - when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i -> - new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(myLooper))); - when(mIPowerManagerMock.isInteractive()).thenReturn(true); mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) { @Override @@ -99,21 +79,11 @@ public class SystemAudioAutoInitiationActionTest { }; } - @Override - void wakeUp() { - } - @Override boolean isPowerStandby() { return false; } - @Override - protected PowerManager getPowerManager() { - return new PowerManager(mContextSpy, mIPowerManagerMock, - mIThermalServiceMock, new Handler(myLooper)); - } - @Override protected void writeStringSystemProperty(String key, String value) { // do nothing @@ -137,6 +107,8 @@ public class SystemAudioAutoInitiationActionTest { new HdmiPortInfo(2, HdmiPortInfo.PORT_INPUT, 0x2000, true, false, true); mNativeWrapper.setPortInfo(hdmiPortInfos); mHdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(mContextSpy); + mHdmiControlService.setPowerManager(mPowerManager); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mPhysicalAddress = 0x0000; mNativeWrapper.setPhysicalAddress(mPhysicalAddress); 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 3a8808b999037..b40650e767fdb 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java @@ -47,6 +47,7 @@ import java.util.Collections; public class SystemAudioInitiationActionFromAvrTest { private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; + private FakePowerManagerWrapper mPowerManager; private TestLooper mTestLooper = new TestLooper(); private boolean mShouldDispatchActiveSource; @@ -142,9 +143,6 @@ public class SystemAudioInitiationActionFromAvrTest { protected void writeStringSystemProperty(String key, String value) { } - @Override - void wakeUp() {} - @Override int getPhysicalAddress() { return 0; @@ -175,6 +173,8 @@ public class SystemAudioInitiationActionFromAvrTest { hdmiControlService, nativeWrapper, hdmiControlService.getAtomWriter()); hdmiControlService.setCecController(hdmiCecController); hdmiControlService.initService(); + mPowerManager = new FakePowerManagerWrapper(context); + hdmiControlService.setPowerManager(mPowerManager); mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(hdmiControlService) { @Override