HdmiControlManager.java revision 0608b9328b1c2f804ffb2d4165c34383d34bde2a
191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim/* 291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Copyright (C) 2014 The Android Open Source Project 391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Licensed under the Apache License, Version 2.0 (the "License"); 591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * you may not use this file except in compliance with the License. 691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * You may obtain a copy of the License at 791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * http://www.apache.org/licenses/LICENSE-2.0 991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 1091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Unless required by applicable law or agreed to in writing, software 1191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * distributed under the License is distributed on an "AS IS" BASIS, 1291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * See the License for the specific language governing permissions and 1491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * limitations under the License. 1591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 1691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 1791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kimpackage android.hardware.hdmi; 1891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 1991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kimimport android.annotation.Nullable; 20c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kimimport android.annotation.SdkConstant; 21c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kimimport android.annotation.SdkConstant.SdkConstantType; 2266d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kimimport android.annotation.SystemApi; 2378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kimimport android.os.RemoteException; 2478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 2591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim/** 2691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * The {@link HdmiControlManager} class is used to send HDMI control messages 2791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * to attached CEC devices. 2891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 2991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * <p>Provides various HDMI client instances that represent HDMI-CEC logical devices 3091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * hosted in the system. {@link #getTvClient()}, for instance will return an 3191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * {@link HdmiTvClient} object if the system is configured to host one. Android system 3291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * can host more than one logical CEC devices. If multiple types are configured they 3391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * all work as if they were independent logical devices running in the system. 3466d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kim * 3566d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kim * @hide 3691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 3766d1eb285b129836d1b3c392ed609283c0dbf830Jinsuk Kim@SystemApi 3891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kimpublic final class HdmiControlManager { 3991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim @Nullable private final IHdmiControlService mService; 4091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 41c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim /** 42c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim * Broadcast Action: Display OSD message. 43c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim * <p>Send when the service has a message to display on screen for events 44c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim * that need user's attention such as ARC status change. 45e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang * <p>Always contains the extra fields {@link #EXTRA_MESSAGE_ID}. 46c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim * <p>Requires {@link android.Manifest.permission#HDMI_CEC} to receive. 47c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim */ 48c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 49c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim public static final String ACTION_OSD_MESSAGE = "android.hardware.hdmi.action.OSD_MESSAGE"; 50c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim 51339227da7cf025ce4ae0c85ddc52643d63972321Jungshik Jang // --- Messages for ACTION_OSD_MESSAGE --- 52339227da7cf025ce4ae0c85ddc52643d63972321Jungshik Jang /** 53339227da7cf025ce4ae0c85ddc52643d63972321Jungshik Jang * Message that ARC enabled device is connected to invalid port (non-ARC port). 54339227da7cf025ce4ae0c85ddc52643d63972321Jungshik Jang */ 55339227da7cf025ce4ae0c85ddc52643d63972321Jungshik Jang public static final int OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT = 1; 56339227da7cf025ce4ae0c85ddc52643d63972321Jungshik Jang 57c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim /** 582e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * Message used by TV to receive volume status from Audio Receiver. It should check volume value 592e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * that is retrieved from extra value with the key {@link #EXTRA_MESSAGE_EXTRAM_PARAM1}. If the 602e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * value is in range of [0,100], it is current volume of Audio Receiver. And there is another 612e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * value, {@link #AVR_VOLUME_MUTED}, which is used to inform volume mute. 622e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang */ 632e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang public static final int OSD_MESSAGE_AVR_VOLUME_CHANGED = 2; 642e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang 652e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang /** 66c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim * Used as an extra field in the intent {@link #ACTION_OSD_MESSAGE}. Contains the ID of 67c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim * the message to display on screen. 68c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim */ 69c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim public static final String EXTRA_MESSAGE_ID = "android.hardware.hdmi.extra.MESSAGE_ID"; 702e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang /** 712e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * Used as an extra field in the intent {@link #ACTION_OSD_MESSAGE}. Contains the extra value 722e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * of the message. 732e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang */ 742e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang public static final String EXTRA_MESSAGE_EXTRAM_PARAM1 = 752e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang "android.hardware.hdmi.extra.MESSAGE_EXTRA_PARAM1"; 762e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang 772e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang /** 782e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang * Volume value for mute state. 792e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang */ 802e8f1b6399089626b4f0249427626ba6e63a62efJungshik Jang public static final int AVR_VOLUME_MUTED = 101; 81c7eba0f1db8928ca779933a564a06989e22a8532Jinsuk Kim 82c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int POWER_STATUS_UNKNOWN = -1; 83c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int POWER_STATUS_ON = 0; 84c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int POWER_STATUS_STANDBY = 1; 85c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; 86c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; 87c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim 88c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_SUCCESS = 0; 89c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_TIMEOUT = 1; 90c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_SOURCE_NOT_AVAILABLE = 2; 91c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_TARGET_NOT_AVAILABLE = 3; 92c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_ALREADY_IN_PROGRESS = 4; 93c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_EXCEPTION = 5; 94c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim public static final int RESULT_INCORRECT_MODE = 6; 95b38cd68b240d99e8c8ae6ff1802a574696b420cdJinsuk Kim public static final int RESULT_COMMUNICATION_FAILED = 7; 96c0c20d0522d7756d80f011e7a54bf3b51c78df41Jinsuk Kim 9761daf6b38e7a7ada2a6ca5a60539a54b9c6810bdJungshik Jang public static final int DEVICE_EVENT_ADD_DEVICE = 1; 9861daf6b38e7a7ada2a6ca5a60539a54b9c6810bdJungshik Jang public static final int DEVICE_EVENT_REMOVE_DEVICE = 2; 9961daf6b38e7a7ada2a6ca5a60539a54b9c6810bdJungshik Jang public static final int DEVICE_EVENT_UPDATE_DEVICE = 3; 10061daf6b38e7a7ada2a6ca5a60539a54b9c6810bdJungshik Jang 10112e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang // --- One Touch Recording success result 102b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Recording currently selected source. Indicates the status of a recording. */ 10312e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE = 0x01; 104b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Recording Digital Service. Indicates the status of a recording. */ 10512e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_RECORDING_DIGITAL_SERVICE = 0x02; 106b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Recording Analogue Service. Indicates the status of a recording. */ 10712e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_RECORDING_ANALOGUE_SERVICE = 0x03; 108b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Recording External input. Indicates the status of a recording. */ 10912e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT = 0x04; 11012e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang 11112e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang // --- One Touch Record failure result 112b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – unable to record Digital Service. No suitable tuner. */ 11312e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_UNABLE_DIGITAL_SERVICE = 0x05; 114b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – unable to record Analogue Service. No suitable tuner. */ 11512e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_UNABLE_ANALOGUE_SERVICE = 0x06; 116b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** 117b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang * No recording – unable to select required service. as suitable tuner, but the requested 118b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang * parameters are invalid or out of range for that tuner. 119b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang */ 12012e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_UNABLE_SELECTED_SERVICE = 0x07; 121b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – invalid External plug number */ 12212e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PLUG_NUMBER = 0x09; 123b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – invalid External Physical Address */ 12412e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PHYSICAL_ADDRESS = 0x0A; 125b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – CA system not supported */ 12612e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_UNSUPPORTED_CA = 0x0B; 127b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No Recording – No or Insufficient CA Entitlements” */ 12812e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_NO_OR_INSUFFICIENT_CA_ENTITLEMENTS = 0x0C; 129b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – Not allowed to copy source. Source is “copy never”. */ 13012e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_DISALLOW_TO_COPY = 0x0D; 131b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – No further copies allowed */ 13212e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_DISALLOW_TO_FUTHER_COPIES = 0x0E; 133b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – No media */ 13412e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_NO_MEDIA = 0x10; 135b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – playing */ 13612e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_PLAYING = 0x11; 137b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – already recording */ 13812e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_ALREADY_RECORDING = 0x12; 139b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – media protected */ 14012e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_MEDIA_PROTECTED = 0x13; 141b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – no source signal */ 14212e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_NO_SOURCE_SIGNAL = 0x14; 143b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – media problem */ 14412e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_MEDIA_PROBLEM = 0x15; 145b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – not enough space available */ 14612e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_NOT_ENOUGH_SPACE = 0x16; 147b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – Parental Lock On */ 14812e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_PARENT_LOCK_ON = 0x17; 149b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Recording terminated normally */ 15012e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_RECORDING_TERMINATED_NORMALLY = 0x1A; 151b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Recording has already terminated */ 15212e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_RECORDING_ALREADY_TERMINATED = 0x1B; 153b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording – other reason */ 15412e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_OTHER_REASON = 0x1F; 155b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang // From here extra message for recording that is not mentioned in CEC spec 156b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording. Previous recording request in progress. */ 15712e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS = 0x30; 158b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** No recording. Please check recorder and connection. */ 15912e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION = 0x31; 160b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Cannot record currently displayed source. */ 16112e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN = 0x32; 16212e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang /** CEC is disabled. */ 16312e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang public static final int ONE_TOUCH_RECORD_CEC_DISABLED = 0x33; 164b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang 16512e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang // --- Types for timer recording 166b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Timer recording type for digital service source. */ 167b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang public static final int TIMER_RECORDING_TYPE_DIGITAL = 1; 168b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Timer recording type for analogue service source. */ 169b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang public static final int TIMER_RECORDING_TYPE_ANALOGUE = 2; 170b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang /** Timer recording type for external source. */ 171b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang public static final int TIMER_RECORDING_TYPE_EXTERNAL = 3; 172b6591b8e5399099dc6b7693e0fc719b613aba89cJungshik Jang 173e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang // --- Timer Status Data 174e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Media Info] - Media present and not protected. */ 175e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_NOT_PROTECTED = 0x0; 176e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Media Info] - Media present, but protected. */ 177e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_PROTECTED = 0x1; 178e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Media Info] - Media not present. */ 179e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_MEDIA_INFO_NOT_PRESENT = 0x2; 180e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang 181e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Programmed Info] - Enough space available for recording. */ 182e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_PROGRAMMED_INFO_ENOUGH_SPACE = 0x8; 183e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Programmed Info] - Not enough space available for recording. */ 184e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_PROGRAMMED_INFO_NOT_ENOUGH_SPACE = 0x9; 185e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Programmed Info] - Might not enough space available for recording. */ 186e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_PROGRAMMED_INFO_MIGHT_NOT_ENOUGH_SPACE = 0xB; 187e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Programmed Info] - No media info available. */ 188e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_PROGRAMMED_INFO_NO_MEDIA_INFO = 0xA; 189e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang 190e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - No free timer available. */ 191e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_FREE_TIME = 0x1; 192e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Date out of range. */ 193e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_DATE_OUT_OF_RANGE = 0x2; 194e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Recording Sequence error. */ 195e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_SEQUENCE = 0x3; 196e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Invalid External Plug Number. */ 197e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PLUG_NUMBER = 0x4; 198e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Invalid External Physical Address. */ 199e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PHYSICAL_NUMBER = 0x5; 200e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - CA system not supported. */ 201e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_CA_NOT_SUPPORTED = 0x6; 202e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - No or insufficient CA Entitlements. */ 203e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_CA_ENTITLEMENTS = 0x7; 204e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Does not support resolution. */ 205e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_UNSUPPORTED_RESOLUTION = 0x8; 206e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Parental Lock On. */ 207e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_PARENTAL_LOCK_ON= 0x9; 208e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Clock Failure. */ 209e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_CLOCK_FAILURE = 0xA; 210e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** [Timer Status Data/Not Programmed Error Info] - Duplicate: already programmed. */ 211e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_STATUS_NOT_PROGRAMMED_DUPLICATED = 0xE; 212e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang 21312e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang // --- Extra result value for timer recording. 214e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** No extra error. */ 215e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_RECORDING_RESULT_EXTRA_NO_ERROR = 0x00; 21612e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang /** No timer recording - check recorder and connection. */ 217e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION = 0x01; 21812e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang /** No timer recording - cannot record selected source. */ 219e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE = 0x02; 22012e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang /** CEC is disabled. */ 221e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED = 0x03; 222e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang 223e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang // -- Timer cleared status data code used for result of onClearTimerRecordingResult. 224e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Timer not cleared – recording. */ 225e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING = 0x00; 226e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Timer not cleared – no matching. */ 227e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING = 0x01; 228e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Timer not cleared – no info available. */ 229e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_INFO_AVAILABLE = 0x02; 230e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Timer cleared. */ 231e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_TIMER_CLEARED = 0x80; 232e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Clear timer error - check recorder and connection. */ 233e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION = 0xA0; 234e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Clear timer error - cannot clear timer for selected source. */ 235e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE = 0xA1; 236e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang /** Clear timer error - CEC is disabled. */ 237e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang public static final int CLEAR_TIMER_STATUS_CEC_DISABLE = 0xA2; 23812e5dcefe136b58562f39604e6a8460ac92cb895Jungshik Jang 2390608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo /** The HdmiControlService is started. */ 2400608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo public static final int CONTROL_STATE_CHANGED_REASON_START = 0; 2410608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo /** The state of HdmiControlService is changed by changing of settings. */ 2420608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo public static final int CONTROL_STATE_CHANGED_REASON_SETTING = 1; 2430608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo /** The HdmiControlService is enabled to wake up. */ 2440608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo public static final int CONTROL_STATE_CHANGED_REASON_WAKEUP = 2; 2450608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo /** The HdmiControlService will be disabled to standby. */ 2460608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo public static final int CONTROL_STATE_CHANGED_REASON_STANDBY = 3; 2470608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo 24878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim // True if we have a logical device of type playback hosted in the system. 24978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim private final boolean mHasPlaybackDevice; 25078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim // True if we have a logical device of type TV hosted in the system. 25178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim private final boolean mHasTvDevice; 25278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 25391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 25491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * @hide - hide this constructor because it has a parameter of type 25591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * IHdmiControlService, which is a system private class. The right way 25691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * to create an instance of this class is using the factory 25791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * Context.getSystemService. 25891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 25991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public HdmiControlManager(IHdmiControlService service) { 26091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim mService = service; 26178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim int[] types = null; 26278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim if (mService != null) { 26378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim try { 26478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim types = mService.getSupportedTypes(); 26578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } catch (RemoteException e) { 26678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim // Do nothing. 26778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 26878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 26961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang mHasTvDevice = hasDeviceType(types, HdmiDeviceInfo.DEVICE_TV); 27061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang mHasPlaybackDevice = hasDeviceType(types, HdmiDeviceInfo.DEVICE_PLAYBACK); 27178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 27278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 27378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim private static boolean hasDeviceType(int[] types, int type) { 27478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim if (types == null) { 27578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return false; 27678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 27778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim for (int t : types) { 27878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim if (t == type) { 27978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return true; 28078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 28178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 28278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return false; 28391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 28491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 28591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 2866ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim * Gets an object that represents an HDMI-CEC logical device of a specified type. 2876ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim * 2886ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim * @param type CEC device type 2896ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim * @return {@link HdmiClient} instance. {@code null} on failure. 29061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * See {@link HdmiDeviceInfo#DEVICE_PLAYBACK} 29161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * See {@link HdmiDeviceInfo#DEVICE_TV} 2926ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim */ 2936ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim @Nullable 2946ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim public HdmiClient getClient(int type) { 2956ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim if (mService == null) { 2966ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim return null; 2976ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim } 2986ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim switch (type) { 29961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang case HdmiDeviceInfo.DEVICE_TV: 3006ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim return mHasTvDevice ? new HdmiTvClient(mService) : null; 30161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang case HdmiDeviceInfo.DEVICE_PLAYBACK: 3026ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim return mHasPlaybackDevice ? new HdmiPlaybackClient(mService) : null; 3036ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim default: 3046ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim return null; 3056ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim } 3066ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim } 3076ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim 3086ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim /** 3096ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim * Gets an object that represents an HDMI-CEC logical device of type playback on the system. 31091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 31191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * <p>Used to send HDMI control messages to other devices like TV or audio amplifier through 31291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * HDMI bus. It is also possible to communicate with other logical devices hosted in the same 31391120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * system if the system is configured to host more than one type of HDMI-CEC logical devices. 31491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 31591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * @return {@link HdmiPlaybackClient} instance. {@code null} on failure. 31691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 31791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim @Nullable 31891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public HdmiPlaybackClient getPlaybackClient() { 31961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang return (HdmiPlaybackClient) getClient(HdmiDeviceInfo.DEVICE_PLAYBACK); 32091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 32191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim 32291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim /** 3236ffb03816f7410c001072a25c3e4161a2da4f501Jinsuk Kim * Gets an object that represents an HDMI-CEC logical device of type TV on the system. 32491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 32591120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * <p>Used to send HDMI control messages to other devices and manage them through 32691120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * HDMI bus. It is also possible to communicate with other logical devices hosted in the same 32791120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * system if the system is configured to host more than one type of HDMI-CEC logical devices. 32891120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * 32991120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim * @return {@link HdmiTvClient} instance. {@code null} on failure. 33091120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim */ 33191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim @Nullable 33291120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim public HdmiTvClient getTvClient() { 33361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang return (HdmiTvClient) getClient(HdmiDeviceInfo.DEVICE_TV); 33491120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim } 33578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 33678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim /** 33778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * Listener used to get hotplug event from HDMI port. 33878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim */ 33978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim public interface HotplugEventListener { 34078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim void onReceived(HdmiHotplugEvent event); 34178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 34278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 34378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim /** 344119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * Listener used to get vendor-specific commands. 345119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim */ 346119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim public interface VendorCommandListener { 347119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim /** 348119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * Called when a vendor command is received. 349119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * 350119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * @param srcAddress source logical address 3510608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @param destAddress destination logical address 352119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * @param params vendor-specific parameters 353119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * @param hasVendorId {@code true} if the command is <Vendor Command 354119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim * With ID>. The first 3 bytes of params is vendor id. 355119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim */ 3560608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo void onReceived(int srcAddress, int destAddress, byte[] params, boolean hasVendorId); 3570608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo 3580608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo /** 3590608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * The callback is called: 3600608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * <ul> 3610608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * <li> before HdmiControlService is disabled. 3620608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * <li> after HdmiControlService is enabled and the local address is assigned. 3630608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * </ul> 3640608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * The client shouldn't hold the thread too long since this is a blocking call. 3650608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * 3660608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @param enabled {@code true} if HdmiControlService is enabled. 3670608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @param reason the reason code why the state of HdmiControlService is changed. 3680608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @see #CONTROL_STATE_CHANGED_REASON_START 3690608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @see #CONTROL_STATE_CHANGED_REASON_SETTING 3700608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @see #CONTROL_STATE_CHANGED_REASON_WAKEUP 3710608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo * @see #CONTROL_STATE_CHANGED_REASON_STANDBY 3720608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo */ 3730608b9328b1c2f804ffb2d4165c34383d34bde2aYuncheol Heo void onControlStateChanged(boolean enabled, int reason); 374119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim } 375119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim 376119160a68195bcb2f5bdf4a269807e01228eca97Jinsuk Kim /** 37778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * Adds a listener to get informed of {@link HdmiHotplugEvent}. 37878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * 37978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * <p>To stop getting the notification, 3809302a733b01c3ab4abd7911a286baf4833847d56Jinsuk Kim * use {@link #removeHotplugEventListener(HotplugEventListener)}. 38178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * 38278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param listener {@link HotplugEventListener} instance 3839302a733b01c3ab4abd7911a286baf4833847d56Jinsuk Kim * @see HdmiControlManager#removeHotplugEventListener(HotplugEventListener) 38478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim */ 38578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim public void addHotplugEventListener(HotplugEventListener listener) { 38678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim if (mService == null) { 38778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return; 38878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 38978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim try { 39078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim mService.addHotplugEventListener(getHotplugEventListenerWrapper(listener)); 39178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } catch (RemoteException e) { 39278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim // Do nothing. 39378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 39478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 39578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 39678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim /** 39778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * Removes a listener to stop getting informed of {@link HdmiHotplugEvent}. 39878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * 39978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim * @param listener {@link HotplugEventListener} instance to be removed 40078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim */ 4019302a733b01c3ab4abd7911a286baf4833847d56Jinsuk Kim public void removeHotplugEventListener(HotplugEventListener listener) { 40278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim if (mService == null) { 40378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return; 40478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 40578d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim try { 40678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim mService.removeHotplugEventListener(getHotplugEventListenerWrapper(listener)); 40778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } catch (RemoteException e) { 40878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim // Do nothing. 40978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 41078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 41178d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim 41278d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim private IHdmiHotplugEventListener getHotplugEventListenerWrapper( 41378d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim final HotplugEventListener listener) { 41478d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim return new IHdmiHotplugEventListener.Stub() { 415e5a9337ebe738633cf7b66141cdf76efcdc5754cJungshik Jang @Override 41678d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim public void onReceived(HdmiHotplugEvent event) { 41778d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim listener.onReceived(event);; 41878d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 41978d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim }; 42078d695d8ba532214b02e7f18e0ccf89cf099163dJinsuk Kim } 42191120c541ac0c8c5e256b75759c884b4d6d664fcJinsuk Kim} 422