Merge "[CEC Configuration] Add 'tv_send_standby_on_sleep' option" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-01-27 16:09:39 +00:00
committed by Android (Google) Code Review
10 changed files with 151 additions and 54 deletions

View File

@@ -503,6 +503,29 @@ public final class HdmiControlManager {
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
public @interface TvWakeOnOneTouchPlay {} public @interface TvWakeOnOneTouchPlay {}
// -- Whether TV should send <Standby> on sleep.
/**
* Sending <Standby> on sleep.
*
* @hide
*/
public static final int TV_SEND_STANDBY_ON_SLEEP_ENABLED = 1;
/**
* Not sending <Standby> on sleep.
*
* @hide
*/
public static final int TV_SEND_STANDBY_ON_SLEEP_DISABLED = 0;
/**
* @hide
*/
@IntDef(prefix = { "TV_SEND_STANDBY_ON_SLEEP_" }, value = {
TV_SEND_STANDBY_ON_SLEEP_ENABLED,
TV_SEND_STANDBY_ON_SLEEP_DISABLED
})
@Retention(RetentionPolicy.SOURCE)
public @interface TvSendStandbyOnSleep {}
// -- The RC profile of a TV panel. // -- The RC profile of a TV panel.
/** /**
* RC profile none. * RC profile none.
@@ -746,6 +769,14 @@ public final class HdmiControlManager {
*/ */
public static final String CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY = public static final String CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY =
"tv_wake_on_one_touch_play"; "tv_wake_on_one_touch_play";
/**
* Name of a setting deciding whether the device will also turn off other CEC devices
* when it goes to standby mode.
*
* @hide
*/
public static final String CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP =
"tv_send_standby_on_sleep";
/** /**
* Name of a setting representing the RC profile of a TV panel. * Name of a setting representing the RC profile of a TV panel.
* *
@@ -805,12 +836,13 @@ public final class HdmiControlManager {
CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING,
CEC_SETTING_NAME_VOLUME_CONTROL_MODE, CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY, CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY,
CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
CEC_SETTING_NAME_RC_PROFILE_TV, CEC_SETTING_NAME_RC_PROFILE_TV,
CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU, CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU,
CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU, CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU,
CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU, CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU, CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU,
}) })
public @interface CecSettingName {} public @interface CecSettingName {}
@@ -2158,4 +2190,48 @@ public final class HdmiControlManager {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }
} }
/**
* Set the current status of TV send <Standby> on Sleep.
*
* <p>Sets whether the device will also turn off other CEC devices
* when it goes to standby mode.
*
* @hide
*/
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setTvSendStandbyOnSleep(@NonNull @TvSendStandbyOnSleep int value) {
if (mService == null) {
Log.e(TAG, "HdmiControlService is not available");
throw new RuntimeException("HdmiControlService is not available");
}
try {
mService.setCecSettingIntValue(CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP, value);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* Get the current status of TV send &lt;Standby&gt; on Sleep.
*
* <p>Reflects whether the device will also turn off other CEC devices
* when it goes to standby mode.
*
* @hide
*/
@NonNull
@TvSendStandbyOnSleep
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public int getTvSendStandbyOnSleep() {
if (mService == null) {
Log.e(TAG, "HdmiControlService is not available");
throw new RuntimeException("HdmiControlService is not available");
}
try {
return mService.getCecSettingIntValue(CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
} }

View File

@@ -303,6 +303,8 @@ public class HdmiCecConfig {
return STORAGE_SHARED_PREFS; return STORAGE_SHARED_PREFS;
case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY: case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY:
return STORAGE_GLOBAL_SETTINGS; return STORAGE_GLOBAL_SETTINGS;
case HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP:
return STORAGE_GLOBAL_SETTINGS;
case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV: case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV:
return STORAGE_SHARED_PREFS; return STORAGE_SHARED_PREFS;
case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU: case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU:
@@ -338,6 +340,8 @@ public class HdmiCecConfig {
return setting.getName(); return setting.getName();
case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY: case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY:
return Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED; return Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED;
case HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP:
return Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED;
case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV: case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV:
return setting.getName(); return setting.getName();
case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU: case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU:

View File

@@ -956,8 +956,6 @@ abstract class HdmiCecLocalDevice {
} }
} }
void setAutoDeviceOff(boolean enabled) {}
/** /**
* Called when a hot-plug event issued. * Called when a hot-plug event issued.
* *

View File

@@ -24,7 +24,6 @@ import android.hardware.tv.cec.V1_0.SendMessageResult;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.PowerManager.WakeLock; import android.os.PowerManager.WakeLock;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.provider.Settings.Global;
import android.sysprop.HdmiProperties; import android.sysprop.HdmiProperties;
import android.util.Slog; import android.util.Slog;
@@ -56,9 +55,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
// Lazily initialized - should call getWakeLock() to get the instance. // Lazily initialized - should call getWakeLock() to get the instance.
private ActiveWakeLock mWakeLock; private ActiveWakeLock mWakeLock;
// If true, turn off TV upon standby. False by default.
private boolean mAutoTvOff;
// Determines what action should be taken upon receiving Routing Control messages. // Determines what action should be taken upon receiving Routing Control messages.
@VisibleForTesting @VisibleForTesting
protected HdmiProperties.playback_device_action_on_routing_control_values protected HdmiProperties.playback_device_action_on_routing_control_values
@@ -68,12 +64,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
HdmiCecLocalDevicePlayback(HdmiControlService service) { HdmiCecLocalDevicePlayback(HdmiControlService service) {
super(service, HdmiDeviceInfo.DEVICE_PLAYBACK); super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);
mAutoTvOff = mService.readBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, false);
// The option is false by default. Update settings db as well to have the right
// initial setting on UI.
mService.writeBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, mAutoTvOff);
} }
@Override @Override
@@ -154,7 +144,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
// Invalidate the internal active source record when goes to standby // Invalidate the internal active source record when goes to standby
mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS, mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS,
"HdmiCecLocalDevicePlayback#onStandby()"); "HdmiCecLocalDevicePlayback#onStandby()");
if (initiatedByCec || !mAutoTvOff || !wasActiveSource) { boolean mTvSendStandbyOnSleep = mService.getHdmiCecConfig().getIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP)
== HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED;
if (initiatedByCec || !mTvSendStandbyOnSleep || !wasActiveSource) {
return; return;
} }
switch (standbyAction) { switch (standbyAction) {
@@ -200,13 +193,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
} }
} }
@Override
@ServiceThreadOnly
void setAutoDeviceOff(boolean enabled) {
assertRunOnServiceThread();
mAutoTvOff = enabled;
}
@Override @Override
@CallSuper @CallSuper
@ServiceThreadOnly @ServiceThreadOnly
@@ -425,7 +411,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
protected void dump(final IndentingPrintWriter pw) { protected void dump(final IndentingPrintWriter pw) {
super.dump(pw); super.dump(pw);
pw.println("isActiveSource(): " + isActiveSource()); pw.println("isActiveSource(): " + isActiveSource());
pw.println("mAutoTvOff:" + mAutoTvOff);
} }
// Wrapper interface over PowerManager.WakeLock // Wrapper interface over PowerManager.WakeLock

View File

@@ -89,9 +89,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
@GuardedBy("mLock") @GuardedBy("mLock")
private boolean mSystemAudioMute = false; private boolean mSystemAudioMute = false;
// If true, TV going to standby mode puts other devices also to standby.
private boolean mAutoDeviceOff;
private final HdmiCecStandbyModeHandler mStandbyHandler; private final HdmiCecStandbyModeHandler mStandbyHandler;
// If true, do not do routing control/send active source for internal source. // If true, do not do routing control/send active source for internal source.
@@ -156,8 +153,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
HdmiCecLocalDeviceTv(HdmiControlService service) { HdmiCecLocalDeviceTv(HdmiControlService service) {
super(service, HdmiDeviceInfo.DEVICE_TV); super(service, HdmiDeviceInfo.DEVICE_TV);
mPrevPortId = Constants.INVALID_PORT_ID; mPrevPortId = Constants.INVALID_PORT_ID;
mAutoDeviceOff = mService.readBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
true);
mSystemAudioControlFeatureEnabled = mSystemAudioControlFeatureEnabled =
mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true); mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true);
mStandbyHandler = new HdmiCecStandbyModeHandler(service, this); mStandbyHandler = new HdmiCecStandbyModeHandler(service, this);
@@ -1202,13 +1197,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
} }
} }
@Override
@ServiceThreadOnly
void setAutoDeviceOff(boolean enabled) {
assertRunOnServiceThread();
mAutoDeviceOff = enabled;
}
@ServiceThreadOnly @ServiceThreadOnly
boolean getAutoWakeup() { boolean getAutoWakeup() {
assertRunOnServiceThread(); assertRunOnServiceThread();
@@ -1286,7 +1274,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
if (!mService.isControlEnabled()) { if (!mService.isControlEnabled()) {
return; return;
} }
if (!initiatedByCec && mAutoDeviceOff) { boolean sendStandbyOnSleep =
mService.getHdmiCecConfig().getIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP)
== HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED;
if (!initiatedByCec && sendStandbyOnSleep) {
mService.sendCecCommand(HdmiCecMessageBuilder.buildStandby( mService.sendCecCommand(HdmiCecMessageBuilder.buildStandby(
mAddress, Constants.ADDR_BROADCAST)); mAddress, Constants.ADDR_BROADCAST));
} }
@@ -1545,7 +1537,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
pw.println("mArcFeatureEnabled: " + mArcFeatureEnabled); pw.println("mArcFeatureEnabled: " + mArcFeatureEnabled);
pw.println("mSystemAudioMute: " + mSystemAudioMute); pw.println("mSystemAudioMute: " + mSystemAudioMute);
pw.println("mSystemAudioControlFeatureEnabled: " + mSystemAudioControlFeatureEnabled); pw.println("mSystemAudioControlFeatureEnabled: " + mSystemAudioControlFeatureEnabled);
pw.println("mAutoDeviceOff: " + mAutoDeviceOff);
pw.println("mSkipRoutingControl: " + mSkipRoutingControl); pw.println("mSkipRoutingControl: " + mSkipRoutingControl);
pw.println("mPrevPortId: " + mPrevPortId); pw.println("mPrevPortId: " + mPrevPortId);
} }

View File

@@ -661,7 +661,6 @@ public class HdmiControlService extends SystemService {
ContentResolver resolver = getContext().getContentResolver(); ContentResolver resolver = getContext().getContentResolver();
String[] settings = new String[] { String[] settings = new String[] {
Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED, Global.HDMI_CONTROL_VOLUME_CONTROL_ENABLED,
Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
Global.MHL_INPUT_SWITCHING_ENABLED, Global.MHL_INPUT_SWITCHING_ENABLED,
Global.MHL_POWER_CHARGE_ENABLED, Global.MHL_POWER_CHARGE_ENABLED,
@@ -689,15 +688,6 @@ public class HdmiControlService extends SystemService {
setHdmiCecVolumeControlEnabledInternal(getHdmiCecConfig().getIntValue( setHdmiCecVolumeControlEnabledInternal(getHdmiCecConfig().getIntValue(
HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE)); HdmiControlManager.CEC_SETTING_NAME_VOLUME_CONTROL_MODE));
break; break;
case Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED:
for (int type : mLocalDevices) {
HdmiCecLocalDevice localDevice = mHdmiCecNetwork.getLocalDevice(type);
if (localDevice != null) {
localDevice.setAutoDeviceOff(enabled);
}
}
// No need to propagate to HAL.
break;
case Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED: case Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED:
if (isTvDeviceEnabled()) { if (isTvDeviceEnabled()) {
tv().setSystemAudioControlFeatureEnabled(enabled); tv().setSystemAudioControlFeatureEnabled(enabled);

View File

@@ -64,6 +64,15 @@
</allowed-values> </allowed-values>
<default-value int-value="1" /> <default-value int-value="1" />
</setting> </setting>
<setting name="tv_send_standby_on_sleep"
value-type="int"
user-configurable="true">
<allowed-values>
<value int-value="0" />
<value int-value="1" />
</allowed-values>
<default-value int-value="1" />
</setting>
<setting name="rc_profile_tv" <setting name="rc_profile_tv"
value-type="int" value-type="int"
user-configurable="false"> user-configurable="false">

View File

@@ -113,6 +113,15 @@ final class FakeHdmiCecConfig extends HdmiCecConfig {
+ " </allowed-values>" + " </allowed-values>"
+ " <default-value int-value=\"1\" />" + " <default-value int-value=\"1\" />"
+ " </setting>" + " </setting>"
+ " <setting name=\"tv_send_standby_on_sleep\""
+ " value-type=\"int\""
+ " user-configurable=\"true\">"
+ " <allowed-values>"
+ " <value int-value=\"0\" />"
+ " <value int-value=\"1\" />"
+ " </allowed-values>"
+ " <default-value int-value=\"1\" />"
+ " </setting>"
+ " <setting name=\"rc_profile_tv\"" + " <setting name=\"rc_profile_tv\""
+ " value-type=\"int\"" + " value-type=\"int\""
+ " user-configurable=\"false\">" + " user-configurable=\"false\">"

View File

@@ -35,7 +35,6 @@ import android.os.Looper;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.test.TestLooper; import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.Presubmit;
import android.provider.Settings.Global;
import android.sysprop.HdmiProperties; import android.sysprop.HdmiProperties;
import android.view.KeyEvent; import android.view.KeyEvent;
@@ -133,7 +132,6 @@ public class HdmiCecLocalDevicePlaybackTest {
} }
}; };
mHdmiControlService.writeBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, true);
mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService); mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService);
mHdmiCecLocalDevicePlayback.init(); mHdmiCecLocalDevicePlayback.init();
mHdmiControlService.setIoLooper(mMyLooper); mHdmiControlService.setIoLooper(mMyLooper);
@@ -560,7 +558,9 @@ public class HdmiCecLocalDevicePlaybackTest {
HdmiControlManager.POWER_CONTROL_MODE_TV); HdmiControlManager.POWER_CONTROL_MODE_TV);
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
"HdmiCecLocalDevicePlaybackTest"); "HdmiCecLocalDevicePlaybackTest");
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true); mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF); mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll(); mTestLooper.dispatchAll();
@@ -580,7 +580,9 @@ public class HdmiCecLocalDevicePlaybackTest {
HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); HdmiControlManager.POWER_CONTROL_MODE_BROADCAST);
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
"HdmiCecLocalDevicePlaybackTest"); "HdmiCecLocalDevicePlaybackTest");
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true); mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF); mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll(); mTestLooper.dispatchAll();
@@ -600,7 +602,9 @@ public class HdmiCecLocalDevicePlaybackTest {
HdmiControlManager.POWER_CONTROL_MODE_NONE); HdmiControlManager.POWER_CONTROL_MODE_NONE);
mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000, mHdmiCecLocalDevicePlayback.setActiveSource(ADDR_TV, 0x0000,
"HdmiCecLocalDevicePlaybackTest"); "HdmiCecLocalDevicePlaybackTest");
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true); mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF); mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll(); mTestLooper.dispatchAll();
@@ -620,7 +624,9 @@ public class HdmiCecLocalDevicePlaybackTest {
HdmiControlManager.POWER_CONTROL_MODE_TV); HdmiControlManager.POWER_CONTROL_MODE_TV);
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true); mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF); mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll(); mTestLooper.dispatchAll();
@@ -640,7 +646,9 @@ public class HdmiCecLocalDevicePlaybackTest {
HdmiControlManager.POWER_CONTROL_MODE_BROADCAST); HdmiControlManager.POWER_CONTROL_MODE_BROADCAST);
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true); mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF); mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll(); mTestLooper.dispatchAll();
@@ -660,7 +668,9 @@ public class HdmiCecLocalDevicePlaybackTest {
HdmiControlManager.POWER_CONTROL_MODE_NONE); HdmiControlManager.POWER_CONTROL_MODE_NONE);
mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress, mHdmiCecLocalDevicePlayback.setActiveSource(mPlaybackLogicalAddress,
mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest"); mPlaybackPhysicalAddress, "HdmiCecLocalDevicePlaybackTest");
mHdmiCecLocalDevicePlayback.setAutoDeviceOff(true); mHdmiCecLocalDevicePlayback.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF); mHdmiCecLocalDevicePlayback.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll(); mTestLooper.dispatchAll();

View File

@@ -15,6 +15,7 @@
*/ */
package com.android.server.hdmi; package com.android.server.hdmi;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1; import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
import static com.android.server.hdmi.Constants.ADDR_TV; import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
@@ -268,6 +269,30 @@ public class HdmiCecLocalDeviceTvTest {
assertThat(mWokenUp).isFalse(); assertThat(mWokenUp).isFalse();
} }
@Test
public void tvSendStandbyOnSleep_Enabled() {
mHdmiCecLocalDeviceTv.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED);
mTestLooper.dispatchAll();
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll();
HdmiCecMessage standby = HdmiCecMessageBuilder.buildStandby(ADDR_TV, ADDR_BROADCAST);
assertThat(mNativeWrapper.getResultMessages()).contains(standby);
}
@Test
public void tvSendStandbyOnSleep_Disabled() {
mHdmiCecLocalDeviceTv.mService.getHdmiCecConfig().setIntValue(
HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_DISABLED);
mTestLooper.dispatchAll();
mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
mTestLooper.dispatchAll();
HdmiCecMessage standby = HdmiCecMessageBuilder.buildStandby(ADDR_TV, ADDR_BROADCAST);
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(standby);
}
@Test @Test
public void getRcFeatures() { public void getRcFeatures() {
ArrayList<Integer> features = new ArrayList<>(mHdmiCecLocalDeviceTv.getRcFeatures()); ArrayList<Integer> features = new ArrayList<>(mHdmiCecLocalDeviceTv.getRcFeatures());