Introduce PowerManager mock
Remove previous mocks of the IPowerManager interface. Remove power-state-related stubs from HdmiControlService. Stub of HdmiControlService#wakeUp needed to remain where we needed to check if that method was invoked and that couldn't be infered from a power state change. Bug: 173108866 Test: atest Change-Id: I29dbb3b50a1b86032bd7cdad1ec8717d305a2bca
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user