Pass caller information through setAndBroadcastActiveSource

Bug: 166760714
Test: make
Change-Id: If53863a35962ea30e341aefbe9abfe0ad163e049
This commit is contained in:
Nathalie Le Clair
2020-09-28 18:57:39 +02:00
parent 549a3edd8e
commit 2a5278ad22
7 changed files with 23 additions and 18 deletions

View File

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

View File

@@ -102,7 +102,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));
@@ -413,7 +414,8 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
}
switch (mPlaybackDeviceActionOnRoutingControl) {
case WAKE_UP_AND_SEND_ACTIVE_SOURCE:
setAndBroadcastActiveSource(message, physicalAddress);
setAndBroadcastActiveSource(message, physicalAddress,
"HdmiCecLocalDevicePlayback#handleRoutingChangeAndInformation()");
break;
case WAKE_UP_ONLY:
mService.wakeUp();

View File

@@ -166,7 +166,8 @@ 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);
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
@@ -236,9 +237,10 @@ 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

View File

@@ -3250,13 +3250,13 @@ 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.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
"HdmiControlService#setAndBroadcastActiveSource");
caller);
playback.wakeUpIfActiveSource();
playback.maySendActiveSource(source);
}
@@ -3265,8 +3265,7 @@ public class HdmiControlService extends SystemService {
HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem();
if (playback() == null) {
audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(),
physicalAddress,
"HdmiControlService#setAndBroadcastActiveSource");
physicalAddress, caller);
audioSystem.wakeUpIfActiveSource();
audioSystem.maySendActiveSource(source);
}
@@ -3279,20 +3278,19 @@ 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.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
"HdmiControlService#setAndBroadcastActiveSource");
caller);
playback.wakeUpIfActiveSource();
playback.maySendActiveSource(sourceAddress);
} else if (audioSystem != null) {
audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(),
physicalAddress,
"HdmiControlService#setAndBroadcastActiveSource");
physicalAddress, caller);
audioSystem.wakeUpIfActiveSource();
audioSystem.maySendActiveSource(sourceAddress);
}

View File

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

View File

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

View File

@@ -150,7 +150,7 @@ public class SystemAudioInitiationActionFromAvrTest {
@Override
public void setAndBroadcastActiveSourceFromOneDeviceType(
int sourceAddress, int physicalAddress) {
int sourceAddress, int physicalAddress, String caller) {
mBroadcastActiveSource = true;
}