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 19d811af223ea4064669ad219f78aa7f57d6bb5bceJi-Hwan Leeimport android.annotation.SystemApi; 20d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kimimport android.media.AudioManager; 21c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.os.Parcel; 22c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.os.Parcelable; 23c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimimport android.util.Log; 24c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 25c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim/** 26c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Simple container for information about TV input hardware. 27c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * Not for third-party developers. 28c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * 29c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim * @hide 30c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim */ 31d811af223ea4064669ad219f78aa7f57d6bb5bceJi-Hwan Lee@SystemApi 32c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kimpublic final class TvInputHardwareInfo implements Parcelable { 33c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim static final String TAG = "TvInputHardwareInfo"; 34c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 35c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim // Match hardware/libhardware/include/hardware/tv_input.h 361034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_OTHER_HARDWARE = 1; 371034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_TUNER = 2; 381034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_COMPOSITE = 3; 391034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_SVIDEO = 4; 401034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_SCART = 5; 411034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_COMPONENT = 6; 421034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_VGA = 7; 431034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_DVI = 8; 441034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_HDMI = 9; 451034df8c63d309462e99012f84885705229eeed5Dongwon Kang public static final int TV_INPUT_TYPE_DISPLAY_PORT = 10; 46c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 47c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public static final Parcelable.Creator<TvInputHardwareInfo> CREATOR = 48c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim new Parcelable.Creator<TvInputHardwareInfo>() { 49c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 50c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvInputHardwareInfo createFromParcel(Parcel source) { 51c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim try { 52c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim TvInputHardwareInfo info = new TvInputHardwareInfo(); 53c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim info.readFromParcel(source); 54c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return info; 55c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } catch (Exception e) { 56c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim Log.e(TAG, "Exception creating TvInputHardwareInfo from parcel", e); 57c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return null; 58c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 59c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 60c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 61c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 62c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public TvInputHardwareInfo[] newArray(int size) { 63c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return new TvInputHardwareInfo[size]; 64c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 65c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim }; 66c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 67c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mDeviceId; 68c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim private int mType; 69d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private int mAudioType; 70d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private String mAudioAddress; 71a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim private int mHdmiPortId; 72c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 73d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private TvInputHardwareInfo() { 74c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 75c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 76c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getDeviceId() { 77c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mDeviceId; 78c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 79c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 80c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int getType() { 81c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return mType; 82c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 83c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 84d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public int getAudioType() { 85d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return mAudioType; 86d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 87d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 88d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public String getAudioAddress() { 89d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return mAudioAddress; 90d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 91d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 92a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim public int getHdmiPortId() { 93a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mType != TV_INPUT_TYPE_HDMI) { 94a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim throw new IllegalStateException(); 95a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 96a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim return mHdmiPortId; 97a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 98a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim 991034df8c63d309462e99012f84885705229eeed5Dongwon Kang @Override 1001034df8c63d309462e99012f84885705229eeed5Dongwon Kang public String toString() { 1011034df8c63d309462e99012f84885705229eeed5Dongwon Kang StringBuilder b = new StringBuilder(128); 1021034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append("TvInputHardwareInfo {id=").append(mDeviceId); 1031034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", type=").append(mType); 1041034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", audio_type=").append(mAudioType); 1051034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", audio_addr=").append(mAudioAddress); 1061034df8c63d309462e99012f84885705229eeed5Dongwon Kang if (mType == TV_INPUT_TYPE_HDMI) { 1071034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append(", hdmi_port=").append(mHdmiPortId); 1081034df8c63d309462e99012f84885705229eeed5Dongwon Kang } 1091034df8c63d309462e99012f84885705229eeed5Dongwon Kang b.append("}"); 1101034df8c63d309462e99012f84885705229eeed5Dongwon Kang return b.toString(); 1111034df8c63d309462e99012f84885705229eeed5Dongwon Kang } 1121034df8c63d309462e99012f84885705229eeed5Dongwon Kang 113c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim // Parcelable 114c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 115c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public int describeContents() { 116c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim return 0; 117c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 118c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 119c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim @Override 120c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public void writeToParcel(Parcel dest, int flags) { 121c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mDeviceId); 122c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim dest.writeInt(mType); 123d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim dest.writeInt(mAudioType); 124d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim dest.writeString(mAudioAddress); 125a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mType == TV_INPUT_TYPE_HDMI) { 126a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim dest.writeInt(mHdmiPortId); 127a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 128c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 129c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim 130c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim public void readFromParcel(Parcel source) { 131c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mDeviceId = source.readInt(); 132c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim mType = source.readInt(); 133d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioType = source.readInt(); 134d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioAddress = source.readString(); 135a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mType == TV_INPUT_TYPE_HDMI) { 136a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim mHdmiPortId = source.readInt(); 137a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 138d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 139d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 140d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public static final class Builder { 141d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private Integer mDeviceId = null; 142d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private Integer mType = null; 143d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private int mAudioType = AudioManager.DEVICE_NONE; 144d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim private String mAudioAddress = ""; 145a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim private Integer mHdmiPortId = null; 146d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 147d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder() { 148d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 149d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 150d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder deviceId(int deviceId) { 151d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mDeviceId = deviceId; 152d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 153d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 154d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 155d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder type(int type) { 156d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mType = type; 157d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 158d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 159d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 160d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder audioType(int audioType) { 161d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioType = audioType; 162d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 163d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 164d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 165d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public Builder audioAddress(String audioAddress) { 166d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim mAudioAddress = audioAddress; 167d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return this; 168d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 169d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 170a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim public Builder hdmiPortId(int hdmiPortId) { 171a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim mHdmiPortId = hdmiPortId; 172a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim return this; 173a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 174a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim 175d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim public TvInputHardwareInfo build() { 176d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim if (mDeviceId == null || mType == null) { 177d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim throw new UnsupportedOperationException(); 178d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 179a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if ((mType == TV_INPUT_TYPE_HDMI && mHdmiPortId == null) || 180a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim (mType != TV_INPUT_TYPE_HDMI && mHdmiPortId != null)) { 181a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim throw new UnsupportedOperationException(); 182a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 183d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim 184d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim TvInputHardwareInfo info = new TvInputHardwareInfo(); 185d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mDeviceId = mDeviceId; 186d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mType = mType; 187d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mAudioType = mAudioType; 188d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim if (info.mAudioType != AudioManager.DEVICE_NONE) { 189d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim info.mAudioAddress = mAudioAddress; 190d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 191a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim if (mHdmiPortId != null) { 192a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim info.mHdmiPortId = mHdmiPortId; 193a358b53e1d0bb7a7fc08b0a4d2a2e256f3045859Wonsik Kim } 194d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim return info; 195d7c29189aa639bfac1e6efcd222e65c2c8ecf3f1Wonsik Kim } 196c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim } 197c22dbb69194c8e8fe2a32326d1f37a738cad0904Wonsik Kim} 198