From cb9de2e5ac813f18e5b3fec8c17f71b1071ed9d7 Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Wed, 23 Sep 2020 15:22:14 +0200 Subject: [PATCH] Replace mIsActiveSource by isActiveSource() Bug: 166760714 Test: atest HdmiCecLocalDevicePlaybackTest Change-Id: I3244ecb9bd1976d6cd258e777acab3a61ec229bc --- .../hdmi/HdmiCecLocalDevicePlayback.java | 21 ++-- .../server/hdmi/HdmiCecLocalDeviceSource.java | 36 ++++--- .../server/hdmi/HdmiControlService.java | 41 +++---- .../server/hdmi/ActiveSourceActionTest.java | 2 +- .../HdmiCecLocalDeviceAudioSystemTest.java | 90 +++++++++++++++- .../hdmi/HdmiCecLocalDevicePlaybackTest.java | 101 ++++++++++-------- .../hdmi/HdmiControlServiceBinderAPITest.java | 19 ++-- .../server/hdmi/HdmiControlServiceTest.java | 76 ------------- 8 files changed, 199 insertions(+), 187 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java index f2f6dbe9bde5e..f8d852a4d1add 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; @@ -170,7 +171,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(); } @@ -183,13 +184,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) { @@ -234,12 +234,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(); @@ -296,7 +297,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 - @@ -451,7 +452,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); } @@ -472,7 +473,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..60e2bf152c374 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); @@ -241,18 +248,15 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { physicalAddress, getDeviceInfo().getDeviceType(), message.getSource()); } + // 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 +265,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 44b6a63faea15..299884370d7a8 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -1596,7 +1596,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 @@ -3234,20 +3234,12 @@ public class HdmiControlService extends SystemService { mActiveSource.physicalAddress = 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); } @@ -3263,17 +3255,18 @@ public class HdmiControlService extends SystemService { // 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, + "HdmiControlService#setAndBroadcastActiveSource"); 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, + "HdmiControlService#setAndBroadcastActiveSource"); audioSystem.wakeUpIfActiveSource(); audioSystem.maySendActiveSource(source); } @@ -3292,18 +3285,16 @@ public class HdmiControlService extends SystemService { HdmiCecLocalDevicePlayback playback = playback(); HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem(); if (playback != null) { - playback.setIsActiveSource(true); + playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress, + "HdmiControlService#setAndBroadcastActiveSource"); 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, + "HdmiControlService#setAndBroadcastActiveSource"); + audioSystem.wakeUpIfActiveSource(); + audioSystem.maySendActiveSource(sourceAddress); } } 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 870a27417cd23..01491f19366a7 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 953a03c2d9e38..6dd7fc7235312 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 0c35797b38ea4..2eee22086d8dd 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -267,106 +267,114 @@ 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(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.mIsActiveSource).isFalse(); + assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); 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(); } @@ -436,7 +444,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(); @@ -455,7 +464,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(); @@ -474,7 +484,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(); @@ -493,7 +504,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(); @@ -512,7 +524,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(); @@ -531,7 +544,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(); @@ -709,7 +723,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackLogicalAddress, ADDR_TV); mTestLooper.dispatchAll(); - assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue(); + assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released); } @@ -729,7 +743,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM); mTestLooper.dispatchAll(); - assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue(); + assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue(); assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released); } @@ -748,7 +762,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackLogicalAddress, ADDR_TV); mTestLooper.dispatchAll(); - assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse(); + assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released); } @@ -767,7 +781,7 @@ public class HdmiCecLocalDevicePlaybackTest { mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM); mTestLooper.dispatchAll(); - assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse(); + assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse(); assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released); } @@ -813,19 +827,20 @@ public class HdmiCecLocalDevicePlaybackTest { 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(mStandby).isFalse(); } @@ -833,12 +848,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(); } @@ -846,12 +862,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 c6cf9b116a1df..e201c546bccaf 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceBinderAPITest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceBinderAPITest.java @@ -15,28 +15,28 @@ */ package com.android.server.hdmi; -import static android.os.SystemClock.sleep; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; + import static com.google.common.truth.Truth.assertThat; + import static junit.framework.Assert.assertEquals; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPortInfo; import android.hardware.hdmi.IHdmiControlCallback; import android.os.Looper; -import android.os.SystemProperties; import android.os.test.TestLooper; -import android.util.Slog; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; -import java.util.ArrayList; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import java.util.ArrayList; + /** * Tests for {@link HdmiControlServiceBinderAPITest} class. */ @@ -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 31cf59ee7bdee..88355beebcd33 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 {