Replace mIsActiveSource by isActiveSource()

Bug: 166760714
Test: atest HdmiCecLocalDevicePlaybackTest

Change-Id: I3244ecb9bd1976d6cd258e777acab3a61ec229bc
This commit is contained in:
Nathalie Le Clair
2020-09-23 15:22:14 +02:00
parent 2c313a31d2
commit cb9de2e5ac
8 changed files with 199 additions and 187 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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