Merge changes If53863a3,Id09ab99c,I4b2b7825,I3244ecb9
* changes: Pass caller information through setAndBroadcastActiveSource Remove playback device handling from source device routing control Update Active Source on Routing Change and Set Stream Path messages Replace mIsActiveSource by isActiveSource()
This commit is contained in:
committed by
Android (Google) Code Review
commit
3ec9feb5cd
@@ -379,7 +379,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
||||
assertRunOnServiceThread();
|
||||
if (reason == mService.INITIATED_BY_ENABLE_CEC) {
|
||||
mService.setAndBroadcastActiveSource(mService.getPhysicalAddress(),
|
||||
getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST);
|
||||
getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST,
|
||||
"HdmiCecLocalDeviceAudioSystem#onAddressAllocated()");
|
||||
}
|
||||
mService.sendCecCommand(
|
||||
HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
|
||||
@@ -1324,7 +1325,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
|
||||
if (getRoutingPort() == Constants.CEC_SWITCH_HOME && mService.isPlaybackDevice()) {
|
||||
routeToInputFromPortId(Constants.CEC_SWITCH_HOME);
|
||||
mService.setAndBroadcastActiveSourceFromOneDeviceType(
|
||||
message.getSource(), mService.getPhysicalAddress());
|
||||
message.getSource(), mService.getPhysicalAddress(),
|
||||
"HdmiCecLocalDeviceAudioSystem#handleRoutingChangeAndInformationForSwitch()");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.hdmi;
|
||||
|
||||
import android.annotation.CallSuper;
|
||||
import android.hardware.hdmi.HdmiControlManager;
|
||||
import android.hardware.hdmi.HdmiDeviceInfo;
|
||||
import android.hardware.hdmi.IHdmiControlCallback;
|
||||
@@ -96,7 +97,8 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
assertRunOnServiceThread();
|
||||
if (reason == mService.INITIATED_BY_ENABLE_CEC) {
|
||||
mService.setAndBroadcastActiveSource(mService.getPhysicalAddress(),
|
||||
getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST);
|
||||
getDeviceInfo().getDeviceType(), Constants.ADDR_BROADCAST,
|
||||
"HdmiCecLocalDevicePlayback#onAddressAllocated()");
|
||||
}
|
||||
mService.sendCecCommand(HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
|
||||
mAddress, mService.getPhysicalAddress(), mDeviceType));
|
||||
@@ -165,7 +167,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
void onHotplug(int portId, boolean connected) {
|
||||
assertRunOnServiceThread();
|
||||
mCecMessageCache.flushAll();
|
||||
// We'll not clear mIsActiveSource on the hotplug event to pass CETC 11.2.2-2 ~ 3.
|
||||
// We'll not invalidate the active source on the hotplug event to pass CETC 11.2.2-2 ~ 3.
|
||||
if (!connected) {
|
||||
getWakeLock().release();
|
||||
}
|
||||
@@ -178,13 +180,12 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
if (!mService.isControlEnabled()) {
|
||||
return;
|
||||
}
|
||||
if (mIsActiveSource) {
|
||||
if (isActiveSource()) {
|
||||
mService.sendCecCommand(HdmiCecMessageBuilder.buildInactiveSource(
|
||||
mAddress, mService.getPhysicalAddress()));
|
||||
}
|
||||
boolean wasActiveSource = mIsActiveSource;
|
||||
boolean wasActiveSource = isActiveSource();
|
||||
// Invalidate the internal active source record when goes to standby
|
||||
// This set will also update mIsActiveSource
|
||||
mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS,
|
||||
"HdmiCecLocalDevicePlayback#onStandby()");
|
||||
if (initiatedByCec || !mAutoTvOff || !wasActiveSource) {
|
||||
@@ -229,12 +230,13 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
@CallSuper
|
||||
@ServiceThreadOnly
|
||||
@VisibleForTesting
|
||||
void setIsActiveSource(boolean on) {
|
||||
protected void setActiveSource(int logicalAddress, int physicalAddress, String caller) {
|
||||
assertRunOnServiceThread();
|
||||
super.setIsActiveSource(on);
|
||||
if (on) {
|
||||
super.setActiveSource(logicalAddress, physicalAddress, caller);
|
||||
if (isActiveSource()) {
|
||||
getWakeLock().acquire();
|
||||
} else {
|
||||
getWakeLock().release();
|
||||
@@ -291,7 +293,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
|
||||
@Override
|
||||
protected void wakeUpIfActiveSource() {
|
||||
if (!mIsActiveSource) {
|
||||
if (!isActiveSource()) {
|
||||
return;
|
||||
}
|
||||
// Wake up the device if the power is in standby mode, or its screen is off -
|
||||
@@ -399,9 +401,16 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
"HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation()");
|
||||
return;
|
||||
}
|
||||
if (!isActiveSource()) {
|
||||
// If routing is changed to the device while Active Source, don't invalidate the
|
||||
// Active Source
|
||||
setActiveSource(physicalAddress,
|
||||
"HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation()");
|
||||
}
|
||||
switch (mPlaybackDeviceActionOnRoutingControl) {
|
||||
case WAKE_UP_AND_SEND_ACTIVE_SOURCE:
|
||||
setAndBroadcastActiveSource(message, physicalAddress);
|
||||
setAndBroadcastActiveSource(message, physicalAddress,
|
||||
"HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation()");
|
||||
break;
|
||||
case WAKE_UP_ONLY:
|
||||
mService.wakeUp();
|
||||
@@ -436,7 +445,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
@Override
|
||||
protected void dump(final IndentingPrintWriter pw) {
|
||||
super.dump(pw);
|
||||
pw.println("mIsActiveSource: " + mIsActiveSource);
|
||||
pw.println("isActiveSource(): " + isActiveSource());
|
||||
pw.println("mAutoTvOff:" + mAutoTvOff);
|
||||
}
|
||||
|
||||
@@ -457,7 +466,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
@Override
|
||||
public void acquire() {
|
||||
mWakeLock.acquire();
|
||||
HdmiLogger.debug("active source: %b. Wake lock acquired", mIsActiveSource);
|
||||
HdmiLogger.debug("active source: %b. Wake lock acquired", isActiveSource());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.hdmi;
|
||||
|
||||
import android.annotation.CallSuper;
|
||||
import android.hardware.hdmi.HdmiControlManager;
|
||||
import android.hardware.hdmi.HdmiPortInfo;
|
||||
import android.hardware.hdmi.IHdmiControlCallback;
|
||||
@@ -36,10 +37,6 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
|
||||
private static final String TAG = "HdmiCecLocalDeviceSource";
|
||||
|
||||
// Indicate if current device is Active Source or not
|
||||
@VisibleForTesting
|
||||
protected boolean mIsActiveSource = false;
|
||||
|
||||
// Device has cec switch functionality or not.
|
||||
// Default is false.
|
||||
protected boolean mIsSwitchDevice = HdmiProperties.is_switch().orElse(false);
|
||||
@@ -78,7 +75,7 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
if (mService.getPortInfo(portId).getType() == HdmiPortInfo.PORT_OUTPUT) {
|
||||
mCecMessageCache.flushAll();
|
||||
}
|
||||
// We'll not clear mIsActiveSource on the hotplug event to pass CETC 11.2.2-2 ~ 3.
|
||||
// We'll not invalidate the active source on the hotplug event to pass CETC 11.2.2-2 ~ 3.
|
||||
if (connected) {
|
||||
mService.wakeUp();
|
||||
}
|
||||
@@ -118,10 +115,21 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
// Nothing to do.
|
||||
}
|
||||
|
||||
@Override
|
||||
@CallSuper
|
||||
@ServiceThreadOnly
|
||||
void setActiveSource(int logicalAddress, int physicalAddress, String caller) {
|
||||
boolean wasActiveSource = isActiveSource();
|
||||
super.setActiveSource(logicalAddress, physicalAddress, caller);
|
||||
if (wasActiveSource && !isActiveSource()) {
|
||||
onActiveSourceLost();
|
||||
}
|
||||
}
|
||||
|
||||
@ServiceThreadOnly
|
||||
protected void setActiveSource(int physicalAddress, String caller) {
|
||||
assertRunOnServiceThread();
|
||||
// Invalidate the internal active source record. This will also update mIsActiveSource.
|
||||
// Invalidate the internal active source record.
|
||||
ActiveSource activeSource = ActiveSource.of(Constants.ADDR_INVALID, physicalAddress);
|
||||
setActiveSource(activeSource, caller);
|
||||
}
|
||||
@@ -135,7 +143,6 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
if (!getActiveSource().equals(activeSource)) {
|
||||
setActiveSource(activeSource, "HdmiCecLocalDeviceSource#handleActiveSource()");
|
||||
}
|
||||
setIsActiveSource(physicalAddress == mService.getPhysicalAddress());
|
||||
updateDevicePowerStatus(logicalAddress, HdmiControlManager.POWER_STATUS_ON);
|
||||
if (isRoutingControlFeatureEnabled()) {
|
||||
switchInputOnReceivingNewActivePath(physicalAddress);
|
||||
@@ -159,9 +166,11 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
// If current device is the target path, set to Active Source.
|
||||
// If the path is under the current device, should switch
|
||||
if (physicalAddress == mService.getPhysicalAddress() && mService.isPlaybackDevice()) {
|
||||
setAndBroadcastActiveSource(message, physicalAddress);
|
||||
}
|
||||
if (physicalAddress != mService.getPhysicalAddress()) {
|
||||
setAndBroadcastActiveSource(message, physicalAddress,
|
||||
"HdmiCecLocalDeviceSource#handleSetStreamPath()");
|
||||
} else if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
||||
// Invalidate the active source if stream path is set to other physical address or
|
||||
// our physical address while not active source
|
||||
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleSetStreamPath()");
|
||||
}
|
||||
switchInputOnReceivingNewActivePath(physicalAddress);
|
||||
@@ -173,19 +182,15 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
protected boolean handleRoutingChange(HdmiCecMessage message) {
|
||||
assertRunOnServiceThread();
|
||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams(), 2);
|
||||
if (physicalAddress != mService.getPhysicalAddress()) {
|
||||
if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
||||
// Invalidate the active source if routing is changed to other physical address or
|
||||
// our physical address while not active source
|
||||
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleRoutingChange()");
|
||||
}
|
||||
if (!isRoutingControlFeatureEnabled()) {
|
||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
||||
return true;
|
||||
}
|
||||
// if the current device is a pure playback device
|
||||
if (!mIsSwitchDevice
|
||||
&& physicalAddress == mService.getPhysicalAddress()
|
||||
&& mService.isPlaybackDevice()) {
|
||||
setAndBroadcastActiveSource(message, physicalAddress);
|
||||
}
|
||||
handleRoutingChangeAndInformation(physicalAddress, message);
|
||||
return true;
|
||||
}
|
||||
@@ -195,19 +200,15 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
protected boolean handleRoutingInformation(HdmiCecMessage message) {
|
||||
assertRunOnServiceThread();
|
||||
int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
|
||||
if (physicalAddress != mService.getPhysicalAddress()) {
|
||||
if (physicalAddress != mService.getPhysicalAddress() || !isActiveSource()) {
|
||||
// Invalidate the active source if routing is changed to other physical address or
|
||||
// our physical address while not active source
|
||||
setActiveSource(physicalAddress, "HdmiCecLocalDeviceSource#handleRoutingInformation()");
|
||||
}
|
||||
if (!isRoutingControlFeatureEnabled()) {
|
||||
mService.maySendFeatureAbortCommand(message, Constants.ABORT_REFUSED);
|
||||
return true;
|
||||
}
|
||||
// if the current device is a pure playback device
|
||||
if (!mIsSwitchDevice
|
||||
&& physicalAddress == mService.getPhysicalAddress()
|
||||
&& mService.isPlaybackDevice()) {
|
||||
setAndBroadcastActiveSource(message, physicalAddress);
|
||||
}
|
||||
handleRoutingChangeAndInformation(physicalAddress, message);
|
||||
return true;
|
||||
}
|
||||
@@ -236,23 +237,21 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
// since service can decide who will be the active source when the device supports
|
||||
// multiple device types in this method.
|
||||
// This method should only be called when the device can be the active source.
|
||||
protected void setAndBroadcastActiveSource(HdmiCecMessage message, int physicalAddress) {
|
||||
protected void setAndBroadcastActiveSource(HdmiCecMessage message, int physicalAddress,
|
||||
String caller) {
|
||||
mService.setAndBroadcastActiveSource(
|
||||
physicalAddress, getDeviceInfo().getDeviceType(), message.getSource());
|
||||
physicalAddress, getDeviceInfo().getDeviceType(), message.getSource(), caller);
|
||||
}
|
||||
|
||||
// Indicates if current device is the active source or not
|
||||
@ServiceThreadOnly
|
||||
void setIsActiveSource(boolean on) {
|
||||
assertRunOnServiceThread();
|
||||
boolean wasActiveSource = mIsActiveSource;
|
||||
mIsActiveSource = on;
|
||||
if (wasActiveSource && !mIsActiveSource) {
|
||||
onActiveSourceLost();
|
||||
}
|
||||
protected boolean isActiveSource() {
|
||||
return getActiveSource().equals(getDeviceInfo().getLogicalAddress(),
|
||||
getDeviceInfo().getPhysicalAddress());
|
||||
}
|
||||
|
||||
protected void wakeUpIfActiveSource() {
|
||||
if (!mIsActiveSource) {
|
||||
if (!isActiveSource()) {
|
||||
return;
|
||||
}
|
||||
// Wake up the device
|
||||
@@ -261,7 +260,7 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
|
||||
}
|
||||
|
||||
protected void maySendActiveSource(int dest) {
|
||||
if (!mIsActiveSource) {
|
||||
if (!isActiveSource()) {
|
||||
return;
|
||||
}
|
||||
addAndStartAction(new ActiveSourceAction(this, dest));
|
||||
|
||||
@@ -1600,7 +1600,7 @@ public class HdmiControlService extends SystemService {
|
||||
if (isPlaybackDevice()) {
|
||||
// if playback device itself is the active source,
|
||||
// return its own device info.
|
||||
if (playback() != null && playback().mIsActiveSource) {
|
||||
if (playback() != null && playback().isActiveSource()) {
|
||||
return playback().getDeviceInfo();
|
||||
}
|
||||
// Otherwise get the active source and look for it from the device list
|
||||
@@ -3242,20 +3242,12 @@ public class HdmiControlService extends SystemService {
|
||||
HdmiUtils.pathRelationship(getPhysicalAddress(), physicalAddress));
|
||||
|
||||
// If the current device is a source device, check if the current Active Source matches
|
||||
// the local device info. Set mIsActiveSource of the local device accordingly.
|
||||
// the local device info.
|
||||
for (HdmiCecLocalDevice device : getAllLocalDevices()) {
|
||||
// mIsActiveSource only exists in source device, ignore this setting if the current
|
||||
// device is not an HdmiCecLocalDeviceSource.
|
||||
if (!(device instanceof HdmiCecLocalDeviceSource)) {
|
||||
device.addActiveSourceHistoryItem(new ActiveSource(logicalAddress, physicalAddress),
|
||||
false, caller);
|
||||
continue;
|
||||
}
|
||||
boolean deviceIsActiveSource =
|
||||
logicalAddress == device.getDeviceInfo().getLogicalAddress()
|
||||
&& physicalAddress == getPhysicalAddress();
|
||||
|
||||
((HdmiCecLocalDeviceSource) device).setIsActiveSource(deviceIsActiveSource);
|
||||
device.addActiveSourceHistoryItem(new ActiveSource(logicalAddress, physicalAddress),
|
||||
deviceIsActiveSource, caller);
|
||||
}
|
||||
@@ -3266,22 +3258,22 @@ public class HdmiControlService extends SystemService {
|
||||
// For example, when receiving broadcast messages, all the device types will call this
|
||||
// method but only one of them will be the Active Source.
|
||||
protected void setAndBroadcastActiveSource(
|
||||
int physicalAddress, int deviceType, int source) {
|
||||
int physicalAddress, int deviceType, int source, String caller) {
|
||||
// If the device has both playback and audio system logical addresses,
|
||||
// playback will claim active source. Otherwise audio system will.
|
||||
if (deviceType == HdmiDeviceInfo.DEVICE_PLAYBACK) {
|
||||
HdmiCecLocalDevicePlayback playback = playback();
|
||||
playback.setIsActiveSource(true);
|
||||
playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
|
||||
caller);
|
||||
playback.wakeUpIfActiveSource();
|
||||
playback.maySendActiveSource(source);
|
||||
}
|
||||
|
||||
if (deviceType == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
|
||||
HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem();
|
||||
if (playback() != null) {
|
||||
audioSystem.setIsActiveSource(false);
|
||||
} else {
|
||||
audioSystem.setIsActiveSource(true);
|
||||
if (playback() == null) {
|
||||
audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(),
|
||||
physicalAddress, caller);
|
||||
audioSystem.wakeUpIfActiveSource();
|
||||
audioSystem.maySendActiveSource(source);
|
||||
}
|
||||
@@ -3294,24 +3286,21 @@ public class HdmiControlService extends SystemService {
|
||||
// and this method updates Active Source in all the device types sharing the same
|
||||
// Physical Address.
|
||||
protected void setAndBroadcastActiveSourceFromOneDeviceType(
|
||||
int sourceAddress, int physicalAddress) {
|
||||
int sourceAddress, int physicalAddress, String caller) {
|
||||
// If the device has both playback and audio system logical addresses,
|
||||
// playback will claim active source. Otherwise audio system will.
|
||||
HdmiCecLocalDevicePlayback playback = playback();
|
||||
HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem();
|
||||
if (playback != null) {
|
||||
playback.setIsActiveSource(true);
|
||||
playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
|
||||
caller);
|
||||
playback.wakeUpIfActiveSource();
|
||||
playback.maySendActiveSource(sourceAddress);
|
||||
if (audioSystem != null) {
|
||||
audioSystem.setIsActiveSource(false);
|
||||
}
|
||||
} else {
|
||||
if (audioSystem != null) {
|
||||
audioSystem.setIsActiveSource(true);
|
||||
audioSystem.wakeUpIfActiveSource();
|
||||
audioSystem.maySendActiveSource(sourceAddress);
|
||||
}
|
||||
} else if (audioSystem != null) {
|
||||
audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(),
|
||||
physicalAddress, caller);
|
||||
audioSystem.wakeUpIfActiveSource();
|
||||
audioSystem.maySendActiveSource(sourceAddress);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ final class OneTouchPlayAction extends HdmiCecFeatureAction {
|
||||
// Because only source device can create this action, it's safe to cast.
|
||||
HdmiCecLocalDeviceSource source = source();
|
||||
source.mService.setAndBroadcastActiveSourceFromOneDeviceType(
|
||||
mTargetAddress, getSourcePath());
|
||||
mTargetAddress, getSourcePath(), "OneTouchPlayAction#broadcastActiveSource()");
|
||||
// When OneTouchPlay is called, client side should be responsible to send out the intent
|
||||
// of which internal source, for example YouTube, it would like to switch to.
|
||||
// Here we only update the active port and the active source records in the local
|
||||
|
||||
@@ -119,7 +119,8 @@ public class SystemAudioInitiationActionFromAvr extends HdmiCecFeatureAction {
|
||||
// claim Active Source and start to query TV system audio mode support.
|
||||
if (audioSystem().mService.isPlaybackDevice()) {
|
||||
audioSystem().mService.setAndBroadcastActiveSourceFromOneDeviceType(
|
||||
Constants.ADDR_BROADCAST, getSourcePath());
|
||||
Constants.ADDR_BROADCAST, getSourcePath(),
|
||||
"SystemAudioInitiationActionFromAvr#handleActiveSourceTimeout()");
|
||||
mState = STATE_WAITING_FOR_TV_SUPPORT;
|
||||
queryTvSystemAudioModeSupport();
|
||||
} else {
|
||||
|
||||
@@ -160,7 +160,7 @@ public class ActiveSourceActionTest {
|
||||
assertThat(playbackDevice.getActiveSource().logicalAddress).isEqualTo(
|
||||
playbackDevice.mAddress);
|
||||
assertThat(playbackDevice.getActiveSource().physicalAddress).isEqualTo(mPhysicalAddress);
|
||||
assertThat(playbackDevice.mIsActiveSource).isTrue();
|
||||
assertThat(playbackDevice.isActiveSource()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -30,10 +30,15 @@ import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
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 android.platform.test.annotations.Presubmit;
|
||||
|
||||
@@ -47,6 +52,8 @@ 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;
|
||||
|
||||
@@ -81,8 +88,17 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
||||
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();
|
||||
PowerManager powerManager = new PowerManager(context, mIPowerManagerMock,
|
||||
mIThermalServiceMock, new Handler(mMyLooper));
|
||||
mHdmiControlService =
|
||||
new HdmiControlService(InstrumentationRegistry.getTargetContext()) {
|
||||
@Override
|
||||
@@ -166,6 +182,11 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
||||
return defVal;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
PowerManager getPowerManager() {
|
||||
return powerManager;
|
||||
}
|
||||
};
|
||||
|
||||
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
|
||||
@@ -173,11 +194,6 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
||||
mMyLooper = mTestLooper.getLooper();
|
||||
mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService);
|
||||
mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService) {
|
||||
@Override
|
||||
void setIsActiveSource(boolean on) {
|
||||
mIsActiveSource = on;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getPreferredAddress() {
|
||||
return ADDR_PLAYBACK_1;
|
||||
@@ -827,4 +843,68 @@ public class HdmiCecLocalDeviceAudioSystemTest {
|
||||
|
||||
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(unexpected);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_localDevice_playback() {
|
||||
mHdmiControlService.setActiveSource(mHdmiCecLocalDevicePlayback.mAddress,
|
||||
SELF_PHYSICAL_ADDRESS,
|
||||
"HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
mHdmiCecLocalDevicePlayback.mAddress);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
|
||||
SELF_PHYSICAL_ADDRESS);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_localDevice_audio() {
|
||||
mHdmiControlService.setActiveSource(mHdmiCecLocalDeviceAudioSystem.mAddress,
|
||||
SELF_PHYSICAL_ADDRESS,
|
||||
"HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
mHdmiCecLocalDeviceAudioSystem.mAddress);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
|
||||
SELF_PHYSICAL_ADDRESS);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_remoteDevice() {
|
||||
mHdmiControlService.setActiveSource(Constants.ADDR_TV, 0x0000, "HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
Constants.ADDR_TV);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(0x000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_nonCecDevice() {
|
||||
mHdmiControlService.setActiveSource(Constants.ADDR_INVALID, 0x1234,
|
||||
"HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
Constants.ADDR_INVALID);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(0x1234);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_unknown() {
|
||||
mHdmiControlService.setActiveSource(Constants.ADDR_INVALID,
|
||||
Constants.INVALID_PHYSICAL_ADDRESS, "HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
Constants.ADDR_INVALID);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
|
||||
Constants.INVALID_PHYSICAL_ADDRESS);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.android.server.hdmi;
|
||||
|
||||
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
|
||||
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
|
||||
import static com.android.server.hdmi.Constants.ADDR_INVALID;
|
||||
import static com.android.server.hdmi.Constants.ADDR_TV;
|
||||
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
|
||||
|
||||
@@ -266,106 +267,197 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
@Test
|
||||
public void handleRoutingChange_otherDevice_None() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
ADDR_INVALID);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingChange_sameDevice_None_ActiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
mPlaybackLogicalAddress);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingChange_sameDevice_None_InactiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
ADDR_INVALID);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingChange_otherDevice_StandbyNow() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mStandby).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingChange_otherDevice_StandbyNow_InactiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(false);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingChange_sameDevice_StandbyNow_ActiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingChange(ADDR_TV, 0x0000,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingChange(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingInformation_otherDevice_None() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
ADDR_INVALID);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingInformation_sameDevice_None_ActiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
mPlaybackLogicalAddress);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingInformation_sameDevice_None_InactiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
ADDR_INVALID);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingInformation_otherDevice_StandbyNow() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mStandby).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingInformation_otherDevice_StandbyNow_InactiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(false);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleRoutingInformation_sameDevice_StandbyNow_ActiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildRoutingInformation(ADDR_TV,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleRoutingInformation(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@@ -430,7 +522,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.mService.writeStringSetting(
|
||||
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
|
||||
HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV);
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(false);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true);
|
||||
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -449,7 +542,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.mService.writeStringSetting(
|
||||
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
|
||||
HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST);
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(false);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true);
|
||||
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -468,7 +562,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.mService.writeStringSetting(
|
||||
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
|
||||
HdmiControlManager.SEND_STANDBY_ON_SLEEP_NONE);
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(false);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true);
|
||||
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -487,7 +582,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.mService.writeStringSetting(
|
||||
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
|
||||
HdmiControlManager.SEND_STANDBY_ON_SLEEP_TO_TV);
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true);
|
||||
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -506,7 +602,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.mService.writeStringSetting(
|
||||
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
|
||||
HdmiControlManager.SEND_STANDBY_ON_SLEEP_BROADCAST);
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true);
|
||||
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -525,7 +622,8 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.mService.writeStringSetting(
|
||||
Global.HDMI_CONTROL_SEND_STANDBY_ON_SLEEP,
|
||||
HdmiControlManager.SEND_STANDBY_ON_SLEEP_NONE);
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true);
|
||||
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
|
||||
mTestLooper.dispatchAll();
|
||||
@@ -549,6 +647,11 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
mPlaybackLogicalAddress);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -560,6 +663,11 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
0x0000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
ADDR_TV);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -572,6 +680,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -583,6 +692,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -703,7 +813,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mPlaybackLogicalAddress, ADDR_TV);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
|
||||
}
|
||||
|
||||
@@ -723,7 +833,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
|
||||
}
|
||||
|
||||
@@ -742,7 +852,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mPlaybackLogicalAddress, ADDR_TV);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
|
||||
}
|
||||
|
||||
@@ -761,7 +871,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
|
||||
}
|
||||
|
||||
@@ -805,21 +915,28 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mHdmiCecLocalDevicePlayback.dispatchMessage(setStreamPath);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
mHdmiCecLocalDevicePlayback.getDeviceInfo().getLogicalAddress());
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleSetStreamPath_otherDevice_None() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.NONE;
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().physicalAddress).isEqualTo(
|
||||
0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
ADDR_INVALID);
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@@ -827,12 +944,13 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
public void handleSetStreamPath_otherDevice_StandbyNow() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(true);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
|
||||
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mStandby).isTrue();
|
||||
}
|
||||
|
||||
@@ -840,12 +958,13 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
public void handleSetStreamPath_otherDevice_StandbyNow_InactiveSource() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
HdmiProperties.power_state_change_on_active_source_lost_values.STANDBY_NOW;
|
||||
mHdmiCecLocalDevicePlayback.setIsActiveSource(false);
|
||||
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
|
||||
"HdmiCecLocalDevicePlaybackTest");
|
||||
mStandby = false;
|
||||
HdmiCecMessage message =
|
||||
HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV, 0x5000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleSetStreamPath(message)).isTrue();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
|
||||
assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,11 +137,6 @@ public class HdmiControlServiceBinderAPITest {
|
||||
mMyLooper = mTestLooper.getLooper();
|
||||
|
||||
mPlaybackDevice = new HdmiCecLocalDevicePlayback(mHdmiControlService) {
|
||||
@Override
|
||||
void setIsActiveSource(boolean on) {
|
||||
mIsActiveSource = on;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void wakeUpIfActiveSource() {}
|
||||
|
||||
@@ -186,13 +181,13 @@ public class HdmiControlServiceBinderAPITest {
|
||||
}
|
||||
});
|
||||
assertEquals(mResult, -1);
|
||||
assertThat(mPlaybackDevice.mIsActiveSource).isFalse();
|
||||
assertThat(mPlaybackDevice.isActiveSource()).isFalse();
|
||||
|
||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mHdmiControlService.isAddressAllocated()).isTrue();
|
||||
assertEquals(mResult, HdmiControlManager.RESULT_SUCCESS);
|
||||
assertThat(mPlaybackDevice.mIsActiveSource).isTrue();
|
||||
assertThat(mPlaybackDevice.isActiveSource()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -207,6 +202,6 @@ public class HdmiControlServiceBinderAPITest {
|
||||
}
|
||||
});
|
||||
assertEquals(mResult, HdmiControlManager.RESULT_SUCCESS);
|
||||
assertThat(mPlaybackDevice.mIsActiveSource).isTrue();
|
||||
assertThat(mPlaybackDevice.isActiveSource()).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,82 +405,6 @@ public class HdmiControlServiceTest {
|
||||
assertThat(callback2.mVolumeControlEnabled).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_localDevice_playback() {
|
||||
int physicalAddress = 0x1000;
|
||||
mNativeWrapper.setPhysicalAddress(physicalAddress);
|
||||
|
||||
mHdmiControlService.setActiveSource(mMyPlaybackDevice.mAddress, physicalAddress,
|
||||
"HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
mMyPlaybackDevice.mAddress);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
|
||||
physicalAddress);
|
||||
assertThat(mMyPlaybackDevice.mIsActiveSource).isTrue();
|
||||
assertThat(mMyAudioSystemDevice.mIsActiveSource).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_localDevice_audio() {
|
||||
int physicalAddress = 0x1000;
|
||||
mNativeWrapper.setPhysicalAddress(physicalAddress);
|
||||
|
||||
mHdmiControlService.setActiveSource(mMyAudioSystemDevice.mAddress, physicalAddress,
|
||||
"HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
mMyAudioSystemDevice.mAddress);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
|
||||
physicalAddress);
|
||||
assertThat(mMyPlaybackDevice.mIsActiveSource).isFalse();
|
||||
assertThat(mMyAudioSystemDevice.mIsActiveSource).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_remoteDevice() {
|
||||
int physicalAddress = 0x1000;
|
||||
mNativeWrapper.setPhysicalAddress(physicalAddress);
|
||||
|
||||
mHdmiControlService.setActiveSource(Constants.ADDR_TV, 0x0000, "HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
Constants.ADDR_TV);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(0x000);
|
||||
assertThat(mMyPlaybackDevice.mIsActiveSource).isFalse();
|
||||
assertThat(mMyAudioSystemDevice.mIsActiveSource).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_nonCecDevice() {
|
||||
int physicalAddress = 0x1000;
|
||||
mNativeWrapper.setPhysicalAddress(physicalAddress);
|
||||
|
||||
mHdmiControlService.setActiveSource(Constants.ADDR_INVALID, 0x1234,
|
||||
"HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
Constants.ADDR_INVALID);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(0x1234);
|
||||
assertThat(mMyPlaybackDevice.mIsActiveSource).isFalse();
|
||||
assertThat(mMyAudioSystemDevice.mIsActiveSource).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setActiveSource_unknown() {
|
||||
int physicalAddress = 0x1000;
|
||||
mNativeWrapper.setPhysicalAddress(physicalAddress);
|
||||
|
||||
mHdmiControlService.setActiveSource(Constants.ADDR_INVALID,
|
||||
Constants.INVALID_PHYSICAL_ADDRESS, "HdmiControlServiceTest");
|
||||
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
|
||||
Constants.ADDR_INVALID);
|
||||
assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
|
||||
Constants.INVALID_PHYSICAL_ADDRESS);
|
||||
assertThat(mMyPlaybackDevice.mIsActiveSource).isFalse();
|
||||
assertThat(mMyAudioSystemDevice.mIsActiveSource).isFalse();
|
||||
}
|
||||
|
||||
private static class VolumeControlFeatureCallback extends
|
||||
IHdmiCecVolumeControlFeatureListener.Stub {
|
||||
|
||||
@@ -150,7 +150,7 @@ public class SystemAudioInitiationActionFromAvrTest {
|
||||
|
||||
@Override
|
||||
public void setAndBroadcastActiveSourceFromOneDeviceType(
|
||||
int sourceAddress, int physicalAddress) {
|
||||
int sourceAddress, int physicalAddress, String caller) {
|
||||
mBroadcastActiveSource = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user