summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJae Seo <jaeseo@google.com>2016-02-26 15:01:08 -0800
committerJae Seo <jaeseo@google.com>2016-02-26 16:54:11 -0800
commit093fa4ebd88692acd07fc78cb87f61ebfbcbb973 (patch)
tree5f63fd3a599aa54957f8d254f810cb4431c98b83
parent09c09fd345a6b4c9619885428dce9802ad7b8cd8 (diff)
TIF: Enable per state input icon in TvInputInfo
Also made the fields final and grouped them. Bug: 23820259 Change-Id: I725c830d7c73e8cbc01b6a4f4f4991cb42258380
-rw-r--r--api/system-current.txt2
-rw-r--r--media/java/android/media/tv/TvInputInfo.java231
2 files changed, 153 insertions, 80 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 81a3e8937e1a..f42360f212d3 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -24645,6 +24645,7 @@ package android.media.tv {
method public boolean isPassthroughInput();
method public java.lang.CharSequence loadCustomLabel(android.content.Context);
method public android.graphics.drawable.Drawable loadIcon(android.content.Context);
+ method public android.graphics.drawable.Drawable loadIcon(android.content.Context, int);
method public java.lang.CharSequence loadLabel(android.content.Context);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR;
@@ -24667,6 +24668,7 @@ package android.media.tv {
method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean);
method public android.media.tv.TvInputInfo.Builder setHdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo);
method public android.media.tv.TvInputInfo.Builder setIcon(android.graphics.drawable.Icon);
+ method public android.media.tv.TvInputInfo.Builder setIcon(android.graphics.drawable.Icon, int);
method public android.media.tv.TvInputInfo.Builder setLabel(int);
method public android.media.tv.TvInputInfo.Builder setParentId(java.lang.String);
method public android.media.tv.TvInputInfo.Builder setTunerCount(int);
diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java
index ec65ffed0c05..6e0f5f2c1a43 100644
--- a/media/java/android/media/tv/TvInputInfo.java
+++ b/media/java/android/media/tv/TvInputInfo.java
@@ -111,26 +111,32 @@ public final class TvInputInfo implements Parcelable {
public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID";
private final ResolveInfo mService;
+
private final String mId;
- private final String mParentId;
private final int mType;
private final boolean mIsHardwareInput;
- private final Bundle mExtras;
- // Attributes from XML meta data.
- private String mSetupActivity;
- private String mSettingsActivity;
- private boolean mCanRecord;
- private int mTunerCount;
-
- private HdmiDeviceInfo mHdmiDeviceInfo;
- private int mLabelResId;
- // TODO: Remove when createTvInputInfo() is removed.
+ // TODO: Remove mLabel and mIconUri when createTvInputInfo() is removed.
private String mLabel;
- private Icon mIcon;
- // TODO: Remove when createTvInputInfo() is removed.
private Uri mIconUri;
- private boolean mIsConnectedToHdmiSwitch;
+
+ private final int mLabelResId;
+ private final Icon mIcon;
+ private final Icon mIconStandby;
+ private final Icon mIconDisconnected;
+
+ // Attributes from XML meta data.
+ private final String mSetupActivity;
+ private final String mSettingsActivity;
+ private final boolean mCanRecord;
+ private final int mTunerCount;
+
+ // Attributes specific to HDMI
+ private final HdmiDeviceInfo mHdmiDeviceInfo;
+ private final boolean mIsConnectedToHdmiSwitch;
+ private final String mParentId;
+
+ private final Bundle mExtras;
/**
* Create a new instance of the TvInputInfo class, instantiating it from the given Context,
@@ -240,28 +246,27 @@ public final class TvInputInfo implements Parcelable {
.build();
}
- /**
- * Constructor.
- *
- * @param service The ResolveInfo returned from the package manager about this TV input service.
- * @param id ID of this TV input. Should be generated via generateInputId*().
- * @param parentId ID of this TV input's parent input. {@code null} if none exists.
- * @param type The type of this TV input service.
- * @param isHardwareInput {@code true} if this TV input represents a hardware device.
- * {@code false} otherwise.
- * @param isConnectedToHdmiSwitch Whether a CEC device for this TV input is connected to an HDMI
- * switch, i.e., the device isn't directly connected to a HDMI port.
- */
- private TvInputInfo(ResolveInfo service, String id, String parentId, int type,
- boolean isHardwareInput, boolean isConnectedToHdmiSwitch, Bundle extras) {
+ private TvInputInfo(ResolveInfo service, String id, int type, boolean isHardwareInput,
+ int labelResId, Icon icon, Icon iconStandby, Icon iconDisconnected,
+ String setupActivity, String settingsActivity, boolean canRecord, int tunerCount,
+ HdmiDeviceInfo hdmiDeviceInfo, boolean isConnectedToHdmiSwitch, String parentId,
+ Bundle extras) {
mService = service;
mId = id;
- mParentId = parentId;
mType = type;
mIsHardwareInput = isHardwareInput;
+ mLabelResId = labelResId;
+ mIcon = icon;
+ mIconStandby = iconStandby;
+ mIconDisconnected = iconDisconnected;
+ mSetupActivity = setupActivity;
+ mSettingsActivity = settingsActivity;
+ mCanRecord = canRecord;
+ mTunerCount = tunerCount;
+ mHdmiDeviceInfo = hdmiDeviceInfo;
mIsConnectedToHdmiSwitch = isConnectedToHdmiSwitch;
+ mParentId = parentId;
mExtras = extras;
- mTunerCount = type == TYPE_TUNER ? 1 : 0;
}
/**
@@ -475,6 +480,36 @@ public final class TvInputInfo implements Parcelable {
return loadServiceIcon(context);
}
+ /**
+ * Loads the user-displayed icon for this TV input per input state.
+ *
+ * @param context Supplies a {@link Context} used to load the icon.
+ * @param state The input state. Should be one of the followings.
+ * {@link TvInputManager#INPUT_STATE_CONNECTED},
+ * {@link TvInputManager#INPUT_STATE_CONNECTED_STANDBY} and
+ * {@link TvInputManager#INPUT_STATE_DISCONNECTED}.
+ * @return a Drawable containing the TV input's icon for the given state or {@code null} if such
+ * an icon is not defined.
+ * @hide
+ */
+ @SystemApi
+ public Drawable loadIcon(@NonNull Context context, int state) {
+ if (state == TvInputManager.INPUT_STATE_CONNECTED) {
+ return loadIcon(context);
+ } else if (state == TvInputManager.INPUT_STATE_CONNECTED_STANDBY) {
+ if (mIconStandby != null) {
+ return mIconStandby.loadDrawable(context);
+ }
+ } else if (state == TvInputManager.INPUT_STATE_DISCONNECTED) {
+ if (mIconDisconnected != null) {
+ return mIconDisconnected.loadDrawable(context);
+ }
+ } else {
+ throw new IllegalArgumentException("Unknown state: " + state);
+ }
+ return null;
+ }
+
@Override
public int describeContents() {
return 0;
@@ -496,21 +531,23 @@ public final class TvInputInfo implements Parcelable {
}
TvInputInfo obj = (TvInputInfo) o;
- return TextUtils.equals(mId, obj.mId)
- && TextUtils.equals(mParentId, obj.mParentId)
- && Objects.equals(mService, obj.mService)
- && TextUtils.equals(mSetupActivity, obj.mSetupActivity)
- && TextUtils.equals(mSettingsActivity, obj.mSettingsActivity)
+ return Objects.equals(mService, obj.mService)
+ && TextUtils.equals(mId, obj.mId)
&& mType == obj.mType
- && mTunerCount == obj.mTunerCount
- && mCanRecord == obj.mCanRecord
&& mIsHardwareInput == obj.mIsHardwareInput
- && Objects.equals(mHdmiDeviceInfo, obj.mHdmiDeviceInfo)
- && Objects.equals(mIcon, obj.mIcon)
+ && TextUtils.equals(mLabel, obj.mLabel)
&& Objects.equals(mIconUri, obj.mIconUri)
&& mLabelResId == obj.mLabelResId
- && TextUtils.equals(mLabel, obj.mLabel)
+ && Objects.equals(mIcon, obj.mIcon)
+ && Objects.equals(mIconStandby, obj.mIconStandby)
+ && Objects.equals(mIconDisconnected, obj.mIconDisconnected)
+ && TextUtils.equals(mSetupActivity, obj.mSetupActivity)
+ && TextUtils.equals(mSettingsActivity, obj.mSettingsActivity)
+ && mCanRecord == obj.mCanRecord
+ && mTunerCount == obj.mTunerCount
+ && Objects.equals(mHdmiDeviceInfo, obj.mHdmiDeviceInfo)
&& mIsConnectedToHdmiSwitch == obj.mIsConnectedToHdmiSwitch
+ && TextUtils.equals(mParentId, obj.mParentId)
&& Objects.equals(mExtras, obj.mExtras);
}
@@ -529,21 +566,23 @@ public final class TvInputInfo implements Parcelable {
*/
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
- dest.writeString(mId);
- dest.writeString(mParentId);
mService.writeToParcel(dest, flags);
- dest.writeString(mSetupActivity);
- dest.writeString(mSettingsActivity);
+ dest.writeString(mId);
dest.writeInt(mType);
- dest.writeInt(mTunerCount);
- dest.writeByte(mCanRecord ? (byte) 1 : 0);
dest.writeByte(mIsHardwareInput ? (byte) 1 : 0);
- dest.writeParcelable(mHdmiDeviceInfo, flags);
- dest.writeParcelable(mIcon, flags);
+ dest.writeString(mLabel);
dest.writeParcelable(mIconUri, flags);
dest.writeInt(mLabelResId);
- dest.writeString(mLabel);
+ dest.writeParcelable(mIcon, flags);
+ dest.writeParcelable(mIconStandby, flags);
+ dest.writeParcelable(mIconDisconnected, flags);
+ dest.writeString(mSetupActivity);
+ dest.writeString(mSettingsActivity);
+ dest.writeByte(mCanRecord ? (byte) 1 : 0);
+ dest.writeInt(mTunerCount);
+ dest.writeParcelable(mHdmiDeviceInfo, flags);
dest.writeByte(mIsConnectedToHdmiSwitch ? (byte) 1 : 0);
+ dest.writeString(mParentId);
dest.writeBundle(mExtras);
}
@@ -569,21 +608,23 @@ public final class TvInputInfo implements Parcelable {
};
private TvInputInfo(Parcel in) {
- mId = in.readString();
- mParentId = in.readString();
mService = ResolveInfo.CREATOR.createFromParcel(in);
- mSetupActivity = in.readString();
- mSettingsActivity = in.readString();
+ mId = in.readString();
mType = in.readInt();
- mTunerCount = in.readInt();
- mCanRecord = in.readByte() == 1;
mIsHardwareInput = in.readByte() == 1;
- mHdmiDeviceInfo = in.readParcelable(null);
- mIcon = in.readParcelable(null);
+ mLabel = in.readString();
mIconUri = in.readParcelable(null);
mLabelResId = in.readInt();
- mLabel = in.readString();
+ mIcon = in.readParcelable(null);
+ mIconStandby = in.readParcelable(null);
+ mIconDisconnected = in.readParcelable(null);
+ mSetupActivity = in.readString();
+ mSettingsActivity = in.readString();
+ mCanRecord = in.readByte() == 1;
+ mTunerCount = in.readInt();
+ mHdmiDeviceInfo = in.readParcelable(null);
mIsConnectedToHdmiSwitch = in.readByte() == 1;
+ mParentId = in.readString();
mExtras = in.readBundle();
}
@@ -619,13 +660,17 @@ public final class TvInputInfo implements Parcelable {
private final Context mContext;
private final ResolveInfo mResolveInfo;
- private Icon mIcon;
private int mLabelResId;
- private int mTunerCount = 1;
- private boolean mCanRecord;
+ private Icon mIcon;
+ private Icon mIconStandby;
+ private Icon mIconDisconnected;
+ private String mSetupActivity;
+ private String mSettingsActivity;
+ private Boolean mCanRecord;
+ private Integer mTunerCount;
+ private TvInputHardwareInfo mTvInputHardwareInfo;
private HdmiDeviceInfo mHdmiDeviceInfo;
private String mParentId;
- private TvInputHardwareInfo mTvInputHardwareInfo;
private Bundle mExtras;
/**
@@ -673,6 +718,31 @@ public final class TvInputInfo implements Parcelable {
}
/**
+ * Sets the icon for a given input state.
+ *
+ * @param icon The icon that represents this TV input for the given state.
+ * @param state The input state. Should be one of the followings.
+ * {@link TvInputManager#INPUT_STATE_CONNECTED},
+ * {@link TvInputManager#INPUT_STATE_CONNECTED_STANDBY} and
+ * {@link TvInputManager#INPUT_STATE_DISCONNECTED}.
+ * @return This Builder object to allow for chaining of calls to builder methods.
+ * @hide
+ */
+ @SystemApi
+ public Builder setIcon(Icon icon, int state) {
+ if (state == TvInputManager.INPUT_STATE_CONNECTED) {
+ this.mIcon = icon;
+ } else if (state == TvInputManager.INPUT_STATE_CONNECTED_STANDBY) {
+ this.mIconStandby = icon;
+ } else if (state == TvInputManager.INPUT_STATE_DISCONNECTED) {
+ this.mIconDisconnected = icon;
+ } else {
+ throw new IllegalArgumentException("Unknown state: " + state);
+ }
+ return this;
+ }
+
+ /**
* Sets the label.
*
* @param resId The resource ID of the text to use.
@@ -796,10 +866,11 @@ public final class TvInputInfo implements Parcelable {
id = generateInputId(componentName);
type = TYPE_TUNER;
}
-
- TvInputInfo info = new TvInputInfo(mResolveInfo, id, mParentId, type, isHardwareInput,
- isConnectedToHdmiSwitch, mExtras);
- return parseServiceMetadata(type, info);
+ parseServiceMetadata(type);
+ return new TvInputInfo(mResolveInfo, id, type, isHardwareInput, mLabelResId, mIcon,
+ mIconStandby, mIconDisconnected, mSetupActivity, mSettingsActivity,
+ mCanRecord == null ? false : mCanRecord, mTunerCount == null ? 0 : mTunerCount,
+ mHdmiDeviceInfo, isConnectedToHdmiSwitch, mParentId, mExtras);
}
private static String generateInputId(ComponentName name) {
@@ -821,7 +892,7 @@ public final class TvInputInfo implements Parcelable {
+ tvInputHardwareInfo.getDeviceId();
}
- private TvInputInfo parseServiceMetadata(int inputType, TvInputInfo info)
+ private void parseServiceMetadata(int inputType)
throws XmlPullParserException, IOException {
ServiceInfo si = mResolveInfo.serviceInfo;
PackageManager pm = mContext.getPackageManager();
@@ -848,32 +919,32 @@ public final class TvInputInfo implements Parcelable {
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.TvInputService);
- info.mSetupActivity = sa.getString(
+ mSetupActivity = sa.getString(
com.android.internal.R.styleable.TvInputService_setupActivity);
if (DEBUG) {
- Log.d(TAG, "Setup activity loaded. [" + info.mSetupActivity + "] for "
- + si.name);
+ Log.d(TAG, "Setup activity loaded. [" + mSetupActivity + "] for " + si.name);
}
- if (inputType == TYPE_TUNER && TextUtils.isEmpty(info.mSetupActivity)) {
+ if (inputType == TYPE_TUNER && TextUtils.isEmpty(mSetupActivity)) {
throw new XmlPullParserException("Setup activity not found in " + si.name);
}
- info.mSettingsActivity = sa.getString(
+ mSettingsActivity = sa.getString(
com.android.internal.R.styleable.TvInputService_settingsActivity);
if (DEBUG) {
- Log.d(TAG, "Settings activity loaded. [" + info.mSettingsActivity + "] for "
+ Log.d(TAG, "Settings activity loaded. [" + mSettingsActivity + "] for "
+ si.name);
}
- info.mCanRecord = sa.getBoolean(
- com.android.internal.R.styleable.TvInputService_canRecord, false);
- info.mTunerCount = sa.getInt(
- com.android.internal.R.styleable.TvInputService_tunerCount,
- info.mTunerCount);
-
+ if (mCanRecord == null) {
+ mCanRecord = sa.getBoolean(
+ com.android.internal.R.styleable.TvInputService_canRecord, false);
+ }
+ if (mTunerCount == null && inputType == TYPE_TUNER) {
+ mTunerCount = sa.getInt(
+ com.android.internal.R.styleable.TvInputService_tunerCount, 1);
+ }
sa.recycle();
} catch (NameNotFoundException e) {
throw new XmlPullParserException("Unable to create context for: " + si.packageName);
}
- return info;
}
}