Loading core/java/android/hardware/hdmi/HdmiControlManager.java +77 −1 Original line number Diff line number Diff line Loading @@ -503,6 +503,29 @@ public final class HdmiControlManager { @Retention(RetentionPolicy.SOURCE) 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. /** * RC profile none. Loading Loading @@ -746,6 +769,14 @@ public final class HdmiControlManager { */ public static final String CEC_SETTING_NAME_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. * Loading Loading @@ -805,12 +836,13 @@ public final class HdmiControlManager { CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, CEC_SETTING_NAME_VOLUME_CONTROL_MODE, 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_SOURCE_HANDLES_ROOT_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_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 {} Loading Loading @@ -2158,4 +2190,48 @@ public final class HdmiControlManager { 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 <Standby> 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(); } } } services/core/java/com/android/server/hdmi/HdmiCecConfig.java +4 −0 Original line number Diff line number Diff line Loading @@ -303,6 +303,8 @@ public class HdmiCecConfig { return STORAGE_SHARED_PREFS; case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY: 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: return STORAGE_SHARED_PREFS; case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU: Loading Loading @@ -338,6 +340,8 @@ public class HdmiCecConfig { return setting.getName(); case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY: 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: return setting.getName(); case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU: Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +0 −2 Original line number Diff line number Diff line Loading @@ -956,8 +956,6 @@ abstract class HdmiCecLocalDevice { } } void setAutoDeviceOff(boolean enabled) {} /** * Called when a hot-plug event issued. * Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +4 −19 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import android.hardware.tv.cec.V1_0.SendMessageResult; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemProperties; import android.provider.Settings.Global; import android.sysprop.HdmiProperties; import android.util.Slog; Loading Loading @@ -56,9 +55,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { // Lazily initialized - should call getWakeLock() to get the instance. 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. @VisibleForTesting protected HdmiProperties.playback_device_action_on_routing_control_values Loading @@ -68,12 +64,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { HdmiCecLocalDevicePlayback(HdmiControlService service) { 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 Loading Loading @@ -154,7 +144,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { // Invalidate the internal active source record when goes to standby mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS, "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; } switch (standbyAction) { Loading Loading @@ -200,13 +193,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { } } @Override @ServiceThreadOnly void setAutoDeviceOff(boolean enabled) { assertRunOnServiceThread(); mAutoTvOff = enabled; } @Override @CallSuper @ServiceThreadOnly Loading Loading @@ -425,7 +411,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { protected void dump(final IndentingPrintWriter pw) { super.dump(pw); pw.println("isActiveSource(): " + isActiveSource()); pw.println("mAutoTvOff:" + mAutoTvOff); } // Wrapper interface over PowerManager.WakeLock Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +5 −14 Original line number Diff line number Diff line Loading @@ -89,9 +89,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @GuardedBy("mLock") private boolean mSystemAudioMute = false; // If true, TV going to standby mode puts other devices also to standby. private boolean mAutoDeviceOff; private final HdmiCecStandbyModeHandler mStandbyHandler; // If true, do not do routing control/send active source for internal source. Loading Loading @@ -156,8 +153,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { HdmiCecLocalDeviceTv(HdmiControlService service) { super(service, HdmiDeviceInfo.DEVICE_TV); mPrevPortId = Constants.INVALID_PORT_ID; mAutoDeviceOff = mService.readBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, true); mSystemAudioControlFeatureEnabled = mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true); mStandbyHandler = new HdmiCecStandbyModeHandler(service, this); Loading Loading @@ -1202,13 +1197,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { } } @Override @ServiceThreadOnly void setAutoDeviceOff(boolean enabled) { assertRunOnServiceThread(); mAutoDeviceOff = enabled; } @ServiceThreadOnly boolean getAutoWakeup() { assertRunOnServiceThread(); Loading Loading @@ -1286,7 +1274,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { if (!mService.isControlEnabled()) { 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( mAddress, Constants.ADDR_BROADCAST)); } Loading Loading @@ -1545,7 +1537,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { pw.println("mArcFeatureEnabled: " + mArcFeatureEnabled); pw.println("mSystemAudioMute: " + mSystemAudioMute); pw.println("mSystemAudioControlFeatureEnabled: " + mSystemAudioControlFeatureEnabled); pw.println("mAutoDeviceOff: " + mAutoDeviceOff); pw.println("mSkipRoutingControl: " + mSkipRoutingControl); pw.println("mPrevPortId: " + mPrevPortId); } Loading Loading
core/java/android/hardware/hdmi/HdmiControlManager.java +77 −1 Original line number Diff line number Diff line Loading @@ -503,6 +503,29 @@ public final class HdmiControlManager { @Retention(RetentionPolicy.SOURCE) 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. /** * RC profile none. Loading Loading @@ -746,6 +769,14 @@ public final class HdmiControlManager { */ public static final String CEC_SETTING_NAME_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. * Loading Loading @@ -805,12 +836,13 @@ public final class HdmiControlManager { CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING, CEC_SETTING_NAME_VOLUME_CONTROL_MODE, 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_SOURCE_HANDLES_ROOT_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_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 {} Loading Loading @@ -2158,4 +2190,48 @@ public final class HdmiControlManager { 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 <Standby> 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(); } } }
services/core/java/com/android/server/hdmi/HdmiCecConfig.java +4 −0 Original line number Diff line number Diff line Loading @@ -303,6 +303,8 @@ public class HdmiCecConfig { return STORAGE_SHARED_PREFS; case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY: 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: return STORAGE_SHARED_PREFS; case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU: Loading Loading @@ -338,6 +340,8 @@ public class HdmiCecConfig { return setting.getName(); case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY: 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: return setting.getName(); case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU: Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +0 −2 Original line number Diff line number Diff line Loading @@ -956,8 +956,6 @@ abstract class HdmiCecLocalDevice { } } void setAutoDeviceOff(boolean enabled) {} /** * Called when a hot-plug event issued. * Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java +4 −19 Original line number Diff line number Diff line Loading @@ -24,7 +24,6 @@ import android.hardware.tv.cec.V1_0.SendMessageResult; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemProperties; import android.provider.Settings.Global; import android.sysprop.HdmiProperties; import android.util.Slog; Loading Loading @@ -56,9 +55,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { // Lazily initialized - should call getWakeLock() to get the instance. 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. @VisibleForTesting protected HdmiProperties.playback_device_action_on_routing_control_values Loading @@ -68,12 +64,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { HdmiCecLocalDevicePlayback(HdmiControlService service) { 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 Loading Loading @@ -154,7 +144,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { // Invalidate the internal active source record when goes to standby mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS, "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; } switch (standbyAction) { Loading Loading @@ -200,13 +193,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { } } @Override @ServiceThreadOnly void setAutoDeviceOff(boolean enabled) { assertRunOnServiceThread(); mAutoTvOff = enabled; } @Override @CallSuper @ServiceThreadOnly Loading Loading @@ -425,7 +411,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource { protected void dump(final IndentingPrintWriter pw) { super.dump(pw); pw.println("isActiveSource(): " + isActiveSource()); pw.println("mAutoTvOff:" + mAutoTvOff); } // Wrapper interface over PowerManager.WakeLock Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +5 −14 Original line number Diff line number Diff line Loading @@ -89,9 +89,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @GuardedBy("mLock") private boolean mSystemAudioMute = false; // If true, TV going to standby mode puts other devices also to standby. private boolean mAutoDeviceOff; private final HdmiCecStandbyModeHandler mStandbyHandler; // If true, do not do routing control/send active source for internal source. Loading Loading @@ -156,8 +153,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { HdmiCecLocalDeviceTv(HdmiControlService service) { super(service, HdmiDeviceInfo.DEVICE_TV); mPrevPortId = Constants.INVALID_PORT_ID; mAutoDeviceOff = mService.readBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, true); mSystemAudioControlFeatureEnabled = mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true); mStandbyHandler = new HdmiCecStandbyModeHandler(service, this); Loading Loading @@ -1202,13 +1197,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { } } @Override @ServiceThreadOnly void setAutoDeviceOff(boolean enabled) { assertRunOnServiceThread(); mAutoDeviceOff = enabled; } @ServiceThreadOnly boolean getAutoWakeup() { assertRunOnServiceThread(); Loading Loading @@ -1286,7 +1274,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { if (!mService.isControlEnabled()) { 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( mAddress, Constants.ADDR_BROADCAST)); } Loading Loading @@ -1545,7 +1537,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { pw.println("mArcFeatureEnabled: " + mArcFeatureEnabled); pw.println("mSystemAudioMute: " + mSystemAudioMute); pw.println("mSystemAudioControlFeatureEnabled: " + mSystemAudioControlFeatureEnabled); pw.println("mAutoDeviceOff: " + mAutoDeviceOff); pw.println("mSkipRoutingControl: " + mSkipRoutingControl); pw.println("mPrevPortId: " + mPrevPortId); } Loading