Merge "Introduce PowerManager mock"

This commit is contained in:
Nathalie Le Clair
2021-08-19 11:53:33 +00:00
committed by Android (Google) Code Review
20 changed files with 446 additions and 678 deletions

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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<HdmiCecLocalDevice> 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();

View File

@@ -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<HdmiCecLocalDevice> 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);

View File

@@ -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<HdmiCecLocalDevice> 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) {

View File

@@ -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<HdmiCecLocalDevice> 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(

View File

@@ -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<HdmiCecLocalDevice> 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();

View File

@@ -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.
}

View File

@@ -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<HdmiCecLocalDevice> 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);

View File

@@ -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<HdmiCecLocalDevice> 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

View File

@@ -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<HdmiCecLocalDevice> 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 <AS>.
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 <AS> 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 <AS> 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();
}

View File

@@ -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<HdmiCecLocalDevice> 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

View File

@@ -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<HdmiCecLocalDevice> 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);

View File

@@ -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<HdmiCecLocalDevice> 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;
}
}
}

View File

@@ -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<HdmiCecLocalDevice> 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();

View File

@@ -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<HdmiCecLocalDevice> 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);

View File

@@ -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<HdmiCecLocalDevice> 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<byte[]> 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();

View File

@@ -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<HdmiCecLocalDevice> 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 <Routing Information> in this case. It times out on <Routing Information>,
// 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 <Routing Information> commands, followed by
// <Set Stream Path> 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 <Routing Information> in this case. It times out on <Routing Information>,
// 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 <Routing Information> commands, followed by
// <Set Stream Path> 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);
}
}

View File

@@ -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<HdmiCecLocalDevice> 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);

View File

@@ -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