diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java index 68473c1830ae4..29bdd6cb40c31 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java @@ -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; } diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index 6e6d848c2accf..6257032cf7090 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java @@ -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 diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 4ff36c4b65db2..4325f797416e6 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java @@ -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)); diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index b407234457a4b..a60a676cfa957 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -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); } } diff --git a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java index 4962af176f18a..e78a86c21453c 100644 --- a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java +++ b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java @@ -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 diff --git a/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java b/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java index 0907e5d03c782..acafda6619f3c 100644 --- a/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java +++ b/services/core/java/com/android/server/hdmi/SystemAudioInitiationActionFromAvr.java @@ -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 { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java index 63ad53bcab4a1..2a9c3942211c1 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java @@ -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 diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java index 415ae0731edb9..74fd6830de615 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java @@ -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(); + } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java index 498ebf4a2ef95..7cbf571d6f60d 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -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(); } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceBinderAPITest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceBinderAPITest.java index 7560a34e63cc8..c4068d34c00d1 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceBinderAPITest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceBinderAPITest.java @@ -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(); } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java index 4849dd4170418..2f48b5ee4c702 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -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 { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java index c7342426c80c5..6be28d9a13beb 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java @@ -150,7 +150,7 @@ public class SystemAudioInitiationActionFromAvrTest { @Override public void setAndBroadcastActiveSourceFromOneDeviceType( - int sourceAddress, int physicalAddress) { + int sourceAddress, int physicalAddress, String caller) { mBroadcastActiveSource = true; }