• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.media.tv;
18 
19 import android.annotation.SystemApi;
20 import android.media.AudioManager;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 import android.util.Log;
24 
25 /**
26  * Simple container for information about TV input hardware.
27  * Not for third-party developers.
28  *
29  * @hide
30  */
31 @SystemApi
32 public final class TvInputHardwareInfo implements Parcelable {
33     static final String TAG = "TvInputHardwareInfo";
34 
35     // Match hardware/libhardware/include/hardware/tv_input.h
36     public static final int TV_INPUT_TYPE_OTHER_HARDWARE = 1;
37     public static final int TV_INPUT_TYPE_TUNER          = 2;
38     public static final int TV_INPUT_TYPE_COMPOSITE      = 3;
39     public static final int TV_INPUT_TYPE_SVIDEO         = 4;
40     public static final int TV_INPUT_TYPE_SCART          = 5;
41     public static final int TV_INPUT_TYPE_COMPONENT      = 6;
42     public static final int TV_INPUT_TYPE_VGA            = 7;
43     public static final int TV_INPUT_TYPE_DVI            = 8;
44     public static final int TV_INPUT_TYPE_HDMI           = 9;
45     public static final int TV_INPUT_TYPE_DISPLAY_PORT   = 10;
46 
47     public static final Parcelable.Creator<TvInputHardwareInfo> CREATOR =
48             new Parcelable.Creator<TvInputHardwareInfo>() {
49         @Override
50         public TvInputHardwareInfo createFromParcel(Parcel source) {
51             try {
52                 TvInputHardwareInfo info = new TvInputHardwareInfo();
53                 info.readFromParcel(source);
54                 return info;
55             } catch (Exception e) {
56                 Log.e(TAG, "Exception creating TvInputHardwareInfo from parcel", e);
57                 return null;
58             }
59         }
60 
61         @Override
62         public TvInputHardwareInfo[] newArray(int size) {
63             return new TvInputHardwareInfo[size];
64         }
65     };
66 
67     private int mDeviceId;
68     private int mType;
69     private int mAudioType;
70     private String mAudioAddress;
71     private int mHdmiPortId;
72 
TvInputHardwareInfo()73     private TvInputHardwareInfo() {
74     }
75 
getDeviceId()76     public int getDeviceId() {
77         return mDeviceId;
78     }
79 
getType()80     public int getType() {
81         return mType;
82     }
83 
getAudioType()84     public int getAudioType() {
85         return mAudioType;
86     }
87 
getAudioAddress()88     public String getAudioAddress() {
89         return mAudioAddress;
90     }
91 
getHdmiPortId()92     public int getHdmiPortId() {
93         if (mType != TV_INPUT_TYPE_HDMI) {
94             throw new IllegalStateException();
95         }
96         return mHdmiPortId;
97     }
98 
99     @Override
toString()100     public String toString() {
101         StringBuilder b = new StringBuilder(128);
102         b.append("TvInputHardwareInfo {id=").append(mDeviceId);
103         b.append(", type=").append(mType);
104         b.append(", audio_type=").append(mAudioType);
105         b.append(", audio_addr=").append(mAudioAddress);
106         if (mType == TV_INPUT_TYPE_HDMI) {
107             b.append(", hdmi_port=").append(mHdmiPortId);
108         }
109         b.append("}");
110         return b.toString();
111     }
112 
113     // Parcelable
114     @Override
describeContents()115     public int describeContents() {
116         return 0;
117     }
118 
119     @Override
writeToParcel(Parcel dest, int flags)120     public void writeToParcel(Parcel dest, int flags) {
121         dest.writeInt(mDeviceId);
122         dest.writeInt(mType);
123         dest.writeInt(mAudioType);
124         dest.writeString(mAudioAddress);
125         if (mType == TV_INPUT_TYPE_HDMI) {
126             dest.writeInt(mHdmiPortId);
127         }
128     }
129 
readFromParcel(Parcel source)130     public void readFromParcel(Parcel source) {
131         mDeviceId = source.readInt();
132         mType = source.readInt();
133         mAudioType = source.readInt();
134         mAudioAddress = source.readString();
135         if (mType == TV_INPUT_TYPE_HDMI) {
136             mHdmiPortId = source.readInt();
137         }
138     }
139 
140     public static final class Builder {
141         private Integer mDeviceId = null;
142         private Integer mType = null;
143         private int mAudioType = AudioManager.DEVICE_NONE;
144         private String mAudioAddress = "";
145         private Integer mHdmiPortId = null;
146 
Builder()147         public Builder() {
148         }
149 
deviceId(int deviceId)150         public Builder deviceId(int deviceId) {
151             mDeviceId = deviceId;
152             return this;
153         }
154 
type(int type)155         public Builder type(int type) {
156             mType = type;
157             return this;
158         }
159 
audioType(int audioType)160         public Builder audioType(int audioType) {
161             mAudioType = audioType;
162             return this;
163         }
164 
audioAddress(String audioAddress)165         public Builder audioAddress(String audioAddress) {
166             mAudioAddress = audioAddress;
167             return this;
168         }
169 
hdmiPortId(int hdmiPortId)170         public Builder hdmiPortId(int hdmiPortId) {
171             mHdmiPortId = hdmiPortId;
172             return this;
173         }
174 
build()175         public TvInputHardwareInfo build() {
176             if (mDeviceId == null || mType == null) {
177                 throw new UnsupportedOperationException();
178             }
179             if ((mType == TV_INPUT_TYPE_HDMI && mHdmiPortId == null) ||
180                     (mType != TV_INPUT_TYPE_HDMI && mHdmiPortId != null)) {
181                 throw new UnsupportedOperationException();
182             }
183 
184             TvInputHardwareInfo info = new TvInputHardwareInfo();
185             info.mDeviceId = mDeviceId;
186             info.mType = mType;
187             info.mAudioType = mAudioType;
188             if (info.mAudioType != AudioManager.DEVICE_NONE) {
189                 info.mAudioAddress = mAudioAddress;
190             }
191             if (mHdmiPortId != null) {
192                 info.mHdmiPortId = mHdmiPortId;
193             }
194             return info;
195         }
196     }
197 }
198