Merge "Fix issue with internal Active Source state tracking"
This commit is contained in:
committed by
Android (Google) Code Review
commit
f5abcaa486
@@ -39,15 +39,19 @@ public class ActiveSourceAction extends HdmiCecFeatureAction {
|
||||
@Override
|
||||
boolean start() {
|
||||
mState = STATE_STARTED;
|
||||
sendCommand(HdmiCecMessageBuilder.buildActiveSource(getSourceAddress(),
|
||||
source().mService.getPhysicalAddress()));
|
||||
int logicalAddress = getSourceAddress();
|
||||
int physicalAddress = getSourcePath();
|
||||
|
||||
sendCommand(HdmiCecMessageBuilder.buildActiveSource(logicalAddress, physicalAddress));
|
||||
|
||||
if (source().getType() == HdmiDeviceInfo.DEVICE_PLAYBACK) {
|
||||
// Reports menu-status active to receive <User Control Pressed>.
|
||||
sendCommand(
|
||||
HdmiCecMessageBuilder.buildReportMenuStatus(getSourceAddress(), mDestination,
|
||||
HdmiCecMessageBuilder.buildReportMenuStatus(logicalAddress, mDestination,
|
||||
Constants.MENU_STATE_ACTIVATED));
|
||||
}
|
||||
|
||||
source().setActiveSource(logicalAddress, physicalAddress);
|
||||
mState = STATE_FINISHED;
|
||||
finish();
|
||||
return true;
|
||||
|
||||
@@ -3249,7 +3249,6 @@ public class HdmiControlService extends SystemService {
|
||||
playback.setIsActiveSource(true);
|
||||
playback.wakeUpIfActiveSource();
|
||||
playback.maySendActiveSource(source);
|
||||
setActiveSource(playback.mAddress, physicalAddress);
|
||||
}
|
||||
|
||||
if (deviceType == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
|
||||
@@ -3260,7 +3259,6 @@ public class HdmiControlService extends SystemService {
|
||||
audioSystem.setIsActiveSource(true);
|
||||
audioSystem.wakeUpIfActiveSource();
|
||||
audioSystem.maySendActiveSource(source);
|
||||
setActiveSource(audioSystem.mAddress, physicalAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3283,13 +3281,11 @@ public class HdmiControlService extends SystemService {
|
||||
if (audioSystem != null) {
|
||||
audioSystem.setIsActiveSource(false);
|
||||
}
|
||||
setActiveSource(playback.mAddress, physicalAddress);
|
||||
} else {
|
||||
if (audioSystem != null) {
|
||||
audioSystem.setIsActiveSource(true);
|
||||
audioSystem.wakeUpIfActiveSource();
|
||||
audioSystem.maySendActiveSource(sourceAddress);
|
||||
setActiveSource(audioSystem.mAddress, physicalAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,6 +143,26 @@ public class ActiveSourceActionTest {
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(menuStatus);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void playbackDevice_updatesActiveSourceState() {
|
||||
HdmiCecLocalDevicePlayback playbackDevice = new HdmiCecLocalDevicePlayback(
|
||||
mHdmiControlService);
|
||||
playbackDevice.init();
|
||||
mLocalDevices.add(playbackDevice);
|
||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
HdmiCecFeatureAction action = new com.android.server.hdmi.ActiveSourceAction(
|
||||
playbackDevice, ADDR_TV);
|
||||
playbackDevice.addAndStartAction(action);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(playbackDevice.getActiveSource().logicalAddress).isEqualTo(
|
||||
playbackDevice.mAddress);
|
||||
assertThat(playbackDevice.getActiveSource().physicalAddress).isEqualTo(mPhysicalAddress);
|
||||
assertThat(playbackDevice.mIsActiveSource).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void audioDevice_sendsActiveSource_noMenuStatus() {
|
||||
HdmiCecLocalDeviceAudioSystem audioDevice = new HdmiCecLocalDeviceAudioSystem(
|
||||
|
||||
@@ -617,4 +617,19 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleSetStreamPath_afterHotplug_hasCorrectActiveSource() {
|
||||
mHdmiControlService.onHotplug(1, false);
|
||||
mHdmiControlService.onHotplug(1, true);
|
||||
|
||||
HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV,
|
||||
mPlaybackPhysicalAddress);
|
||||
mHdmiCecLocalDevicePlayback.dispatchMessage(setStreamPath);
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
|
||||
mHdmiCecLocalDevicePlayback.getDeviceInfo().getLogicalAddress());
|
||||
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user