1c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim/* 2c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Copyright (C) 2014 The Android Open Source Project 3c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 4c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Licensed under the Apache License, Version 2.0 (the "License"); 5c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * you may not use this file except in compliance with the License. 6c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * You may obtain a copy of the License at 7c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 8c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * http://www.apache.org/licenses/LICENSE-2.0 9c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 10c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Unless required by applicable law or agreed to in writing, software 11c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * distributed under the License is distributed on an "AS IS" BASIS, 12c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * See the License for the specific language governing permissions and 14c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * limitations under the License. 15c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 16c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 17d5cc4a281e7ce29d1e8687ff3394b57a3a549260Jae Seopackage android.media.tv; 18c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 1971d5c76f19e8714102073bf774c025d5ccdebc11Shubangimport static java.lang.annotation.RetentionPolicy.SOURCE; 2071d5c76f19e8714102073bf774c025d5ccdebc11Shubang 2171d5c76f19e8714102073bf774c025d5ccdebc11Shubangimport android.annotation.IntDef; 22d811af223ea4064669ad219f78aa7f57d6bb5bceJi-Hwan Leeimport android.annotation.SystemApi; 2339f285d5a75f653d2d2309b47cfaa143da42a0caShubangimport android.hardware.tv.input.V1_0.Constants; 24d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kimimport android.media.AudioManager; 25c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.os.Parcel; 26c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.os.Parcelable; 27c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.util.Log; 2871d5c76f19e8714102073bf774c025d5ccdebc11Shubangimport java.lang.annotation.Retention; 29c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 30c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim/** 31c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Simple container for information about TV input hardware. 32c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Not for third-party developers. 33c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 34c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * @hide 35c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 36d811af223ea4064669ad219f78aa7f57d6bb5bceJi-Hwan Lee@SystemApi 37c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimpublic final class TvInputHardwareInfo implements Parcelable { 38c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim static final String TAG = "TvInputHardwareInfo"; 39c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 40c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim // Match hardware/libhardware/include/hardware/tv_input.h 4139f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_OTHER_HARDWARE = Constants.TV_INPUT_TYPE_OTHER; 4239f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_TUNER = Constants.TV_INPUT_TYPE_TUNER; 4339f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_COMPOSITE = Constants.TV_INPUT_TYPE_COMPOSITE; 4439f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_SVIDEO = Constants.TV_INPUT_TYPE_SVIDEO; 4539f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_SCART = Constants.TV_INPUT_TYPE_SCART; 4639f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_COMPONENT = Constants.TV_INPUT_TYPE_COMPONENT; 4739f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_VGA = Constants.TV_INPUT_TYPE_VGA; 4839f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_DVI = Constants.TV_INPUT_TYPE_DVI; 4939f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_HDMI = Constants.TV_INPUT_TYPE_HDMI; 5039f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int TV_INPUT_TYPE_DISPLAY_PORT = Constants.TV_INPUT_TYPE_DISPLAY_PORT; 51c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 5271d5c76f19e8714102073bf774c025d5ccdebc11Shubang /** @hide */ 5371d5c76f19e8714102073bf774c025d5ccdebc11Shubang @Retention(SOURCE) 5471d5c76f19e8714102073bf774c025d5ccdebc11Shubang @IntDef({CABLE_CONNECTION_STATUS_UNKNOWN, CABLE_CONNECTION_STATUS_CONNECTED, 5571d5c76f19e8714102073bf774c025d5ccdebc11Shubang CABLE_CONNECTION_STATUS_DISCONNECTED}) 5671d5c76f19e8714102073bf774c025d5ccdebc11Shubang public @interface CableConnectionStatus {} 5771d5c76f19e8714102073bf774c025d5ccdebc11Shubang 5871d5c76f19e8714102073bf774c025d5ccdebc11Shubang // Match hardware/interfaces/tv/input/1.0/types.hal 5971d5c76f19e8714102073bf774c025d5ccdebc11Shubang /** 6071d5c76f19e8714102073bf774c025d5ccdebc11Shubang * The hardware is unsure about the connection status or does not support cable detection. 6171d5c76f19e8714102073bf774c025d5ccdebc11Shubang */ 6239f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int CABLE_CONNECTION_STATUS_UNKNOWN = 6339f285d5a75f653d2d2309b47cfaa143da42a0caShubang Constants.CABLE_CONNECTION_STATUS_UNKNOWN; 6471d5c76f19e8714102073bf774c025d5ccdebc11Shubang 6571d5c76f19e8714102073bf774c025d5ccdebc11Shubang /** 6671d5c76f19e8714102073bf774c025d5ccdebc11Shubang * Cable is connected to the hardware. 6771d5c76f19e8714102073bf774c025d5ccdebc11Shubang */ 6839f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int CABLE_CONNECTION_STATUS_CONNECTED = 6939f285d5a75f653d2d2309b47cfaa143da42a0caShubang Constants.CABLE_CONNECTION_STATUS_CONNECTED; 7071d5c76f19e8714102073bf774c025d5ccdebc11Shubang 7171d5c76f19e8714102073bf774c025d5ccdebc11Shubang /** 7271d5c76f19e8714102073bf774c025d5ccdebc11Shubang * Cable is disconnected to the hardware. 7371d5c76f19e8714102073bf774c025d5ccdebc11Shubang */ 7439f285d5a75f653d2d2309b47cfaa143da42a0caShubang public static final int CABLE_CONNECTION_STATUS_DISCONNECTED = 7539f285d5a75f653d2d2309b47cfaa143da42a0caShubang Constants.CABLE_CONNECTION_STATUS_DISCONNECTED; 7671d5c76f19e8714102073bf774c025d5ccdebc11Shubang 77c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public static final Parcelable.Creator<TvInputHardwareInfo> CREATOR = 78c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim new Parcelable.Creator<TvInputHardwareInfo>() { 79c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 80c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvInputHardwareInfo createFromParcel(Parcel source) { 81c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim try { 82c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim TvInputHardwareInfo info = new TvInputHardwareInfo(); 83c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim info.readFromParcel(source); 84c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return info; 85c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } catch (Exception e) { 86c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim Log.e(TAG, "Exception creating TvInputHardwareInfo from parcel", e); 87c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return null; 88c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 89c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 90c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 91c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 92c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvInputHardwareInfo[] newArray(int size) { 93c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return new TvInputHardwareInfo[size]; 94c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 95c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim }; 96c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 97c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mDeviceId; 98c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mType; 99d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private int mAudioType; 100d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private String mAudioAddress; 101a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim private int mHdmiPortId; 10271d5c76f19e8714102073bf774c025d5ccdebc11Shubang @CableConnectionStatus 10371d5c76f19e8714102073bf774c025d5ccdebc11Shubang private int mCableConnectionStatus; 104c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 105d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private TvInputHardwareInfo() { 106c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 107c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 108c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getDeviceId() { 109c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mDeviceId; 110c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 111c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 112c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getType() { 113c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mType; 114c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 115c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 116d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public int getAudioType() { 117d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return mAudioType; 118d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 119d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 120d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public String getAudioAddress() { 121d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return mAudioAddress; 122d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 123d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 124a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim public int getHdmiPortId() { 125a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mType != TV_INPUT_TYPE_HDMI) { 126a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim throw new IllegalStateException(); 127a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 128a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim return mHdmiPortId; 129a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 130a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim 13171d5c76f19e8714102073bf774c025d5ccdebc11Shubang /** 13271d5c76f19e8714102073bf774c025d5ccdebc11Shubang * Gets the cable connection status of the hardware. 13371d5c76f19e8714102073bf774c025d5ccdebc11Shubang * 13471d5c76f19e8714102073bf774c025d5ccdebc11Shubang * @return {@code CABLE_CONNECTION_STATUS_CONNECTED} if cable is connected. 13571d5c76f19e8714102073bf774c025d5ccdebc11Shubang * {@code CABLE_CONNECTION_STATUS_DISCONNECTED} if cable is disconnected. 13671d5c76f19e8714102073bf774c025d5ccdebc11Shubang * {@code CABLE_CONNECTION_STATUS_UNKNOWN} if the hardware is unsure about the 13771d5c76f19e8714102073bf774c025d5ccdebc11Shubang * connection status or does not support cable detection. 13871d5c76f19e8714102073bf774c025d5ccdebc11Shubang */ 13971d5c76f19e8714102073bf774c025d5ccdebc11Shubang @CableConnectionStatus 14071d5c76f19e8714102073bf774c025d5ccdebc11Shubang public int getCableConnectionStatus() { 14171d5c76f19e8714102073bf774c025d5ccdebc11Shubang return mCableConnectionStatus; 14271d5c76f19e8714102073bf774c025d5ccdebc11Shubang } 14371d5c76f19e8714102073bf774c025d5ccdebc11Shubang 1441034df8c63d309462e99012f84885705229eeed5Dongwon Kang @Override 1451034df8c63d309462e99012f84885705229eeed5Dongwon Kang public String toString() { 1461034df8c63d309462e99012f84885705229eeed5Dongwon Kang StringBuilder b = new StringBuilder(128); 1471034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append("TvInputHardwareInfo {id=").append(mDeviceId); 1481034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", type=").append(mType); 1491034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", audio_type=").append(mAudioType); 1501034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", audio_addr=").append(mAudioAddress); 1511034df8c63d309462e99012f84885705229eeed5Dongwon Kang if (mType == TV_INPUT_TYPE_HDMI) { 1521034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", hdmi_port=").append(mHdmiPortId); 1531034df8c63d309462e99012f84885705229eeed5Dongwon Kang } 15471d5c76f19e8714102073bf774c025d5ccdebc11Shubang b.append(", cable_connection_status=").append(mCableConnectionStatus); 1551034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append("}"); 1561034df8c63d309462e99012f84885705229eeed5Dongwon Kang return b.toString(); 1571034df8c63d309462e99012f84885705229eeed5Dongwon Kang } 1581034df8c63d309462e99012f84885705229eeed5Dongwon Kang 159c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim // Parcelable 160c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 161c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int describeContents() { 162c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return 0; 163c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 164c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 165c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 166c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public void writeToParcel(Parcel dest, int flags) { 167c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mDeviceId); 168c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mType); 169d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim dest.writeInt(mAudioType); 170d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim dest.writeString(mAudioAddress); 171a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mType == TV_INPUT_TYPE_HDMI) { 172a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim dest.writeInt(mHdmiPortId); 173a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 17471d5c76f19e8714102073bf774c025d5ccdebc11Shubang dest.writeInt(mCableConnectionStatus); 175c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 176c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 177c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public void readFromParcel(Parcel source) { 178c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mDeviceId = source.readInt(); 179c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mType = source.readInt(); 180d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioType = source.readInt(); 181d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioAddress = source.readString(); 182a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mType == TV_INPUT_TYPE_HDMI) { 183a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim mHdmiPortId = source.readInt(); 184a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 18571d5c76f19e8714102073bf774c025d5ccdebc11Shubang mCableConnectionStatus = source.readInt(); 186d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 187d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 188d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public static final class Builder { 189d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private Integer mDeviceId = null; 190d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private Integer mType = null; 191d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private int mAudioType = AudioManager.DEVICE_NONE; 192d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private String mAudioAddress = ""; 193a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim private Integer mHdmiPortId = null; 19471d5c76f19e8714102073bf774c025d5ccdebc11Shubang private Integer mCableConnectionStatus = CABLE_CONNECTION_STATUS_UNKNOWN; 195d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 196d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder() { 197d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 198d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 199d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder deviceId(int deviceId) { 200d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mDeviceId = deviceId; 201d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 202d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 203d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 204d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder type(int type) { 205d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mType = type; 206d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 207d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 208d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 209d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder audioType(int audioType) { 210d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioType = audioType; 211d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 212d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 213d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 214d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder audioAddress(String audioAddress) { 215d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioAddress = audioAddress; 216d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 217d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 218d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 219a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim public Builder hdmiPortId(int hdmiPortId) { 220a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim mHdmiPortId = hdmiPortId; 221a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim return this; 222a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 223a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim 22471d5c76f19e8714102073bf774c025d5ccdebc11Shubang /** 22571d5c76f19e8714102073bf774c025d5ccdebc11Shubang * Sets cable connection status. 22671d5c76f19e8714102073bf774c025d5ccdebc11Shubang */ 22771d5c76f19e8714102073bf774c025d5ccdebc11Shubang public Builder cableConnectionStatus(@CableConnectionStatus int cableConnectionStatus) { 22871d5c76f19e8714102073bf774c025d5ccdebc11Shubang mCableConnectionStatus = cableConnectionStatus; 22971d5c76f19e8714102073bf774c025d5ccdebc11Shubang return this; 23071d5c76f19e8714102073bf774c025d5ccdebc11Shubang } 23171d5c76f19e8714102073bf774c025d5ccdebc11Shubang 232d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public TvInputHardwareInfo build() { 233d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim if (mDeviceId == null || mType == null) { 234d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim throw new UnsupportedOperationException(); 235d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 236a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if ((mType == TV_INPUT_TYPE_HDMI && mHdmiPortId == null) || 237a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim (mType != TV_INPUT_TYPE_HDMI && mHdmiPortId != null)) { 238a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim throw new UnsupportedOperationException(); 239a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 240d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 241d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim TvInputHardwareInfo info = new TvInputHardwareInfo(); 242d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mDeviceId = mDeviceId; 243d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mType = mType; 244d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mAudioType = mAudioType; 245d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim if (info.mAudioType != AudioManager.DEVICE_NONE) { 246d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mAudioAddress = mAudioAddress; 247d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 248a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mHdmiPortId != null) { 249a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim info.mHdmiPortId = mHdmiPortId; 250a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 25171d5c76f19e8714102073bf774c025d5ccdebc11Shubang info.mCableConnectionStatus = mCableConnectionStatus; 252d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return info; 253d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 254c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 255c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim} 256