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 =
|
static final String PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL_WAKE_UP_AND_SEND_ACTIVE_SOURCE =
|
||||||
"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_DIGITAL_RF = 1;
|
||||||
static final int RECORDING_TYPE_ANALOGUE_RF = 2;
|
static final int RECORDING_TYPE_ANALOGUE_RF = 2;
|
||||||
static final int RECORDING_TYPE_EXTERNAL_PHYSICAL_ADDRESS = 3;
|
static final int RECORDING_TYPE_EXTERNAL_PHYSICAL_ADDRESS = 3;
|
||||||
|
|||||||
@@ -67,6 +67,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected String mPlaybackDeviceActionOnRoutingControl;
|
protected String mPlaybackDeviceActionOnRoutingControl;
|
||||||
|
|
||||||
|
// Behaviour of the device when <Active Source> is lost in favor of another device.
|
||||||
|
@VisibleForTesting
|
||||||
|
protected String mPowerStateChangeOnActiveSourceLost;
|
||||||
|
|
||||||
HdmiCecLocalDevicePlayback(HdmiControlService service) {
|
HdmiCecLocalDevicePlayback(HdmiControlService service) {
|
||||||
super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);
|
super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);
|
||||||
|
|
||||||
@@ -79,6 +83,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
mPlaybackDeviceActionOnRoutingControl = SystemProperties.get(
|
mPlaybackDeviceActionOnRoutingControl = SystemProperties.get(
|
||||||
Constants.PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL,
|
Constants.PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL,
|
||||||
Constants.PLAYBACK_DEVICE_ACTION_ON_ROUTING_CONTROL_NONE);
|
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
|
@Override
|
||||||
@@ -240,6 +248,28 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
|
|||||||
return !getWakeLock().isHeld();
|
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
|
@ServiceThreadOnly
|
||||||
protected boolean handleUserControlPressed(HdmiCecMessage message) {
|
protected boolean handleUserControlPressed(HdmiCecMessage message) {
|
||||||
assertRunOnServiceThread();
|
assertRunOnServiceThread();
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
|
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
|
||||||
private int mPlaybackPhysicalAddress;
|
private int mPlaybackPhysicalAddress;
|
||||||
private boolean mWokenUp;
|
private boolean mWokenUp;
|
||||||
|
private boolean mStandby;
|
||||||
|
|
||||||
@Mock private IPowerManager mIPowerManagerMock;
|
@Mock private IPowerManager mIPowerManagerMock;
|
||||||
@Mock private IThermalService mIThermalServiceMock;
|
@Mock private IThermalService mIThermalServiceMock;
|
||||||
@@ -76,6 +77,11 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
mWokenUp = true;
|
mWokenUp = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void standby() {
|
||||||
|
mStandby = true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
boolean isControlEnabled() {
|
boolean isControlEnabled() {
|
||||||
return true;
|
return true;
|
||||||
@@ -336,6 +342,52 @@ public class HdmiCecLocalDevicePlaybackTest {
|
|||||||
assertThat(mNativeWrapper.getResultMessages()).contains(standbyMessage);
|
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
|
@Test
|
||||||
public void sendVolumeKeyEvent_up_volumeEnabled() {
|
public void sendVolumeKeyEvent_up_volumeEnabled() {
|
||||||
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
|
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user