Loading api/system-current.txt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -24645,6 +24645,7 @@ package android.media.tv { method public boolean isPassthroughInput(); method public boolean isPassthroughInput(); method public java.lang.CharSequence loadCustomLabel(android.content.Context); 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); method public android.graphics.drawable.Drawable loadIcon(android.content.Context, int); method public java.lang.CharSequence loadLabel(android.content.Context); method public java.lang.CharSequence loadLabel(android.content.Context); method public void writeToParcel(android.os.Parcel, int); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR; field public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR; Loading @@ -24667,6 +24668,7 @@ package android.media.tv { method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean); 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 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); 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 setLabel(int); method public android.media.tv.TvInputInfo.Builder setParentId(java.lang.String); method public android.media.tv.TvInputInfo.Builder setParentId(java.lang.String); method public android.media.tv.TvInputInfo.Builder setTunerCount(int); method public android.media.tv.TvInputInfo.Builder setTunerCount(int); media/java/android/media/tv/TvInputInfo.java +151 −80 Original line number Original line Diff line number Diff line Loading @@ -111,26 +111,32 @@ public final class TvInputInfo implements Parcelable { public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; private final ResolveInfo mService; private final ResolveInfo mService; private final String mId; private final String mId; private final String mParentId; private final int mType; private final int mType; private final boolean mIsHardwareInput; 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; // TODO: Remove mLabel and mIconUri when createTvInputInfo() is removed. private int mLabelResId; // TODO: Remove when createTvInputInfo() is removed. private String mLabel; private String mLabel; private Icon mIcon; // TODO: Remove when createTvInputInfo() is removed. private Uri mIconUri; 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, * Create a new instance of the TvInputInfo class, instantiating it from the given Context, Loading Loading @@ -240,28 +246,27 @@ public final class TvInputInfo implements Parcelable { .build(); .build(); } } /** private TvInputInfo(ResolveInfo service, String id, int type, boolean isHardwareInput, * Constructor. int labelResId, Icon icon, Icon iconStandby, Icon iconDisconnected, * String setupActivity, String settingsActivity, boolean canRecord, int tunerCount, * @param service The ResolveInfo returned from the package manager about this TV input service. HdmiDeviceInfo hdmiDeviceInfo, boolean isConnectedToHdmiSwitch, String parentId, * @param id ID of this TV input. Should be generated via generateInputId*(). Bundle extras) { * @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) { mService = service; mService = service; mId = id; mId = id; mParentId = parentId; mType = type; mType = type; mIsHardwareInput = isHardwareInput; mIsHardwareInput = isHardwareInput; mLabelResId = labelResId; mIcon = icon; mIconStandby = iconStandby; mIconDisconnected = iconDisconnected; mSetupActivity = setupActivity; mSettingsActivity = settingsActivity; mCanRecord = canRecord; mTunerCount = tunerCount; mHdmiDeviceInfo = hdmiDeviceInfo; mIsConnectedToHdmiSwitch = isConnectedToHdmiSwitch; mIsConnectedToHdmiSwitch = isConnectedToHdmiSwitch; mParentId = parentId; mExtras = extras; mExtras = extras; mTunerCount = type == TYPE_TUNER ? 1 : 0; } } /** /** Loading Loading @@ -475,6 +480,36 @@ public final class TvInputInfo implements Parcelable { return loadServiceIcon(context); 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 @Override public int describeContents() { public int describeContents() { return 0; return 0; Loading @@ -496,21 +531,23 @@ public final class TvInputInfo implements Parcelable { } } TvInputInfo obj = (TvInputInfo) o; TvInputInfo obj = (TvInputInfo) o; return TextUtils.equals(mId, obj.mId) return Objects.equals(mService, obj.mService) && TextUtils.equals(mParentId, obj.mParentId) && TextUtils.equals(mId, obj.mId) && Objects.equals(mService, obj.mService) && TextUtils.equals(mSetupActivity, obj.mSetupActivity) && TextUtils.equals(mSettingsActivity, obj.mSettingsActivity) && mType == obj.mType && mType == obj.mType && mTunerCount == obj.mTunerCount && mCanRecord == obj.mCanRecord && mIsHardwareInput == obj.mIsHardwareInput && mIsHardwareInput == obj.mIsHardwareInput && Objects.equals(mHdmiDeviceInfo, obj.mHdmiDeviceInfo) && TextUtils.equals(mLabel, obj.mLabel) && Objects.equals(mIcon, obj.mIcon) && Objects.equals(mIconUri, obj.mIconUri) && Objects.equals(mIconUri, obj.mIconUri) && mLabelResId == obj.mLabelResId && 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 && mIsConnectedToHdmiSwitch == obj.mIsConnectedToHdmiSwitch && TextUtils.equals(mParentId, obj.mParentId) && Objects.equals(mExtras, obj.mExtras); && Objects.equals(mExtras, obj.mExtras); } } Loading @@ -529,21 +566,23 @@ public final class TvInputInfo implements Parcelable { */ */ @Override @Override public void writeToParcel(@NonNull Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(mId); dest.writeString(mParentId); mService.writeToParcel(dest, flags); mService.writeToParcel(dest, flags); dest.writeString(mSetupActivity); dest.writeString(mId); dest.writeString(mSettingsActivity); dest.writeInt(mType); dest.writeInt(mType); dest.writeInt(mTunerCount); dest.writeByte(mCanRecord ? (byte) 1 : 0); dest.writeByte(mIsHardwareInput ? (byte) 1 : 0); dest.writeByte(mIsHardwareInput ? (byte) 1 : 0); dest.writeParcelable(mHdmiDeviceInfo, flags); dest.writeString(mLabel); dest.writeParcelable(mIcon, flags); dest.writeParcelable(mIconUri, flags); dest.writeParcelable(mIconUri, flags); dest.writeInt(mLabelResId); 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.writeByte(mIsConnectedToHdmiSwitch ? (byte) 1 : 0); dest.writeString(mParentId); dest.writeBundle(mExtras); dest.writeBundle(mExtras); } } Loading @@ -569,21 +608,23 @@ public final class TvInputInfo implements Parcelable { }; }; private TvInputInfo(Parcel in) { private TvInputInfo(Parcel in) { mId = in.readString(); mParentId = in.readString(); mService = ResolveInfo.CREATOR.createFromParcel(in); mService = ResolveInfo.CREATOR.createFromParcel(in); mSetupActivity = in.readString(); mId = in.readString(); mSettingsActivity = in.readString(); mType = in.readInt(); mType = in.readInt(); mTunerCount = in.readInt(); mCanRecord = in.readByte() == 1; mIsHardwareInput = in.readByte() == 1; mIsHardwareInput = in.readByte() == 1; mHdmiDeviceInfo = in.readParcelable(null); mLabel = in.readString(); mIcon = in.readParcelable(null); mIconUri = in.readParcelable(null); mIconUri = in.readParcelable(null); mLabelResId = in.readInt(); 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; mIsConnectedToHdmiSwitch = in.readByte() == 1; mParentId = in.readString(); mExtras = in.readBundle(); mExtras = in.readBundle(); } } Loading Loading @@ -619,13 +660,17 @@ public final class TvInputInfo implements Parcelable { private final Context mContext; private final Context mContext; private final ResolveInfo mResolveInfo; private final ResolveInfo mResolveInfo; private Icon mIcon; private int mLabelResId; private int mLabelResId; private int mTunerCount = 1; private Icon mIcon; private boolean mCanRecord; 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 HdmiDeviceInfo mHdmiDeviceInfo; private String mParentId; private String mParentId; private TvInputHardwareInfo mTvInputHardwareInfo; private Bundle mExtras; private Bundle mExtras; /** /** Loading Loading @@ -672,6 +717,31 @@ public final class TvInputInfo implements Parcelable { return this; return this; } } /** * 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. * Sets the label. * * Loading Loading @@ -796,10 +866,11 @@ public final class TvInputInfo implements Parcelable { id = generateInputId(componentName); id = generateInputId(componentName); type = TYPE_TUNER; type = TYPE_TUNER; } } parseServiceMetadata(type); TvInputInfo info = new TvInputInfo(mResolveInfo, id, mParentId, type, isHardwareInput, return new TvInputInfo(mResolveInfo, id, type, isHardwareInput, mLabelResId, mIcon, isConnectedToHdmiSwitch, mExtras); mIconStandby, mIconDisconnected, mSetupActivity, mSettingsActivity, return parseServiceMetadata(type, info); mCanRecord == null ? false : mCanRecord, mTunerCount == null ? 0 : mTunerCount, mHdmiDeviceInfo, isConnectedToHdmiSwitch, mParentId, mExtras); } } private static String generateInputId(ComponentName name) { private static String generateInputId(ComponentName name) { Loading @@ -821,7 +892,7 @@ public final class TvInputInfo implements Parcelable { + tvInputHardwareInfo.getDeviceId(); + tvInputHardwareInfo.getDeviceId(); } } private TvInputInfo parseServiceMetadata(int inputType, TvInputInfo info) private void parseServiceMetadata(int inputType) throws XmlPullParserException, IOException { throws XmlPullParserException, IOException { ServiceInfo si = mResolveInfo.serviceInfo; ServiceInfo si = mResolveInfo.serviceInfo; PackageManager pm = mContext.getPackageManager(); PackageManager pm = mContext.getPackageManager(); Loading @@ -848,32 +919,32 @@ public final class TvInputInfo implements Parcelable { TypedArray sa = res.obtainAttributes(attrs, TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.TvInputService); com.android.internal.R.styleable.TvInputService); info.mSetupActivity = sa.getString( mSetupActivity = sa.getString( com.android.internal.R.styleable.TvInputService_setupActivity); com.android.internal.R.styleable.TvInputService_setupActivity); if (DEBUG) { if (DEBUG) { Log.d(TAG, "Setup activity loaded. [" + info.mSetupActivity + "] for " Log.d(TAG, "Setup activity loaded. [" + mSetupActivity + "] for " + si.name); + 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); throw new XmlPullParserException("Setup activity not found in " + si.name); } } info.mSettingsActivity = sa.getString( mSettingsActivity = sa.getString( com.android.internal.R.styleable.TvInputService_settingsActivity); com.android.internal.R.styleable.TvInputService_settingsActivity); if (DEBUG) { if (DEBUG) { Log.d(TAG, "Settings activity loaded. [" + info.mSettingsActivity + "] for " Log.d(TAG, "Settings activity loaded. [" + mSettingsActivity + "] for " + si.name); + si.name); } } info.mCanRecord = sa.getBoolean( if (mCanRecord == null) { mCanRecord = sa.getBoolean( com.android.internal.R.styleable.TvInputService_canRecord, false); com.android.internal.R.styleable.TvInputService_canRecord, false); info.mTunerCount = sa.getInt( } com.android.internal.R.styleable.TvInputService_tunerCount, if (mTunerCount == null && inputType == TYPE_TUNER) { info.mTunerCount); mTunerCount = sa.getInt( com.android.internal.R.styleable.TvInputService_tunerCount, 1); } sa.recycle(); sa.recycle(); } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { throw new XmlPullParserException("Unable to create context for: " + si.packageName); throw new XmlPullParserException("Unable to create context for: " + si.packageName); } } return info; } } } } Loading Loading
api/system-current.txt +2 −0 Original line number Original line Diff line number Diff line Loading @@ -24645,6 +24645,7 @@ package android.media.tv { method public boolean isPassthroughInput(); method public boolean isPassthroughInput(); method public java.lang.CharSequence loadCustomLabel(android.content.Context); 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); method public android.graphics.drawable.Drawable loadIcon(android.content.Context, int); method public java.lang.CharSequence loadLabel(android.content.Context); method public java.lang.CharSequence loadLabel(android.content.Context); method public void writeToParcel(android.os.Parcel, int); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR; field public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR; Loading @@ -24667,6 +24668,7 @@ package android.media.tv { method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean); 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 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); 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 setLabel(int); method public android.media.tv.TvInputInfo.Builder setParentId(java.lang.String); method public android.media.tv.TvInputInfo.Builder setParentId(java.lang.String); method public android.media.tv.TvInputInfo.Builder setTunerCount(int); method public android.media.tv.TvInputInfo.Builder setTunerCount(int);
media/java/android/media/tv/TvInputInfo.java +151 −80 Original line number Original line Diff line number Diff line Loading @@ -111,26 +111,32 @@ public final class TvInputInfo implements Parcelable { public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID"; private final ResolveInfo mService; private final ResolveInfo mService; private final String mId; private final String mId; private final String mParentId; private final int mType; private final int mType; private final boolean mIsHardwareInput; 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; // TODO: Remove mLabel and mIconUri when createTvInputInfo() is removed. private int mLabelResId; // TODO: Remove when createTvInputInfo() is removed. private String mLabel; private String mLabel; private Icon mIcon; // TODO: Remove when createTvInputInfo() is removed. private Uri mIconUri; 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, * Create a new instance of the TvInputInfo class, instantiating it from the given Context, Loading Loading @@ -240,28 +246,27 @@ public final class TvInputInfo implements Parcelable { .build(); .build(); } } /** private TvInputInfo(ResolveInfo service, String id, int type, boolean isHardwareInput, * Constructor. int labelResId, Icon icon, Icon iconStandby, Icon iconDisconnected, * String setupActivity, String settingsActivity, boolean canRecord, int tunerCount, * @param service The ResolveInfo returned from the package manager about this TV input service. HdmiDeviceInfo hdmiDeviceInfo, boolean isConnectedToHdmiSwitch, String parentId, * @param id ID of this TV input. Should be generated via generateInputId*(). Bundle extras) { * @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) { mService = service; mService = service; mId = id; mId = id; mParentId = parentId; mType = type; mType = type; mIsHardwareInput = isHardwareInput; mIsHardwareInput = isHardwareInput; mLabelResId = labelResId; mIcon = icon; mIconStandby = iconStandby; mIconDisconnected = iconDisconnected; mSetupActivity = setupActivity; mSettingsActivity = settingsActivity; mCanRecord = canRecord; mTunerCount = tunerCount; mHdmiDeviceInfo = hdmiDeviceInfo; mIsConnectedToHdmiSwitch = isConnectedToHdmiSwitch; mIsConnectedToHdmiSwitch = isConnectedToHdmiSwitch; mParentId = parentId; mExtras = extras; mExtras = extras; mTunerCount = type == TYPE_TUNER ? 1 : 0; } } /** /** Loading Loading @@ -475,6 +480,36 @@ public final class TvInputInfo implements Parcelable { return loadServiceIcon(context); 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 @Override public int describeContents() { public int describeContents() { return 0; return 0; Loading @@ -496,21 +531,23 @@ public final class TvInputInfo implements Parcelable { } } TvInputInfo obj = (TvInputInfo) o; TvInputInfo obj = (TvInputInfo) o; return TextUtils.equals(mId, obj.mId) return Objects.equals(mService, obj.mService) && TextUtils.equals(mParentId, obj.mParentId) && TextUtils.equals(mId, obj.mId) && Objects.equals(mService, obj.mService) && TextUtils.equals(mSetupActivity, obj.mSetupActivity) && TextUtils.equals(mSettingsActivity, obj.mSettingsActivity) && mType == obj.mType && mType == obj.mType && mTunerCount == obj.mTunerCount && mCanRecord == obj.mCanRecord && mIsHardwareInput == obj.mIsHardwareInput && mIsHardwareInput == obj.mIsHardwareInput && Objects.equals(mHdmiDeviceInfo, obj.mHdmiDeviceInfo) && TextUtils.equals(mLabel, obj.mLabel) && Objects.equals(mIcon, obj.mIcon) && Objects.equals(mIconUri, obj.mIconUri) && Objects.equals(mIconUri, obj.mIconUri) && mLabelResId == obj.mLabelResId && 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 && mIsConnectedToHdmiSwitch == obj.mIsConnectedToHdmiSwitch && TextUtils.equals(mParentId, obj.mParentId) && Objects.equals(mExtras, obj.mExtras); && Objects.equals(mExtras, obj.mExtras); } } Loading @@ -529,21 +566,23 @@ public final class TvInputInfo implements Parcelable { */ */ @Override @Override public void writeToParcel(@NonNull Parcel dest, int flags) { public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(mId); dest.writeString(mParentId); mService.writeToParcel(dest, flags); mService.writeToParcel(dest, flags); dest.writeString(mSetupActivity); dest.writeString(mId); dest.writeString(mSettingsActivity); dest.writeInt(mType); dest.writeInt(mType); dest.writeInt(mTunerCount); dest.writeByte(mCanRecord ? (byte) 1 : 0); dest.writeByte(mIsHardwareInput ? (byte) 1 : 0); dest.writeByte(mIsHardwareInput ? (byte) 1 : 0); dest.writeParcelable(mHdmiDeviceInfo, flags); dest.writeString(mLabel); dest.writeParcelable(mIcon, flags); dest.writeParcelable(mIconUri, flags); dest.writeParcelable(mIconUri, flags); dest.writeInt(mLabelResId); 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.writeByte(mIsConnectedToHdmiSwitch ? (byte) 1 : 0); dest.writeString(mParentId); dest.writeBundle(mExtras); dest.writeBundle(mExtras); } } Loading @@ -569,21 +608,23 @@ public final class TvInputInfo implements Parcelable { }; }; private TvInputInfo(Parcel in) { private TvInputInfo(Parcel in) { mId = in.readString(); mParentId = in.readString(); mService = ResolveInfo.CREATOR.createFromParcel(in); mService = ResolveInfo.CREATOR.createFromParcel(in); mSetupActivity = in.readString(); mId = in.readString(); mSettingsActivity = in.readString(); mType = in.readInt(); mType = in.readInt(); mTunerCount = in.readInt(); mCanRecord = in.readByte() == 1; mIsHardwareInput = in.readByte() == 1; mIsHardwareInput = in.readByte() == 1; mHdmiDeviceInfo = in.readParcelable(null); mLabel = in.readString(); mIcon = in.readParcelable(null); mIconUri = in.readParcelable(null); mIconUri = in.readParcelable(null); mLabelResId = in.readInt(); 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; mIsConnectedToHdmiSwitch = in.readByte() == 1; mParentId = in.readString(); mExtras = in.readBundle(); mExtras = in.readBundle(); } } Loading Loading @@ -619,13 +660,17 @@ public final class TvInputInfo implements Parcelable { private final Context mContext; private final Context mContext; private final ResolveInfo mResolveInfo; private final ResolveInfo mResolveInfo; private Icon mIcon; private int mLabelResId; private int mLabelResId; private int mTunerCount = 1; private Icon mIcon; private boolean mCanRecord; 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 HdmiDeviceInfo mHdmiDeviceInfo; private String mParentId; private String mParentId; private TvInputHardwareInfo mTvInputHardwareInfo; private Bundle mExtras; private Bundle mExtras; /** /** Loading Loading @@ -672,6 +717,31 @@ public final class TvInputInfo implements Parcelable { return this; return this; } } /** * 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. * Sets the label. * * Loading Loading @@ -796,10 +866,11 @@ public final class TvInputInfo implements Parcelable { id = generateInputId(componentName); id = generateInputId(componentName); type = TYPE_TUNER; type = TYPE_TUNER; } } parseServiceMetadata(type); TvInputInfo info = new TvInputInfo(mResolveInfo, id, mParentId, type, isHardwareInput, return new TvInputInfo(mResolveInfo, id, type, isHardwareInput, mLabelResId, mIcon, isConnectedToHdmiSwitch, mExtras); mIconStandby, mIconDisconnected, mSetupActivity, mSettingsActivity, return parseServiceMetadata(type, info); mCanRecord == null ? false : mCanRecord, mTunerCount == null ? 0 : mTunerCount, mHdmiDeviceInfo, isConnectedToHdmiSwitch, mParentId, mExtras); } } private static String generateInputId(ComponentName name) { private static String generateInputId(ComponentName name) { Loading @@ -821,7 +892,7 @@ public final class TvInputInfo implements Parcelable { + tvInputHardwareInfo.getDeviceId(); + tvInputHardwareInfo.getDeviceId(); } } private TvInputInfo parseServiceMetadata(int inputType, TvInputInfo info) private void parseServiceMetadata(int inputType) throws XmlPullParserException, IOException { throws XmlPullParserException, IOException { ServiceInfo si = mResolveInfo.serviceInfo; ServiceInfo si = mResolveInfo.serviceInfo; PackageManager pm = mContext.getPackageManager(); PackageManager pm = mContext.getPackageManager(); Loading @@ -848,32 +919,32 @@ public final class TvInputInfo implements Parcelable { TypedArray sa = res.obtainAttributes(attrs, TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.TvInputService); com.android.internal.R.styleable.TvInputService); info.mSetupActivity = sa.getString( mSetupActivity = sa.getString( com.android.internal.R.styleable.TvInputService_setupActivity); com.android.internal.R.styleable.TvInputService_setupActivity); if (DEBUG) { if (DEBUG) { Log.d(TAG, "Setup activity loaded. [" + info.mSetupActivity + "] for " Log.d(TAG, "Setup activity loaded. [" + mSetupActivity + "] for " + si.name); + 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); throw new XmlPullParserException("Setup activity not found in " + si.name); } } info.mSettingsActivity = sa.getString( mSettingsActivity = sa.getString( com.android.internal.R.styleable.TvInputService_settingsActivity); com.android.internal.R.styleable.TvInputService_settingsActivity); if (DEBUG) { if (DEBUG) { Log.d(TAG, "Settings activity loaded. [" + info.mSettingsActivity + "] for " Log.d(TAG, "Settings activity loaded. [" + mSettingsActivity + "] for " + si.name); + si.name); } } info.mCanRecord = sa.getBoolean( if (mCanRecord == null) { mCanRecord = sa.getBoolean( com.android.internal.R.styleable.TvInputService_canRecord, false); com.android.internal.R.styleable.TvInputService_canRecord, false); info.mTunerCount = sa.getInt( } com.android.internal.R.styleable.TvInputService_tunerCount, if (mTunerCount == null && inputType == TYPE_TUNER) { info.mTunerCount); mTunerCount = sa.getInt( com.android.internal.R.styleable.TvInputService_tunerCount, 1); } sa.recycle(); sa.recycle(); } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { throw new XmlPullParserException("Unable to create context for: " + si.packageName); throw new XmlPullParserException("Unable to create context for: " + si.packageName); } } return info; } } } } Loading