Merge "Make list of SADs to query configurable"
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index d11c874..786b787 100755
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -3355,6 +3355,7 @@
method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public String getPowerControlMode();
method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public String getPowerStateChangeOnActiveSourceLost();
method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getRoutingControl();
+ method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getSadPresenceInQuery(@NonNull String);
method @Nullable public android.hardware.hdmi.HdmiSwitchClient getSwitchClient();
method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getSystemAudioControl();
method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getSystemAudioModeMuting();
@@ -3373,6 +3374,8 @@
method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setPowerControlMode(@NonNull String);
method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setPowerStateChangeOnActiveSourceLost(@NonNull String);
method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setRoutingControl(@NonNull int);
+ method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setSadPresenceInQuery(@NonNull String, int);
+ method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setSadsPresenceInQuery(@NonNull java.util.List<java.lang.String>, int);
method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setStandbyMode(boolean);
method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setSystemAudioControl(@NonNull int);
method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setSystemAudioModeMuting(@NonNull int);
@@ -3384,6 +3387,21 @@
field public static final String CEC_SETTING_NAME_HDMI_CEC_VERSION = "hdmi_cec_version";
field public static final String CEC_SETTING_NAME_POWER_CONTROL_MODE = "power_control_mode";
field public static final String CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST = "power_state_change_on_active_source_lost";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_AAC = "query_sad_aac";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_ATRAC = "query_sad_atrac";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_DD = "query_sad_dd";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_DDP = "query_sad_ddp";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_DST = "query_sad_dst";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_DTS = "query_sad_dts";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_DTSHD = "query_sad_dtshd";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_LPCM = "query_sad_lpcm";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_MAX = "query_sad_max";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_MP3 = "query_sad_mp3";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_MPEG1 = "query_sad_mpeg1";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_MPEG2 = "query_sad_mpeg2";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO = "query_sad_onebitaudio";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_TRUEHD = "query_sad_truehd";
+ field public static final String CEC_SETTING_NAME_QUERY_SAD_WMAPRO = "query_sad_wmapro";
field public static final String CEC_SETTING_NAME_ROUTING_CONTROL = "routing_control";
field public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL = "system_audio_control";
field public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING = "system_audio_mode_muting";
@@ -3451,6 +3469,8 @@
field public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; // 0x2
field public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; // 0x3
field public static final int POWER_STATUS_UNKNOWN = -1; // 0xffffffff
+ field public static final int QUERY_SAD_DISABLED = 0; // 0x0
+ field public static final int QUERY_SAD_ENABLED = 1; // 0x1
field @Deprecated public static final int RESULT_ALREADY_IN_PROGRESS = 4; // 0x4
field public static final int RESULT_COMMUNICATION_FAILED = 7; // 0x7
field public static final int RESULT_EXCEPTION = 5; // 0x5
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index 0a5496e..5874385 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -115,8 +115,6 @@
public static final int POWER_STATUS_TRANSIENT_TO_ON = 2;
public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3;
- /** @hide */
- @SystemApi
@IntDef ({
RESULT_SUCCESS,
RESULT_TIMEOUT,
@@ -297,19 +295,19 @@
/**
* HDMI CEC enabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_ENABLED
*/
- @SystemApi
public static final int HDMI_CEC_CONTROL_ENABLED = 1;
/**
* HDMI CEC disabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_ENABLED
*/
- @SystemApi
public static final int HDMI_CEC_CONTROL_DISABLED = 0;
/**
* @hide
+ *
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_ENABLED
*/
@IntDef(prefix = { "HDMI_CEC_CONTROL_" }, value = {
HDMI_CEC_CONTROL_ENABLED,
@@ -322,18 +320,17 @@
/**
* Version constant for HDMI-CEC v1.4b.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_VERSION
*/
- @SystemApi
public static final int HDMI_CEC_VERSION_1_4_B = 0x05;
/**
* Version constant for HDMI-CEC v2.0.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_VERSION
*/
- @SystemApi
public static final int HDMI_CEC_VERSION_2_0 = 0x06;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_VERSION
* @hide
*/
@IntDef(prefix = { "HDMI_CEC_VERSION_" }, value = {
@@ -347,18 +344,17 @@
/**
* Routing Control feature enabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_ROUTING_CONTROL
*/
- @SystemApi
public static final int ROUTING_CONTROL_ENABLED = 1;
/**
* Routing Control feature disabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_ROUTING_CONTROL
*/
- @SystemApi
public static final int ROUTING_CONTROL_DISABLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_ROUTING_CONTROL
* @hide
*/
@IntDef(prefix = { "ROUTING_CONTROL_" }, value = {
@@ -375,9 +371,8 @@
* Upon waking up, attempt to turn on the TV via {@code <One Touch Play>} but do not turn on the
* Audio system via {@code <System Audio Mode Request>}.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
*/
- @SystemApi
public static final String POWER_CONTROL_MODE_TV = "to_tv";
/**
* Send CEC power control messages to TV and Audio System:
@@ -385,9 +380,8 @@
* Upon waking up, attempt to turn on the TV via {@code <One Touch Play>} and attempt to turn on
* the Audio system via {@code <System Audio Mode Request>}.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
*/
- @SystemApi
public static final String POWER_CONTROL_MODE_TV_AND_AUDIO_SYSTEM = "to_tv_and_audio_system";
/**
* Broadcast CEC power control messages to all devices in the network:
@@ -395,9 +389,8 @@
* Upon waking up, attempt to turn on the TV via {@code <One Touch Play>} and attempt to turn on
* the Audio system via {@code <System Audio Mode Request>}.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
*/
- @SystemApi
public static final String POWER_CONTROL_MODE_BROADCAST = "broadcast";
/**
* Don't send any CEC power control messages:
@@ -405,11 +398,11 @@
* Upon waking up, do not turn on the TV via {@code <One Touch Play>} and do not turn on the
* Audio system via {@code <System Audio Mode Request>}.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
*/
- @SystemApi
public static final String POWER_CONTROL_MODE_NONE = "none";
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
* @hide
*/
@StringDef(prefix = { "POWER_CONTROL_MODE_" }, value = {
@@ -425,18 +418,17 @@
/**
* No action to be taken.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST
*/
- @SystemApi
public static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE = "none";
/**
* Go to standby immediately.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST
*/
- @SystemApi
public static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW = "standby_now";
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST
* @hide
*/
@StringDef(prefix = { "POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_" }, value = {
@@ -450,18 +442,17 @@
/**
* System Audio Control enabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL
*/
- @SystemApi
public static final int SYSTEM_AUDIO_CONTROL_ENABLED = 1;
/**
* System Audio Control disabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL
*/
- @SystemApi
public static final int SYSTEM_AUDIO_CONTROL_DISABLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL
* @hide
*/
@IntDef(prefix = { "SYSTEM_AUDIO_CONTROL_" }, value = {
@@ -475,18 +466,17 @@
/**
* System Audio Mode muting enabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING
*/
- @SystemApi
public static final int SYSTEM_AUDIO_MODE_MUTING_ENABLED = 1;
/**
* System Audio Mode muting disabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING
*/
- @SystemApi
public static final int SYSTEM_AUDIO_MODE_MUTING_DISABLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING
* @hide
*/
@IntDef(prefix = { "SYSTEM_AUDIO_MODE_MUTING_" }, value = {
@@ -501,17 +491,13 @@
* HDMI CEC enabled.
*
* @see HdmiControlManager#CEC_SETTING_NAME_VOLUME_CONTROL_MODE
- * @hide
*/
- @SystemApi
public static final int VOLUME_CONTROL_ENABLED = 1;
/**
* HDMI CEC disabled.
*
* @see HdmiControlManager#CEC_SETTING_NAME_VOLUME_CONTROL_MODE
- * @hide
*/
- @SystemApi
public static final int VOLUME_CONTROL_DISABLED = 0;
/**
* @see HdmiControlManager#CEC_SETTING_NAME_VOLUME_CONTROL_MODE
@@ -528,18 +514,17 @@
/**
* TV Wake on One Touch Play enabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY
*/
- @SystemApi
public static final int TV_WAKE_ON_ONE_TOUCH_PLAY_ENABLED = 1;
/**
* TV Wake on One Touch Play disabled.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY
*/
- @SystemApi
public static final int TV_WAKE_ON_ONE_TOUCH_PLAY_DISABLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY
* @hide
*/
@IntDef(prefix = { "TV_WAKE_ON_ONE_TOUCH_PLAY_" }, value = {
@@ -553,18 +538,17 @@
/**
* Sending <Standby> on sleep.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP
*/
- @SystemApi
public static final int TV_SEND_STANDBY_ON_SLEEP_ENABLED = 1;
/**
* Not sending <Standby> on sleep.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP
*/
- @SystemApi
public static final int TV_SEND_STANDBY_ON_SLEEP_DISABLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP
* @hide
*/
@IntDef(prefix = { "TV_SEND_STANDBY_ON_SLEEP_" }, value = {
@@ -578,34 +562,40 @@
/**
* RC profile none.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_TV
* @hide
*/
public static final int RC_PROFILE_TV_NONE = 0x0;
/**
* RC profile 1.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_TV
* @hide
*/
public static final int RC_PROFILE_TV_ONE = 0x2;
/**
* RC profile 2.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_TV
* @hide
*/
public static final int RC_PROFILE_TV_TWO = 0x6;
/**
* RC profile 3.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_TV
* @hide
*/
public static final int RC_PROFILE_TV_THREE = 0xA;
/**
* RC profile 4.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_TV
* @hide
*/
public static final int RC_PROFILE_TV_FOUR = 0xE;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_TV
* @hide
*/
@IntDef(prefix = { "RC_PROFILE_TV_" }, value = {
@@ -618,175 +608,157 @@
@Retention(RetentionPolicy.SOURCE)
public @interface RcProfileTv {}
- // -- RC profile parameter defining if a source handles the root menu.
+ // -- RC profile parameter defining if a source handles a specific menu.
/**
- * Handles the root menu.
+ * Handles the menu.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU
+ * @see HdmiControlManager#
+ * CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU
* @hide
*/
- public static final int RC_PROFILE_SOURCE_ROOT_MENU_HANDLED = 1;
+ public static final int RC_PROFILE_SOURCE_MENU_HANDLED = 1;
/**
- * Doesn't handle the root menu.
+ * Doesn't handle the menu.
*
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU
+ * @see HdmiControlManager#
+ * CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU
* @hide
*/
- public static final int RC_PROFILE_SOURCE_ROOT_MENU_NOT_HANDLED = 0;
+ public static final int RC_PROFILE_SOURCE_MENU_NOT_HANDLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU
+ * @see HdmiControlManager#CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU
+ * @see HdmiControlManager#
+ * CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU
* @hide
*/
- @IntDef(prefix = { "RC_PROFILE_SOURCE_ROOT_MENU_" }, value = {
- RC_PROFILE_SOURCE_ROOT_MENU_HANDLED,
- RC_PROFILE_SOURCE_ROOT_MENU_NOT_HANDLED
+ @IntDef(prefix = { "RC_PROFILE_SOURCE_MENU_" }, value = {
+ RC_PROFILE_SOURCE_MENU_HANDLED,
+ RC_PROFILE_SOURCE_MENU_NOT_HANDLED
})
@Retention(RetentionPolicy.SOURCE)
- public @interface RcProfileSourceHandlesRootMenu {}
+ public @interface RcProfileSourceHandlesMenu {}
- // -- RC profile parameter defining if a source handles the setup menu.
+ // -- Whether the Short Audio Descriptor (SAD) for a specific codec should be queried or not.
/**
- * Handles the setup menu.
+ * Query the SAD.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_LPCM
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MPEG1
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MP3
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MPEG2
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_AAC
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DTS
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_ATRAC
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DDP
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DTSHD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_TRUEHD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DST
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_WMAPRO
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MAX
*/
- public static final int RC_PROFILE_SOURCE_SETUP_MENU_HANDLED = 1;
+ public static final int QUERY_SAD_ENABLED = 1;
/**
- * Doesn't handle the setup menu.
+ * Don't query the SAD.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_LPCM
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MPEG1
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MP3
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MPEG2
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_AAC
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DTS
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_ATRAC
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DDP
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DTSHD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_TRUEHD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DST
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_WMAPRO
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MAX
*/
- public static final int RC_PROFILE_SOURCE_SETUP_MENU_NOT_HANDLED = 0;
+ public static final int QUERY_SAD_DISABLED = 0;
/**
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_LPCM
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MPEG1
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MP3
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MPEG2
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_AAC
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DTS
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_ATRAC
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DDP
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DTSHD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_TRUEHD
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_DST
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_WMAPRO
+ * @see HdmiControlManager#CEC_SETTING_NAME_QUERY_SAD_MAX
* @hide
*/
- @IntDef(prefix = { "RC_PROFILE_SOURCE_SETUP_MENU_" }, value = {
- RC_PROFILE_SOURCE_SETUP_MENU_HANDLED,
- RC_PROFILE_SOURCE_SETUP_MENU_NOT_HANDLED
+ @IntDef(prefix = { "QUERY_SAD_" }, value = {
+ QUERY_SAD_ENABLED,
+ QUERY_SAD_DISABLED
})
@Retention(RetentionPolicy.SOURCE)
- public @interface RcProfileSourceHandlesSetupMenu {}
-
-
- // -- RC profile parameter defining if a source handles the contents menu.
- /**
- * Handles the contents menu.
- *
- * @hide
- */
- public static final int RC_PROFILE_SOURCE_CONTENTS_MENU_HANDLED = 1;
- /**
- * Doesn't handle the contents menu.
- *
- * @hide
- */
- public static final int RC_PROFILE_SOURCE_CONTENTS_MENU_NOT_HANDLED = 0;
- /**
- * @hide
- */
- @IntDef(prefix = { "RC_PROFILE_SOURCE_CONTENTS_MENU_" }, value = {
- RC_PROFILE_SOURCE_CONTENTS_MENU_HANDLED,
- RC_PROFILE_SOURCE_CONTENTS_MENU_NOT_HANDLED
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RcProfileSourceHandlesContentsMenu {}
-
-
- // -- RC profile parameter defining if a source handles the top menu.
- /**
- * Handles the top menu.
- *
- * @hide
- */
- public static final int RC_PROFILE_SOURCE_TOP_MENU_HANDLED = 1;
- /**
- * Doesn't handle the top menu.
- *
- * @hide
- */
- public static final int RC_PROFILE_SOURCE_TOP_MENU_NOT_HANDLED = 0;
- /**
- * @hide
- */
- @IntDef(prefix = { "RC_PROFILE_SOURCE_TOP_MENU_" }, value = {
- RC_PROFILE_SOURCE_TOP_MENU_HANDLED,
- RC_PROFILE_SOURCE_TOP_MENU_NOT_HANDLED
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RcProfileSourceHandlesTopMenu {}
-
-
- // -- RC profile parameter defining if a source handles the media context sensitive menu.
- /**
- * Handles the media context sensitive menu.
- *
- * @hide
- */
- public static final int RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_HANDLED = 1;
- /**
- * Doesn't handle the media context sensitive menu.
- *
- * @hide
- */
- public static final int RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_NOT_HANDLED = 0;
- /**
- * @hide
- */
- @IntDef(prefix = { "RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_" }, value = {
- RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_HANDLED,
- RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_NOT_HANDLED
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RcProfileSourceHandlesMediaContextSensitiveMenu {}
+ public @interface SadPresenceInQuery {}
// -- Settings available in the CEC Configuration.
/**
* Name of a setting deciding whether the CEC is enabled.
*
- * @hide
+ * @see HdmiControlManager#setHdmiCecEnabled(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_HDMI_CEC_ENABLED = "hdmi_cec_enabled";
/**
* Name of a setting controlling the version of HDMI-CEC used.
*
- * @hide
+ * @see HdmiControlManager#setHdmiCecVersion(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_HDMI_CEC_VERSION = "hdmi_cec_version";
/**
* Name of a setting deciding whether the Routing Control feature is enabled.
*
- * @hide
+ * @see HdmiControlManager#setRoutingControl(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_ROUTING_CONTROL = "routing_control";
/**
* Name of a setting deciding on the power control mode.
*
- * @hide
+ * @see HdmiControlManager#setPowerControlMode(String)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_POWER_CONTROL_MODE = "power_control_mode";
/**
* Name of a setting deciding on power state action when losing Active Source.
*
- * @hide
+ * @see HdmiControlManager#setPowerStateChangeOnActiveSourceLost(String)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST =
"power_state_change_on_active_source_lost";
/**
* Name of a setting deciding whether System Audio Control is enabled.
*
- * @hide
+ * @see HdmiControlManager#setSystemAudioControl(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL =
"system_audio_control";
/**
* Name of a setting deciding whether System Audio Muting is allowed.
*
- * @hide
+ * @see HdmiControlManager#setSystemAudioModeMuting(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING =
"system_audio_mode_muting";
/**
@@ -819,28 +791,24 @@
*
* <p> Due to the resulting behavior, usage on TV and Audio devices is discouraged.
*
- * @hide
- * @see android.hardware.hdmi.HdmiControlManager#setHdmiCecVolumeControlEnabled(int)
+ * @see HdmiControlManager#setHdmiCecVolumeControlEnabled(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_VOLUME_CONTROL_MODE =
"volume_control_enabled";
/**
* Name of a setting deciding whether the TV will automatically turn on upon reception
* of the CEC command <Text View On> or <Image View On>.
*
- * @hide
+ * @see HdmiControlManager#setTvWakeOnOneTouchPlay(int)
*/
- @SystemApi
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 TV will also turn off other CEC devices
* when it goes to standby mode.
*
- * @hide
+ * @see HdmiControlManager#setTvSendStandbyOnSleep(int)
*/
- @SystemApi
public static final String CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP =
"tv_send_standby_on_sleep";
/**
@@ -892,6 +860,111 @@
CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU =
"rc_profile_source_handles_media_context_sensitive_menu";
/**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the LPCM codec
+ * (0x1) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_LPCM = "query_sad_lpcm";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the DD codec
+ * (0x2) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_DD = "query_sad_dd";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the MPEG1 codec
+ * (0x3) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_MPEG1 = "query_sad_mpeg1";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the MP3 codec
+ * (0x4) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_MP3 = "query_sad_mp3";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the MPEG2 codec
+ * (0x5) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_MPEG2 = "query_sad_mpeg2";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the AAC codec
+ * (0x6) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_AAC = "query_sad_aac";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the DTS codec
+ * (0x7) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_DTS = "query_sad_dts";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the ATRAC codec
+ * (0x8) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_ATRAC = "query_sad_atrac";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the ONEBITAUDIO
+ * codec (0x9) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO = "query_sad_onebitaudio";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the DDP codec
+ * (0xA) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_DDP = "query_sad_ddp";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the DTSHD codec
+ * (0xB) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_DTSHD = "query_sad_dtshd";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the TRUEHD codec
+ * (0xC) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_TRUEHD = "query_sad_truehd";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the DST codec
+ * (0xD) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_DST = "query_sad_dst";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the WMAPRO codec
+ * (0xE) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_WMAPRO = "query_sad_wmapro";
+ /**
+ * Name of a setting representing whether the Short Audio Descriptor (SAD) for the MAX codec
+ * (0xF) should be queried or not.
+ *
+ * @see HdmiControlManager#setSadPresenceInQuery(String, int)
+ */
+ public static final String CEC_SETTING_NAME_QUERY_SAD_MAX = "query_sad_max";
+ /**
* @hide
*/
@StringDef(prefix = { "CEC_SETTING_NAME_" }, value = {
@@ -910,9 +983,46 @@
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_QUERY_SAD_LPCM,
+ CEC_SETTING_NAME_QUERY_SAD_DD,
+ CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ CEC_SETTING_NAME_QUERY_SAD_MP3,
+ CEC_SETTING_NAME_QUERY_SAD_MPEG2,
+ CEC_SETTING_NAME_QUERY_SAD_AAC,
+ CEC_SETTING_NAME_QUERY_SAD_DTS,
+ CEC_SETTING_NAME_QUERY_SAD_ATRAC,
+ CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ CEC_SETTING_NAME_QUERY_SAD_DDP,
+ CEC_SETTING_NAME_QUERY_SAD_DTSHD,
+ CEC_SETTING_NAME_QUERY_SAD_TRUEHD,
+ CEC_SETTING_NAME_QUERY_SAD_DST,
+ CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ CEC_SETTING_NAME_QUERY_SAD_MAX,
})
public @interface CecSettingName {}
+ /**
+ * @hide
+ */
+ @StringDef(prefix = { "CEC_SETTING_NAME_QUERY_SAD_" }, value = {
+ CEC_SETTING_NAME_QUERY_SAD_LPCM,
+ CEC_SETTING_NAME_QUERY_SAD_DD,
+ CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ CEC_SETTING_NAME_QUERY_SAD_MP3,
+ CEC_SETTING_NAME_QUERY_SAD_MPEG2,
+ CEC_SETTING_NAME_QUERY_SAD_AAC,
+ CEC_SETTING_NAME_QUERY_SAD_DTS,
+ CEC_SETTING_NAME_QUERY_SAD_ATRAC,
+ CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ CEC_SETTING_NAME_QUERY_SAD_DDP,
+ CEC_SETTING_NAME_QUERY_SAD_DTSHD,
+ CEC_SETTING_NAME_QUERY_SAD_TRUEHD,
+ CEC_SETTING_NAME_QUERY_SAD_DST,
+ CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ CEC_SETTING_NAME_QUERY_SAD_MAX,
+ })
+ public @interface CecSettingSad {}
+
// True if we have a logical device of type playback hosted in the system.
private final boolean mHasPlaybackDevice;
// True if we have a logical device of type TV hosted in the system.
@@ -966,11 +1076,8 @@
* See {@link HdmiDeviceInfo#DEVICE_PLAYBACK}
* See {@link HdmiDeviceInfo#DEVICE_TV}
* See {@link HdmiDeviceInfo#DEVICE_AUDIO_SYSTEM}
- *
- * @hide
*/
@Nullable
- @SystemApi
@SuppressLint("RequiresPermission")
public HdmiClient getClient(int type) {
if (mService == null) {
@@ -999,11 +1106,8 @@
* system if the system is configured to host more than one type of HDMI-CEC logical devices.
*
* @return {@link HdmiPlaybackClient} instance. {@code null} on failure.
- *
- * @hide
*/
@Nullable
- @SystemApi
@SuppressLint("RequiresPermission")
public HdmiPlaybackClient getPlaybackClient() {
return (HdmiPlaybackClient) getClient(HdmiDeviceInfo.DEVICE_PLAYBACK);
@@ -1017,11 +1121,8 @@
* system if the system is configured to host more than one type of HDMI-CEC logical devices.
*
* @return {@link HdmiTvClient} instance. {@code null} on failure.
- *
- * @hide
*/
@Nullable
- @SystemApi
@SuppressLint("RequiresPermission")
public HdmiTvClient getTvClient() {
return (HdmiTvClient) getClient(HdmiDeviceInfo.DEVICE_TV);
@@ -1067,11 +1168,8 @@
*
* @return a list of {@link HdmiDeviceInfo} of the connected CEC devices on the CEC bus. An
* empty list will be returned if there is none.
- *
- * @hide
*/
@NonNull
- @SystemApi
public List<HdmiDeviceInfo> getConnectedDevices() {
try {
return mService.getDeviceList();
@@ -1082,11 +1180,9 @@
/**
* @removed
- * @hide
* @deprecated Please use {@link #getConnectedDevices()} instead.
*/
@Deprecated
- @SystemApi
public List<HdmiDeviceInfo> getConnectedDevicesList() {
try {
return mService.getDeviceList();
@@ -1102,10 +1198,7 @@
* <p>The target device info can be obtained by calling {@link #getConnectedDevicesList()}.
*
* @param deviceInfo {@link HdmiDeviceInfo} of the device to be powered off.
- *
- * @hide
*/
- @SystemApi
public void powerOffDevice(@NonNull HdmiDeviceInfo deviceInfo) {
Objects.requireNonNull(deviceInfo);
try {
@@ -1118,11 +1211,9 @@
/**
* @removed
- * @hide
* @deprecated Please use {@link #powerOffDevice(deviceInfo)} instead.
*/
@Deprecated
- @SystemApi
public void powerOffRemoteDevice(@NonNull HdmiDeviceInfo deviceInfo) {
Objects.requireNonNull(deviceInfo);
try {
@@ -1155,11 +1246,9 @@
/**
* @removed
- * @hide
* @deprecated Please use {@link #powerOnDevice(deviceInfo)} instead.
*/
@Deprecated
- @SystemApi
public void powerOnRemoteDevice(HdmiDeviceInfo deviceInfo) {
Objects.requireNonNull(deviceInfo);
try {
@@ -1180,10 +1269,7 @@
* streaming on their TVs.
*
* @param deviceInfo HdmiDeviceInfo of the target device
- *
- * @hide
*/
- @SystemApi
public void setActiveSource(@NonNull HdmiDeviceInfo deviceInfo) {
Objects.requireNonNull(deviceInfo);
try {
@@ -1195,11 +1281,9 @@
/**
* @removed
- * @hide
* @deprecated Please use {@link #setActiveSource(deviceInfo)} instead.
*/
@Deprecated
- @SystemApi
public void requestRemoteDeviceToBecomeActiveSource(@NonNull HdmiDeviceInfo deviceInfo) {
Objects.requireNonNull(deviceInfo);
try {
@@ -1292,9 +1376,7 @@
*
* @param hdmiCecVolumeControlEnabled target state of HDMI CEC volume control.
* @see HdmiControlManager#CEC_SETTING_NAME_VOLUME_CONTROL_MODE
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setHdmiCecVolumeControlEnabled(
@VolumeControl int hdmiCecVolumeControlEnabled) {
@@ -1308,9 +1390,9 @@
/**
* Returns whether volume changes via HDMI CEC are enabled.
- * @hide
+ *
+ * @see HdmiControlManager#CEC_SETTING_NAME_VOLUME_CONTROL_MODE
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@VolumeControl
public int getHdmiCecVolumeControlEnabled() {
@@ -1340,10 +1422,7 @@
* <p>Physical address needs to be automatically adjusted when devices are phyiscally or
* electrically added or removed from the device tree. Please see HDMI Specification Version
* 1.4b 8.7 Physical Address for more details on the address discovery proccess.
- *
- * @hide
*/
- @SystemApi
public int getPhysicalAddress() {
try {
return mService.getPhysicalAddress();
@@ -1360,10 +1439,7 @@
* @param targetDevice {@link HdmiDeviceInfo} of the target device.
* @return true if {@code targetDevice} is directly or indirectly
* connected to the current device.
- *
- * @hide
*/
- @SystemApi
public boolean isDeviceConnected(@NonNull HdmiDeviceInfo targetDevice) {
Objects.requireNonNull(targetDevice);
int physicalAddress = getPhysicalAddress();
@@ -1380,11 +1456,9 @@
/**
* @removed
- * @hide
* @deprecated Please use {@link #isDeviceConnected(targetDevice)} instead.
*/
@Deprecated
- @SystemApi
public boolean isRemoteDeviceConnected(@NonNull HdmiDeviceInfo targetDevice) {
Objects.requireNonNull(targetDevice);
int physicalAddress = getPhysicalAddress();
@@ -1401,10 +1475,7 @@
/**
* Listener used to get hotplug event from HDMI port.
- *
- * @hide
*/
- @SystemApi
public interface HotplugEventListener {
void onReceived(HdmiHotplugEvent event);
}
@@ -1456,10 +1527,7 @@
/**
* Listener used to get vendor-specific commands.
- *
- * @hide
*/
- @SystemApi
public interface VendorCommandListener {
/**
* Called when a vendor command is received.
@@ -1503,10 +1571,7 @@
*
* @param listener {@link HotplugEventListener} instance
* @see HdmiControlManager#removeHotplugEventListener(HotplugEventListener)
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void addHotplugEventListener(HotplugEventListener listener) {
addHotplugEventListener(ConcurrentUtils.DIRECT_EXECUTOR, listener);
@@ -1520,10 +1585,7 @@
*
* @param listener {@link HotplugEventListener} instance
* @see HdmiControlManager#removeHotplugEventListener(HotplugEventListener)
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void addHotplugEventListener(@NonNull @CallbackExecutor Executor executor,
@NonNull HotplugEventListener listener) {
@@ -1549,10 +1611,7 @@
* Removes a listener to stop getting informed of {@link HdmiHotplugEvent}.
*
* @param listener {@link HotplugEventListener} instance to be removed
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void removeHotplugEventListener(HotplugEventListener listener) {
if (mService == null) {
@@ -1761,10 +1820,7 @@
/**
* Listener used to get setting change notification.
- *
- * @hide
*/
- @SystemApi
public interface CecSettingChangeListener {
/**
* Called when value of a setting changes.
@@ -1845,10 +1901,7 @@
*
* @return a set of user-modifiable settings.
* @throws RuntimeException when the HdmiControlService is not available.
- *
- * @hide
*/
- @SystemApi
@NonNull
@CecSettingName
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -1872,10 +1925,7 @@
* @throws IllegalArgumentException when setting {@code name} does not exist.
* @throws IllegalArgumentException when setting {@code name} value type is invalid.
* @throws RuntimeException when the HdmiControlService is not available.
- *
- * @hide
*/
- @SystemApi
@NonNull
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public List<String> getAllowedCecSettingStringValues(@NonNull @CecSettingName String name) {
@@ -1898,10 +1948,7 @@
* @throws IllegalArgumentException when setting {@code name} does not exist.
* @throws IllegalArgumentException when setting {@code name} value type is invalid.
* @throws RuntimeException when the HdmiControlService is not available.
- *
- * @hide
*/
- @SystemApi
@NonNull
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public List<Integer> getAllowedCecSettingIntValues(@NonNull @CecSettingName String name) {
@@ -1921,10 +1968,7 @@
* Set the global status of HDMI CEC.
*
* <p>This allows to enable/disable HDMI CEC on the device.
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setHdmiCecEnabled(@NonNull @HdmiCecControl int value) {
if (mService == null) {
@@ -1942,10 +1986,7 @@
* Get the current global status of HDMI CEC.
*
* <p>Reflects whether HDMI CEC is currently enabled on the device.
- *
- * @hide
*/
- @SystemApi
@NonNull
@HdmiCecControl
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -1971,10 +2012,7 @@
* Binder thread. This means that all callback implementations must be
* thread safe. To specify the execution thread, use
* {@link addHdmiCecEnabledChangeListener(Executor, CecSettingChangeListener)}.
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void addHdmiCecEnabledChangeListener(@NonNull CecSettingChangeListener listener) {
addHdmiCecEnabledChangeListener(ConcurrentUtils.DIRECT_EXECUTOR, listener);
@@ -1985,10 +2023,7 @@
*
* <p>To stop getting the notification,
* use {@link #removeHdmiCecEnabledChangeListener(CecSettingChangeListener)}.
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void addHdmiCecEnabledChangeListener(
@NonNull @CallbackExecutor Executor executor,
@@ -1998,10 +2033,7 @@
/**
* Remove change listener for global status of HDMI CEC.
- *
- * @hide
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void removeHdmiCecEnabledChangeListener(
@NonNull CecSettingChangeListener listener) {
@@ -2013,9 +2045,8 @@
*
* <p>Allows to select either CEC 1.4b or 2.0 to be used by the device.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_VERSION
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setHdmiCecVersion(@NonNull @HdmiCecVersion int value) {
if (mService == null) {
@@ -2034,9 +2065,8 @@
*
* <p>Reflects which CEC version 1.4b or 2.0 is currently used by the device.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_HDMI_CEC_VERSION
*/
- @SystemApi
@NonNull
@HdmiCecVersion
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2060,9 +2090,8 @@
* receiving Routing Control related messages. If disabled, you can only
* switch the input via controls on this device.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_ROUTING_CONTROL
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setRoutingControl(@NonNull @RoutingControl int value) {
if (mService == null) {
@@ -2084,9 +2113,8 @@
* receiving Routing Control related messages. If disabled, you can only
* switch the input via controls on this device.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_ROUTING_CONTROL
*/
- @SystemApi
@NonNull
@RoutingControl
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2108,9 +2136,8 @@
* <p>Specifies to which devices Power Control messages should be sent:
* only to the TV, broadcast to all devices, no power control messages.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setPowerControlMode(@NonNull @PowerControlMode String value) {
if (mService == null) {
@@ -2130,9 +2157,8 @@
* <p>Reflects to which devices Power Control messages should be sent:
* only to the TV, broadcast to all devices, no power control messages.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_CONTROL_MODE
*/
- @SystemApi
@NonNull
@PowerControlMode
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2153,9 +2179,8 @@
*
* <p>Sets the action taken: do nothing or go to sleep immediately.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setPowerStateChangeOnActiveSourceLost(
@NonNull @ActiveSourceLostBehavior String value) {
@@ -2176,9 +2201,8 @@
*
* <p>Reflects the action taken: do nothing or go to sleep immediately.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST
*/
- @SystemApi
@NonNull
@ActiveSourceLostBehavior
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2204,9 +2228,8 @@
* the AVR instead of TV speaker or Audio System speakers. If disabled, the
* System Audio Mode will never be activated.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setSystemAudioControl(@NonNull @SystemAudioControl int value) {
if (mService == null) {
@@ -2229,9 +2252,8 @@
* the AVR instead of TV speaker or Audio System speakers. If disabled, the
* System Audio Mode will never be activated.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_CONTROL
*/
- @SystemApi
@NonNull
@SystemAudioControl
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2252,9 +2274,8 @@
*
* <p>Sets whether the device should be muted when System Audio Mode is turned off.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setSystemAudioModeMuting(@NonNull @SystemAudioModeMuting int value) {
if (mService == null) {
@@ -2273,9 +2294,8 @@
*
* <p>Reflects whether the device should be muted when System Audio Mode is turned off.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING
*/
- @SystemApi
@NonNull
@SystemAudioModeMuting
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2297,9 +2317,8 @@
* <p>Sets whether the TV should wake up upon reception of <Text View On>
* or <Image View On>.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setTvWakeOnOneTouchPlay(@NonNull @TvWakeOnOneTouchPlay int value) {
if (mService == null) {
@@ -2319,9 +2338,8 @@
* <p>Reflects whether the TV should wake up upon reception of <Text View On>
* or <Image View On>.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY
*/
- @SystemApi
@NonNull
@TvWakeOnOneTouchPlay
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2343,9 +2361,8 @@
* <p>Sets whether the device will also turn off other CEC devices
* when it goes to standby mode.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP
*/
- @SystemApi
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
public void setTvSendStandbyOnSleep(@NonNull @TvSendStandbyOnSleep int value) {
if (mService == null) {
@@ -2365,9 +2382,8 @@
* <p>Reflects whether the device will also turn off other CEC devices
* when it goes to standby mode.
*
- * @hide
+ * @see HdmiControlManager#CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP
*/
- @SystemApi
@NonNull
@TvSendStandbyOnSleep
@RequiresPermission(android.Manifest.permission.HDMI_CEC)
@@ -2382,4 +2398,102 @@
throw e.rethrowFromSystemServer();
}
}
+
+ /**
+ * Set presence of one Short Audio Descriptor (SAD) in the query.
+ *
+ * <p>Allows the caller to specify whether the SAD for a specific audio codec should be
+ * present in the <Request Short Audio Descriptor> query. Each <Request Short Audio
+ * Descriptor> message can carry at most 4 SADs at a time. This method allows the caller to
+ * limit the amount of SADs queried and therefore limit the amount of CEC messages on the bus.
+ *
+ * <p>When an ARC connection is established, the TV sends a
+ * <Request Short Audio Descriptor> query to the Audio System that it's connected to. If
+ * an SAD is queried and the Audio System reports that it supports that SAD, the TV can send
+ * audio in that format to be output on the Audio System via ARC.
+ * If a codec is not queried, the TV doesn't know if the connected Audio System supports this
+ * SAD and doesn't send audio in that format to the Audio System.
+ *
+ * @param setting SAD to set.
+ * @param value Presence to set the SAD to.
+ */
+ @RequiresPermission(android.Manifest.permission.HDMI_CEC)
+ public void setSadPresenceInQuery(@NonNull @CecSettingSad String setting,
+ @SadPresenceInQuery int value) {
+ if (mService == null) {
+ Log.e(TAG, "HdmiControlService is not available");
+ throw new RuntimeException("HdmiControlService is not available");
+ }
+ try {
+ mService.setCecSettingIntValue(setting, value);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Set presence of multiple Short Audio Descriptors (SADs) in the query.
+ *
+ * <p>Allows the caller to specify whether the SADs for specific audio codecs should be present
+ * in the <Request Short Audio Descriptor> query. For audio codecs that are not specified,
+ * the SAD's presence remains at its previous value. Each <Request Short Audio Descriptor>
+ * message can carry at most 4 SADs at a time. This method allows the caller to limit the amount
+ * of SADs queried and therefore limit the amount of CEC messages on the bus.
+ *
+ * <p>When an ARC connection is established, the TV sends a
+ * <Request Short Audio Descriptor> query to the Audio System that it's connected to. If
+ * an SAD is queried and the Audio System reports that it supports that SAD, the TV can send
+ * audio in that format to be output on the Audio System via ARC.
+ * If a codec is not queried, the TV doesn't know if the connected Audio System supports this
+ * SAD and doesn't send audio in that format to the Audio System.
+ *
+ *
+ * @param settings SADs to set.
+ * @param value Presence to set all specified SADs to.
+ */
+ @RequiresPermission(android.Manifest.permission.HDMI_CEC)
+ public void setSadsPresenceInQuery(@NonNull @CecSettingSad List<String> settings,
+ @SadPresenceInQuery int value) {
+ if (mService == null) {
+ Log.e(TAG, "HdmiControlService is not available");
+ throw new RuntimeException("HdmiControlService is not available");
+ }
+ try {
+ for (String sad : settings) {
+ mService.setCecSettingIntValue(sad, value);
+ }
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Get presence of one Short Audio Descriptor (SAD) in the query.
+ *
+ * <p>Reflects whether the SAD for a specific audio codec should be present in the
+ * <Request Short Audio Descriptor> query.
+ *
+ * <p>When an ARC connection is established, the TV sends a
+ * <Request Short Audio Descriptor> query to the Audio System that it's connected to. If
+ * an SAD is queried and the Audio System reports that it supports that SAD, the TV can send
+ * audio in that format to be output on the Audio System via ARC.
+ * If a codec is not queried, the TV doesn't know if the connected Audio System supports this
+ * SAD and doesn't send audio in that format to the Audio System.
+ *
+ * @param setting SAD to get.
+ * @return Current presence of the specified SAD.
+ */
+ @SadPresenceInQuery
+ @RequiresPermission(android.Manifest.permission.HDMI_CEC)
+ public int getSadPresenceInQuery(@NonNull @CecSettingSad String setting) {
+ if (mService == null) {
+ Log.e(TAG, "HdmiControlService is not available");
+ throw new RuntimeException("HdmiControlService is not available");
+ }
+ try {
+ return mService.getCecSettingIntValue(setting);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 2eb32b0..489a79f 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -5104,6 +5104,97 @@
<bool name="config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_allowed">true</bool>
<bool name="config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_default">true</bool>
+ <!-- Which Short Audio Descriptors a TV should query via CEC -->
+ <bool name="config_cecQuerySadLpcm_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadLpcmEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadLpcmEnabled_default">true</bool>
+ <bool name="config_cecQuerySadLpcmDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadLpcmDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadDd_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadDdEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDdEnabled_default">true</bool>
+ <bool name="config_cecQuerySadDdDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDdDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadMpeg1_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadMpeg1Enabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMpeg1Enabled_default">true</bool>
+ <bool name="config_cecQuerySadMpeg1Disabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMpeg1Disabled_default">false</bool>
+
+ <bool name="config_cecQuerySadMp3_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadMp3Enabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMp3Enabled_default">true</bool>
+ <bool name="config_cecQuerySadMp3Disabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMp3Disabled_default">false</bool>
+
+ <bool name="config_cecQuerySadMpeg2_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadMpeg2Enabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMpeg2Enabled_default">true</bool>
+ <bool name="config_cecQuerySadMpeg2Disabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMpeg2Disabled_default">false</bool>
+
+ <bool name="config_cecQuerySadAac_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadAacEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadAacEnabled_default">true</bool>
+ <bool name="config_cecQuerySadAacDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadAacDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadDts_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadDtsEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDtsEnabled_default">true</bool>
+ <bool name="config_cecQuerySadDtsDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDtsDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadAtrac_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadAtracEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadAtracEnabled_default">true</bool>
+ <bool name="config_cecQuerySadAtracDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadAtracDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadOnebitaudio_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadOnebitaudioEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadOnebitaudioEnabled_default">true</bool>
+ <bool name="config_cecQuerySadOnebitaudioDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadOnebitaudioDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadDdp_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadDdpEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDdpEnabled_default">true</bool>
+ <bool name="config_cecQuerySadDdpDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDdpDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadDtshd_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadDtshdEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDtshdEnabled_default">true</bool>
+ <bool name="config_cecQuerySadDtshdDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDtshdDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadTruehd_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadTruehdEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadTruehdEnabled_default">true</bool>
+ <bool name="config_cecQuerySadTruehdDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadTruehdDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadDst_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadDstEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDstEnabled_default">true</bool>
+ <bool name="config_cecQuerySadDstDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadDstDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadWmapro_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadWmaproEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadWmaproEnabled_default">true</bool>
+ <bool name="config_cecQuerySadWmaproDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadWmaproDisabled_default">false</bool>
+
+ <bool name="config_cecQuerySadMax_userConfigurable">true</bool>
+ <bool name="config_cecQuerySadMaxEnabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMaxEnabled_default">true</bool>
+ <bool name="config_cecQuerySadMaxDisabled_allowed">true</bool>
+ <bool name="config_cecQuerySadMaxDisabled_default">false</bool>
+
<!-- Whether app hibernation deletes OAT artifact files as part of global hibernation. -->
<bool name="config_hibernationDeletesOatArtifactsEnabled">true</bool>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 253cd47..d96b1de 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -4432,6 +4432,97 @@
<java-symbol type="bool" name="config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_allowed" />
<java-symbol type="bool" name="config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_default" />
+ <!-- Which Short Audio Descriptors a TV should query via CEC -->
+ <java-symbol type="bool" name="config_cecQuerySadLpcm_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadLpcmEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadLpcmEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadLpcmDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadLpcmDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadDd_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadDdEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDdEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadDdDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDdDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadMpeg1_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg1Enabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg1Enabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg1Disabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg1Disabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadMp3_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadMp3Enabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMp3Enabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadMp3Disabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMp3Disabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadMpeg2_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg2Enabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg2Enabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg2Disabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMpeg2Disabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadAac_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadAacEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadAacEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadAacDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadAacDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadDts_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadDtsEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDtsEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadDtsDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDtsDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadAtrac_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadAtracEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadAtracEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadAtracDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadAtracDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadOnebitaudio_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadOnebitaudioEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadOnebitaudioEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadOnebitaudioDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadOnebitaudioDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadDdp_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadDdpEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDdpEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadDdpDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDdpDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadDtshd_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadDtshdEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDtshdEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadDtshdDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDtshdDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadTruehd_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadTruehdEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadTruehdEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadTruehdDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadTruehdDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadDst_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadDstEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDstEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadDstDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadDstDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadWmapro_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadWmaproEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadWmaproEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadWmaproDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadWmaproDisabled_default" />
+
+ <java-symbol type="bool" name="config_cecQuerySadMax_userConfigurable" />
+ <java-symbol type="bool" name="config_cecQuerySadMaxEnabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMaxEnabled_default" />
+ <java-symbol type="bool" name="config_cecQuerySadMaxDisabled_allowed" />
+ <java-symbol type="bool" name="config_cecQuerySadMaxDisabled_default" />
+
<!-- Ids for RemoteViews -->
<java-symbol type="id" name="remote_views_next_child" />
<java-symbol type="id" name="remote_views_stable_id" />
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
index 550f1b9..65ec1c0 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecConfig.java
@@ -408,11 +408,11 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU,
R.bool.config_cecRcProfileSourceRootMenu_userConfigurable);
rcProfileSourceRootMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_ROOT_MENU_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED,
R.bool.config_cecRcProfileSourceRootMenuHandled_allowed,
R.bool.config_cecRcProfileSourceRootMenuHandled_default);
rcProfileSourceRootMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_ROOT_MENU_NOT_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_NOT_HANDLED,
R.bool.config_cecRcProfileSourceRootMenuNotHandled_allowed,
R.bool.config_cecRcProfileSourceRootMenuNotHandled_default);
@@ -420,11 +420,11 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU,
R.bool.config_cecRcProfileSourceSetupMenu_userConfigurable);
rcProfileSourceSetupMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_SETUP_MENU_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED,
R.bool.config_cecRcProfileSourceSetupMenuHandled_allowed,
R.bool.config_cecRcProfileSourceSetupMenuHandled_default);
rcProfileSourceSetupMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_SETUP_MENU_NOT_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_NOT_HANDLED,
R.bool.config_cecRcProfileSourceSetupMenuNotHandled_allowed,
R.bool.config_cecRcProfileSourceSetupMenuNotHandled_default);
@@ -432,11 +432,11 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
R.bool.config_cecRcProfileSourceContentsMenu_userConfigurable);
rcProfileSourceContentsMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_CONTENTS_MENU_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED,
R.bool.config_cecRcProfileSourceContentsMenuHandled_allowed,
R.bool.config_cecRcProfileSourceContentsMenuHandled_default);
rcProfileSourceContentsMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_CONTENTS_MENU_NOT_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_NOT_HANDLED,
R.bool.config_cecRcProfileSourceContentsMenuNotHandled_allowed,
R.bool.config_cecRcProfileSourceContentsMenuNotHandled_default);
@@ -444,11 +444,11 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
R.bool.config_cecRcProfileSourceTopMenu_userConfigurable);
rcProfileSourceTopMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_TOP_MENU_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED,
R.bool.config_cecRcProfileSourceTopMenuHandled_allowed,
R.bool.config_cecRcProfileSourceTopMenuHandled_default);
rcProfileSourceTopMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_TOP_MENU_NOT_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_NOT_HANDLED,
R.bool.config_cecRcProfileSourceTopMenuNotHandled_allowed,
R.bool.config_cecRcProfileSourceTopMenuNotHandled_default);
@@ -457,14 +457,194 @@
.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU,
R.bool.config_cecRcProfileSourceMediaContextSensitiveMenu_userConfigurable);
rcProfileSourceMediaContextSensitiveMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED,
R.bool.config_cecRcProfileSourceMediaContextSensitiveMenuHandled_allowed,
R.bool.config_cecRcProfileSourceMediaContextSensitiveMenuHandled_default);
rcProfileSourceMediaContextSensitiveMenu.registerValue(
- HdmiControlManager.RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_NOT_HANDLED,
+ HdmiControlManager.RC_PROFILE_SOURCE_MENU_NOT_HANDLED,
R.bool.config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_allowed,
R.bool.config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_default);
+ Setting querySadLpcm = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM,
+ R.bool.config_cecQuerySadLpcm_userConfigurable);
+ querySadLpcm.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadLpcmEnabled_allowed,
+ R.bool.config_cecQuerySadLpcmEnabled_default);
+ querySadLpcm.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadLpcmDisabled_allowed,
+ R.bool.config_cecQuerySadLpcmDisabled_default);
+
+ Setting querySadDd = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD,
+ R.bool.config_cecQuerySadDd_userConfigurable);
+ querySadDd.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadDdEnabled_allowed,
+ R.bool.config_cecQuerySadDdEnabled_default);
+ querySadDd.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadDdDisabled_allowed,
+ R.bool.config_cecQuerySadDdDisabled_default);
+
+ Setting querySadMpeg1 = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ R.bool.config_cecQuerySadMpeg1_userConfigurable);
+ querySadMpeg1.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadMpeg1Enabled_allowed,
+ R.bool.config_cecQuerySadMpeg1Enabled_default);
+ querySadMpeg1.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadMpeg1Disabled_allowed,
+ R.bool.config_cecQuerySadMpeg1Disabled_default);
+
+ Setting querySadMp3 = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3,
+ R.bool.config_cecQuerySadMp3_userConfigurable);
+ querySadMp3.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadMp3Enabled_allowed,
+ R.bool.config_cecQuerySadMp3Enabled_default);
+ querySadMp3.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadMp3Disabled_allowed,
+ R.bool.config_cecQuerySadMp3Disabled_default);
+
+ Setting querySadMpeg2 = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2,
+ R.bool.config_cecQuerySadMpeg2_userConfigurable);
+ querySadMpeg2.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadMpeg2Enabled_allowed,
+ R.bool.config_cecQuerySadMpeg2Enabled_default);
+ querySadMpeg2.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadMpeg2Disabled_allowed,
+ R.bool.config_cecQuerySadMpeg2Disabled_default);
+
+ Setting querySadAac = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC,
+ R.bool.config_cecQuerySadAac_userConfigurable);
+ querySadAac.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadAacEnabled_allowed,
+ R.bool.config_cecQuerySadAacEnabled_default);
+ querySadAac.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadAacDisabled_allowed,
+ R.bool.config_cecQuerySadAacDisabled_default);
+
+ Setting querySadDts = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS,
+ R.bool.config_cecQuerySadDts_userConfigurable);
+ querySadDts.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadDtsEnabled_allowed,
+ R.bool.config_cecQuerySadDtsEnabled_default);
+ querySadDts.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadDtsDisabled_allowed,
+ R.bool.config_cecQuerySadDtsDisabled_default);
+
+ Setting querySadAtrac = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC,
+ R.bool.config_cecQuerySadAtrac_userConfigurable);
+ querySadAtrac.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadAtracEnabled_allowed,
+ R.bool.config_cecQuerySadAtracEnabled_default);
+ querySadAtrac.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadAtracDisabled_allowed,
+ R.bool.config_cecQuerySadAtracDisabled_default);
+
+ Setting querySadOnebitaudio = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ R.bool.config_cecQuerySadOnebitaudio_userConfigurable);
+ querySadOnebitaudio.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadOnebitaudioEnabled_allowed,
+ R.bool.config_cecQuerySadOnebitaudioEnabled_default);
+ querySadOnebitaudio.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadOnebitaudioDisabled_allowed,
+ R.bool.config_cecQuerySadOnebitaudioDisabled_default);
+
+ Setting querySadDdp = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP,
+ R.bool.config_cecQuerySadDdp_userConfigurable);
+ querySadDdp.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadDdpEnabled_allowed,
+ R.bool.config_cecQuerySadDdpEnabled_default);
+ querySadDdp.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadDdpDisabled_allowed,
+ R.bool.config_cecQuerySadDdpDisabled_default);
+
+ Setting querySadDtshd = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD,
+ R.bool.config_cecQuerySadDtshd_userConfigurable);
+ querySadDtshd.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadDtshdEnabled_allowed,
+ R.bool.config_cecQuerySadDtshdEnabled_default);
+ querySadDtshd.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadDtshdDisabled_allowed,
+ R.bool.config_cecQuerySadDtshdDisabled_default);
+
+ Setting querySadTruehd = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD,
+ R.bool.config_cecQuerySadTruehd_userConfigurable);
+ querySadTruehd.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadTruehdEnabled_allowed,
+ R.bool.config_cecQuerySadTruehdEnabled_default);
+ querySadTruehd.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadTruehdDisabled_allowed,
+ R.bool.config_cecQuerySadTruehdDisabled_default);
+
+ Setting querySadDst = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST,
+ R.bool.config_cecQuerySadDst_userConfigurable);
+ querySadDst.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadDstEnabled_allowed,
+ R.bool.config_cecQuerySadDstEnabled_default);
+ querySadDst.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadDstDisabled_allowed,
+ R.bool.config_cecQuerySadDstDisabled_default);
+
+ Setting querySadWmapro = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ R.bool.config_cecQuerySadWmapro_userConfigurable);
+ querySadWmapro.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadWmaproEnabled_allowed,
+ R.bool.config_cecQuerySadWmaproEnabled_default);
+ querySadWmapro.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadWmaproDisabled_allowed,
+ R.bool.config_cecQuerySadWmaproDisabled_default);
+
+ Setting querySadMax = registerSetting(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX,
+ R.bool.config_cecQuerySadMax_userConfigurable);
+ querySadMax.registerValue(
+ HdmiControlManager.QUERY_SAD_ENABLED,
+ R.bool.config_cecQuerySadMaxEnabled_allowed,
+ R.bool.config_cecQuerySadMaxEnabled_default);
+ querySadMax.registerValue(
+ HdmiControlManager.QUERY_SAD_DISABLED,
+ R.bool.config_cecQuerySadMaxDisabled_allowed,
+ R.bool.config_cecQuerySadMaxDisabled_default);
+
verifySettings();
}
@@ -530,6 +710,36 @@
case HdmiControlManager
.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU:
return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO:
+ return STORAGE_SHARED_PREFS;
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX:
+ return STORAGE_SHARED_PREFS;
default:
throw new VerificationException("Invalid CEC setting '" + setting.getName()
+ "' storage.");
@@ -571,6 +781,36 @@
case HdmiControlManager
.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU:
return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO:
+ return setting.getName();
+ case HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX:
+ return setting.getName();
default:
throw new VerificationException("Invalid CEC setting '" + setting.getName()
+ "' storage key.");
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index ab8217a..f356c36 100755
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -151,6 +151,7 @@
private int mActiveRoutingPath;
protected final HdmiCecMessageCache mCecMessageCache = new HdmiCecMessageCache();
+ @VisibleForTesting
protected final Object mLock;
// A collection of FeatureAction.
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java
index d4fa1df..4f55249 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java
@@ -332,27 +332,27 @@
HdmiCecConfig hdmiCecConfig = mService.getHdmiCecConfig();
if (hdmiCecConfig.getIntValue(
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU)
- == HdmiControlManager.RC_PROFILE_SOURCE_ROOT_MENU_HANDLED) {
+ == HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED) {
features.add(Constants.RC_PROFILE_SOURCE_HANDLES_ROOT_MENU);
}
if (hdmiCecConfig.getIntValue(
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU)
- == HdmiControlManager.RC_PROFILE_SOURCE_SETUP_MENU_HANDLED) {
+ == HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED) {
features.add(Constants.RC_PROFILE_SOURCE_HANDLES_SETUP_MENU);
}
if (hdmiCecConfig.getIntValue(
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU)
- == HdmiControlManager.RC_PROFILE_SOURCE_CONTENTS_MENU_HANDLED) {
+ == HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED) {
features.add(Constants.RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU);
}
if (hdmiCecConfig.getIntValue(
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU)
- == HdmiControlManager.RC_PROFILE_SOURCE_TOP_MENU_HANDLED) {
+ == HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED) {
features.add(Constants.RC_PROFILE_SOURCE_HANDLES_TOP_MENU);
}
if (hdmiCecConfig.getIntValue(HdmiControlManager
.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU)
- == HdmiControlManager.RC_PROFILE_SOURCE_MEDIA_CONTEXT_SENSITIVE_MENU_HANDLED) {
+ == HdmiControlManager.RC_PROFILE_SOURCE_MENU_HANDLED) {
features.add(Constants.RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU);
}
return features;
diff --git a/services/core/java/com/android/server/hdmi/RequestSadAction.java b/services/core/java/com/android/server/hdmi/RequestSadAction.java
index 4d36078..702c000 100644
--- a/services/core/java/com/android/server/hdmi/RequestSadAction.java
+++ b/services/core/java/com/android/server/hdmi/RequestSadAction.java
@@ -16,10 +16,10 @@
package com.android.server.hdmi;
+import android.hardware.hdmi.HdmiControlManager;
import android.util.Slog;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -35,27 +35,11 @@
// State in which the action is waiting for <Report Short Audio Descriptor>.
private static final int STATE_WAITING_FOR_REPORT_SAD = 1;
-
- private static final List<Integer> ALL_CEC_CODECS = new ArrayList<Integer>(Arrays.asList(
- Constants.AUDIO_CODEC_LPCM,
- Constants.AUDIO_CODEC_DD,
- Constants.AUDIO_CODEC_MPEG1,
- Constants.AUDIO_CODEC_MP3,
- Constants.AUDIO_CODEC_MPEG2,
- Constants.AUDIO_CODEC_AAC,
- Constants.AUDIO_CODEC_DTS,
- Constants.AUDIO_CODEC_ATRAC,
- Constants.AUDIO_CODEC_ONEBITAUDIO,
- Constants.AUDIO_CODEC_DDP,
- Constants.AUDIO_CODEC_DTSHD,
- Constants.AUDIO_CODEC_TRUEHD,
- Constants.AUDIO_CODEC_DST,
- Constants.AUDIO_CODEC_WMAPRO,
- Constants.AUDIO_CODEC_MAX));
private static final int MAX_SAD_PER_REQUEST = 4;
private static final int RETRY_COUNTER_MAX = 1;
private final int mTargetAddress;
private final RequestSadCallback mCallback;
+ private final List<Integer> mCecCodecsToQuery = new ArrayList<>();
// List of all valid SADs reported by the target device. Not parsed nor deduplicated.
private final List<byte[]> mSupportedSads = new ArrayList<>();
private int mQueriedSadCount = 0; // Number of SADs queries that has already been completed
@@ -71,9 +55,84 @@
super(source);
mTargetAddress = targetAddress;
mCallback = Objects.requireNonNull(callback);
+ HdmiCecConfig hdmiCecConfig = localDevice().mService.getHdmiCecConfig();
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_LPCM);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_DD);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_MPEG1);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_MP3);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_MPEG2);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_AAC);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_DTS);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_ATRAC);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_ONEBITAUDIO);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_DDP);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_DTSHD);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_TRUEHD);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_DST);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_WMAPRO);
+ }
+ if (hdmiCecConfig.getIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX)
+ == HdmiControlManager.QUERY_SAD_ENABLED) {
+ mCecCodecsToQuery.add(Constants.AUDIO_CODEC_MAX);
+ }
}
-
@Override
boolean start() {
querySad();
@@ -81,13 +140,13 @@
}
private void querySad() {
- if (mQueriedSadCount >= ALL_CEC_CODECS.size()) {
+ if (mQueriedSadCount >= mCecCodecsToQuery.size()) {
wrapUpAndFinish();
return;
}
- int[] codecsToQuery = ALL_CEC_CODECS.subList(mQueriedSadCount,
- Math.min(ALL_CEC_CODECS.size(), mQueriedSadCount + MAX_SAD_PER_REQUEST))
- .stream().mapToInt(i -> i).toArray();
+ int[] codecsToQuery = mCecCodecsToQuery.subList(mQueriedSadCount,
+ Math.min(mCecCodecsToQuery.size(), mQueriedSadCount + MAX_SAD_PER_REQUEST))
+ .stream().mapToInt(i -> i).toArray();
sendCommand(HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(getSourceAddress(),
mTargetAddress, codecsToQuery));
mState = STATE_WAITING_FOR_REPORT_SAD;
@@ -111,9 +170,10 @@
byte[] sad = new byte[]{cmd.getParams()[i], cmd.getParams()[i + 1],
cmd.getParams()[i + 2]};
updateResult(sad);
+ } else {
+ // Don't include invalid codecs in the result. Don't query again.
+ Slog.w(TAG, "Dropped invalid codec " + cmd.getParams()[i] + ".");
}
- // Don't include invalid codecs in the result. Don't query again.
- Slog.w(TAG, "Received invalid codec " + cmd.getParams()[i] + ".");
}
mQueriedSadCount += MAX_SAD_PER_REQUEST;
mTimeoutRetry = 0;
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java
index abc1468e..d441143 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeHdmiCecConfig.java
@@ -242,6 +242,101 @@
doReturn(true).when(resources).getBoolean(
R.bool.config_cecRcProfileSourceMediaContextSensitiveMenuNotHandled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadLpcm_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadLpcmEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadLpcmEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadLpcmDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadLpcmDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDd_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadDdDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg1_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg1Enabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg1Enabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg1Disabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg1Disabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMp3_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMp3Enabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMp3Enabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMp3Disabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadMp3Disabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg2_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg2Enabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg2Enabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg2Disabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadMpeg2Disabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAac_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAacEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAacEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAacDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadAacDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDts_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtsEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtsEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtsDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadDtsDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAtrac_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAtracEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAtracEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadAtracDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadAtracDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(
+ R.bool.config_cecQuerySadOnebitaudio_userConfigurable);
+ doReturn(true).when(resources).getBoolean(
+ R.bool.config_cecQuerySadOnebitaudioEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(
+ R.bool.config_cecQuerySadOnebitaudioEnabled_default);
+ doReturn(true).when(resources).getBoolean(
+ R.bool.config_cecQuerySadOnebitaudioDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(
+ R.bool.config_cecQuerySadOnebitaudioDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdp_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdpEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdpEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDdpDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadDdpDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtshd_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtshdEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtshdEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDtshdDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadDtshdDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadTruehd_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadTruehdEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadTruehdEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadTruehdDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadTruehdDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDst_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDstEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDstEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadDstDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadDstDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadWmapro_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadWmaproEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadWmaproEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadWmaproDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadWmaproDisabled_default);
+
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMax_userConfigurable);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMaxEnabled_allowed);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMaxEnabled_default);
+ doReturn(true).when(resources).getBoolean(R.bool.config_cecQuerySadMaxDisabled_allowed);
+ doReturn(false).when(resources).getBoolean(R.bool.config_cecQuerySadMaxDisabled_default);
+
return resources;
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
index f307506..85d30a6 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecConfigTest.java
@@ -89,7 +89,22 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
HdmiControlManager
- .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU);
+ .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX);
}
@Test
@@ -112,7 +127,22 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
HdmiControlManager
- .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU);
+ .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX);
}
@Test
@@ -135,7 +165,22 @@
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
HdmiControlManager
- .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU);
+ .CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_LPCM,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MP3,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG2,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_AAC,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTS,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ATRAC,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DDP,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DTSHD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_TRUEHD,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_DST,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MAX);
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java
index 823ed2a..2d81fc9 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/RequestSadActionTest.java
@@ -22,6 +22,7 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.hardware.hdmi.HdmiControlManager;
import android.os.Looper;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
@@ -68,6 +69,7 @@
private Looper mMyLooper;
private TestLooper mTestLooper = new TestLooper();
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
+ private int mTvLogicalAddress;
private List<byte[]> mSupportedSads;
private RequestSadCallback mCallback =
new RequestSadCallback() {
@@ -94,7 +96,7 @@
mMyLooper = mTestLooper.getLooper();
mHdmiControlService =
- new HdmiControlService(InstrumentationRegistry.getTargetContext(),
+ new HdmiControlService(context,
Collections.emptyList()) {
@Override
boolean isControlEnabled() {
@@ -129,6 +131,9 @@
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
mNativeWrapper.setPhysicalAddress(0x0000);
mTestLooper.dispatchAll();
+ synchronized (mHdmiCecLocalDeviceTv.mLock) {
+ mTvLogicalAddress = mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress();
+ }
mNativeWrapper.clearResultMessages();
}
@@ -140,8 +145,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
mNativeWrapper.clearResultMessages();
@@ -153,8 +157,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
mNativeWrapper.clearResultMessages();
@@ -166,8 +169,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
mNativeWrapper.clearResultMessages();
@@ -179,8 +181,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected4 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
mNativeWrapper.clearResultMessages();
@@ -200,14 +201,12 @@
action.start();
mTestLooper.dispatchAll();
HdmiCecMessage featureAbort = HdmiCecMessageBuilder.buildFeatureAbortCommand(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress,
Constants.MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR,
Constants.ABORT_INVALID_OPERAND);
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
mNativeWrapper.clearResultMessages();
@@ -215,8 +214,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
mNativeWrapper.clearResultMessages();
@@ -224,8 +222,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
mNativeWrapper.clearResultMessages();
@@ -233,8 +230,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected4 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
action.processCommand(featureAbort);
@@ -251,8 +247,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18, 0x4A,
@@ -260,16 +255,14 @@
0x03, 0x4B, 0x00,
0x04, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_1);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
mNativeWrapper.clearResultMessages();
action.processCommand(response1);
mTestLooper.dispatchAll();
HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x05, 0x18, 0x4A,
@@ -277,16 +270,14 @@
0x07, 0x4B, 0x00,
0x08, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_2);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
mNativeWrapper.clearResultMessages();
action.processCommand(response2);
mTestLooper.dispatchAll();
HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[]{
0x09, 0x18, 0x4A,
@@ -294,24 +285,21 @@
0x0B, 0x4B, 0x00,
0x0C, 0x20, 0x0A};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_3);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
mNativeWrapper.clearResultMessages();
action.processCommand(response3);
mTestLooper.dispatchAll();
HdmiCecMessage expected4 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x0D, 0x18, 0x4A,
0x0E, 0x64, 0x5A,
0x0F, 0x4B, 0x00};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_4);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
action.processCommand(response4);
mTestLooper.dispatchAll();
@@ -335,38 +323,33 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18, 0x4A,
0x03, 0x4B, 0x00,
0x04, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_1);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
mNativeWrapper.clearResultMessages();
action.processCommand(response1);
mTestLooper.dispatchAll();
HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x08, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_2);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
mNativeWrapper.clearResultMessages();
action.processCommand(response2);
mTestLooper.dispatchAll();
HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[]{
0x09, 0x18, 0x4A,
@@ -374,22 +357,19 @@
0x0B, 0x4B, 0x00,
0x0C, 0x20, 0x0A};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_3);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
mNativeWrapper.clearResultMessages();
action.processCommand(response3);
mTestLooper.dispatchAll();
HdmiCecMessage expected4 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x0F, 0x4B, 0x00};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_4);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
action.processCommand(response4);
mTestLooper.dispatchAll();
@@ -413,8 +393,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x20, 0x18, 0x4A,
@@ -422,16 +401,14 @@
0x22, 0x4B, 0x00,
0x23, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_1);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
mNativeWrapper.clearResultMessages();
action.processCommand(response1);
mTestLooper.dispatchAll();
HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x24, 0x18, 0x4A,
@@ -439,16 +416,14 @@
0x26, 0x4B, 0x00,
0x27, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_2);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
mNativeWrapper.clearResultMessages();
action.processCommand(response2);
mTestLooper.dispatchAll();
HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[]{
0x28, 0x18, 0x4A,
@@ -456,24 +431,21 @@
0x2A, 0x4B, 0x00,
0x2B, 0x20, 0x0A};
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_3);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
mNativeWrapper.clearResultMessages();
action.processCommand(response3);
mTestLooper.dispatchAll();
HdmiCecMessage expected4 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x2C, 0x18, 0x4A,
0x2D, 0x64, 0x5A,
0x2E, 0x4B, 0x00};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_4);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
action.processCommand(response4);
mTestLooper.dispatchAll();
@@ -489,8 +461,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_1.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_1 = new byte[]{
0x01, 0x18,
@@ -498,8 +469,7 @@
0x03, 0x4B, 0x00,
0x04, 0x20, 0x0A};
HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_1);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
mNativeWrapper.clearResultMessages();
action.processCommand(response1);
@@ -512,8 +482,7 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_2.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_2 = new byte[]{
0x05, 0x18, 0x4A,
@@ -521,8 +490,7 @@
0x07,
0x08, 0x20, 0x0A};
HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_2);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
mNativeWrapper.clearResultMessages();
action.processCommand(response2);
@@ -535,13 +503,11 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_3.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_3 = new byte[0];
HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_3);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
mNativeWrapper.clearResultMessages();
action.processCommand(response3);
@@ -554,16 +520,14 @@
mTestLooper.dispatchAll();
HdmiCecMessage expected4 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(),
- Constants.ADDR_AUDIO_SYSTEM,
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
CODECS_TO_QUERY_4.stream().mapToInt(i -> i).toArray());
byte[] sadsToRespond_4 = new byte[]{
0x0D, 0x18, 0x4A,
0x0E, 0x64, 0x5A,
0x0F, 0x4B};
HdmiCecMessage response4 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
- Constants.ADDR_AUDIO_SYSTEM,
- mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), sadsToRespond_4);
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_4);
assertThat(mNativeWrapper.getResultMessages()).contains(expected4);
mNativeWrapper.clearResultMessages();
action.processCommand(response4);
@@ -576,4 +540,77 @@
assertThat(mSupportedSads.size()).isEqualTo(0);
}
+
+ @Test
+ public void selectedSads_allSupported_completeResult() {
+ mHdmiControlService.getHdmiCecConfig().setIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_MPEG1,
+ HdmiControlManager.QUERY_SAD_DISABLED);
+ mHdmiControlService.getHdmiCecConfig().setIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_ONEBITAUDIO,
+ HdmiControlManager.QUERY_SAD_DISABLED);
+ mHdmiControlService.getHdmiCecConfig().setIntValue(
+ HdmiControlManager.CEC_SETTING_NAME_QUERY_SAD_WMAPRO,
+ HdmiControlManager.QUERY_SAD_DISABLED);
+ RequestSadAction action = new RequestSadAction(mHdmiCecLocalDeviceTv, ADDR_AUDIO_SYSTEM,
+ mCallback);
+ action.start();
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage expected1 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
+ new int[]{Constants.AUDIO_CODEC_LPCM, Constants.AUDIO_CODEC_DD,
+ Constants.AUDIO_CODEC_MP3, Constants.AUDIO_CODEC_MPEG2});
+ byte[] sadsToRespond_1 = new byte[]{
+ 0x01, 0x18, 0x4A,
+ 0x02, 0x64, 0x5A,
+ 0x04, 0x20, 0x0A,
+ 0x05, 0x18, 0x4A};
+ HdmiCecMessage response1 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_1);
+ assertThat(mNativeWrapper.getResultMessages()).contains(expected1);
+ mNativeWrapper.clearResultMessages();
+ action.processCommand(response1);
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage expected2 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
+ new int[]{Constants.AUDIO_CODEC_AAC, Constants.AUDIO_CODEC_DTS,
+ Constants.AUDIO_CODEC_ATRAC, Constants.AUDIO_CODEC_DDP});
+ byte[] sadsToRespond_2 = new byte[]{
+ 0x06, 0x64, 0x5A,
+ 0x07, 0x4B, 0x00,
+ 0x08, 0x20, 0x0A,
+ 0x09, 0x18, 0x4A};
+ HdmiCecMessage response2 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_2);
+ assertThat(mNativeWrapper.getResultMessages()).contains(expected2);
+ mNativeWrapper.clearResultMessages();
+ action.processCommand(response2);
+ mTestLooper.dispatchAll();
+
+ HdmiCecMessage expected3 = HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
+ mTvLogicalAddress, Constants.ADDR_AUDIO_SYSTEM,
+ new int[]{Constants.AUDIO_CODEC_DTSHD, Constants.AUDIO_CODEC_TRUEHD,
+ Constants.AUDIO_CODEC_DST, Constants.AUDIO_CODEC_MAX});
+ byte[] sadsToRespond_3 = new byte[]{
+ 0x0B, 0x4B, 0x00,
+ 0x0C, 0x20, 0x0A,
+ 0x0D, 0x18, 0x4A,
+ 0x0F, 0x4B, 0x00};
+ HdmiCecMessage response3 = HdmiCecMessageBuilder.buildReportShortAudioDescriptor(
+ Constants.ADDR_AUDIO_SYSTEM, mTvLogicalAddress, sadsToRespond_3);
+ assertThat(mNativeWrapper.getResultMessages()).contains(expected3);
+ mNativeWrapper.clearResultMessages();
+ action.processCommand(response3);
+ mTestLooper.dispatchAll();
+
+ assertThat(mSupportedSads.size()).isEqualTo(12);
+ assertThat(Arrays.equals(sadsToRespond_1,
+ concatenateSads(mSupportedSads.subList(0, 4)))).isTrue();
+ assertThat(Arrays.equals(sadsToRespond_2,
+ concatenateSads(mSupportedSads.subList(4, 8)))).isTrue();
+ assertThat(Arrays.equals(sadsToRespond_3,
+ concatenateSads(mSupportedSads.subList(8, 12)))).isTrue();
+ }
}