Merge "[CEC] Standby when <Active Source> lost" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
96931ab22b
@@ -500,6 +500,22 @@ final class Constants {
|
||||
static final String PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL_WAKE_UP_AND_SEND_ACTIVE_SOURCE =
|
||||
"wake_up_and_send_active_source";
|
||||
|
||||
/**
|
||||
* Property to decide the device behaviour when <Active Source> is lost.
|
||||
*
|
||||
* <p>This property applies to playback devices.
|
||||
* <p>Possible values are:
|
||||
* <ul>
|
||||
* <li><b>none</b> No power state change (default).
|
||||
* <li><b>standby_now</b> PowerManager.goToSleep() is called.
|
||||
* </ul>
|
||||
*/
|
||||
static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST =
|
||||
"ro.hdmi.cec.source.power_state_change_on_active_source_lost";
|
||||
|
||||
static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE = "none";
|
||||
static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW = "standby_now";
|
||||
|
||||
static final int RECORDING_TYPE_DIGITAL_RF = 1;
|
||||
static final int RECORDING_TYPE_ANALOGUE_RF = 2;
|
||||
static final int RECORDING_TYPE_EXTERNAL_PHYSICAL_ADDRESS = 3;
|
||||
|
||||
@@ -67,6 +67,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
@VisibleForTesting
|
||||
protected String mPlaybackDeviceActionOnRoutingControl;
|
||||
|
||||
// Behaviour of the device when <Active Source> is lost in favor of another device.
|
||||
@VisibleForTesting
|
||||
protected String mPowerStateChangeOnActiveSourceLost;
|
||||
|
||||
HdmiCecLocalDevicePlayback(HdmiControlService service) {
|
||||
super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);
|
||||
|
||||
@@ -79,6 +83,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
mPlaybackDeviceActionOnRoutingControl = SystemProperties.get(
|
||||
Constants.PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL,
|
||||
Constants.PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL_NONE);
|
||||
|
||||
mPowerStateChangeOnActiveSourceLost = SystemProperties.get(
|
||||
Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST,
|
||||
Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -240,6 +248,28 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
||||
return !getWakeLock().isHeld();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ServiceThreadOnly
|
||||
protected boolean handleActiveSource(HdmiCecMessage message) {
|
||||
super.handleActiveSource(message);
|
||||
if (mIsActiveSource) {
|
||||
return true;
|
||||
}
|
||||
switch (mPowerStateChangeOnActiveSourceLost) {
|
||||
case Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW:
|
||||
mService.standby();
|
||||
return true;
|
||||
case Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE:
|
||||
return true;
|
||||
default:
|
||||
Slog.w(TAG, "Invalid property '"
|
||||
+ Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST
|
||||
+ "' value: "
|
||||
+ mPowerStateChangeOnActiveSourceLost);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ServiceThreadOnly
|
||||
protected boolean handleUserControlPressed(HdmiCecMessage message) {
|
||||
assertRunOnServiceThread();
|
||||
|
||||
@@ -57,6 +57,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
|
||||
private int mPlaybackPhysicalAddress;
|
||||
private boolean mWokenUp;
|
||||
private boolean mStandby;
|
||||
|
||||
@Mock private IPowerManager mIPowerManagerMock;
|
||||
@Mock private IThermalService mIThermalServiceMock;
|
||||
@@ -76,6 +77,11 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
mWokenUp = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
void standby() {
|
||||
mStandby = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isControlEnabled() {
|
||||
return true;
|
||||
@@ -336,6 +342,52 @@ public class HdmiCecLocalDevicePlaybackTest {
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(standbyMessage);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleActiveSource_ActiveSource_None() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE;
|
||||
mStandby = false;
|
||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_PLAYBACK_1,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleActiveSource_notActiveSource_None() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE;
|
||||
mStandby = false;
|
||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleActiveSource_ActiveSource_StandbyNow() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW;
|
||||
mStandby = false;
|
||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_PLAYBACK_1,
|
||||
mPlaybackPhysicalAddress);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleActiveSource_notActiveSource_StandbyNow() {
|
||||
mHdmiCecLocalDevicePlayback.mPowerStateChangeOnActiveSourceLost =
|
||||
Constants.POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW;
|
||||
mStandby = false;
|
||||
HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
|
||||
assertThat(mHdmiCecLocalDevicePlayback.handleActiveSource(message)).isTrue();
|
||||
mTestLooper.dispatchAll();
|
||||
assertThat(mStandby).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sendVolumeKeyEvent_up_volumeEnabled() {
|
||||
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
|
||||
|
||||
Reference in New Issue
Block a user