Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad48b309 authored by David Zhao's avatar David Zhao Committed by Android (Google) Code Review
Browse files

Merge "Add SignalingDataRequest-Info-Response" into main

parents 83f0f8c3 74509f89
Loading
Loading
Loading
Loading
+61 −0
Original line number Diff line number Diff line
@@ -26915,6 +26915,67 @@ package android.media.tv {
    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.SectionResponse> CREATOR;
  }
  @FlaggedApi("android.media.tv.flags.tiaf_v_apis") public final class SignalingDataInfo implements android.os.Parcelable {
    ctor public SignalingDataInfo(@NonNull String, @NonNull String, int, int);
    ctor public SignalingDataInfo(@NonNull String, @NonNull String, int, int, @NonNull String);
    method public int describeContents();
    method @NonNull public String getEncoding();
    method public int getGroup();
    method @NonNull public String getSignalingDataType();
    method @NonNull public String getTable();
    method public int getVersion();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final String CONTENT_ENCODING_BASE64 = "Base64";
    field public static final String CONTENT_ENCODING_UTF_8 = "UTF-8";
    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.SignalingDataInfo> CREATOR;
    field public static final int LLS_NO_GROUP_ID = -1; // 0xffffffff
  }
  @FlaggedApi("android.media.tv.flags.tiaf_v_apis") public final class SignalingDataRequest extends android.media.tv.BroadcastInfoRequest implements android.os.Parcelable {
    ctor public SignalingDataRequest(int, int, int, @NonNull java.util.List<java.lang.String>);
    method public int getGroup();
    method @NonNull public java.util.List<java.lang.String> getSignalingDataTypes();
    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.SignalingDataRequest> CREATOR;
    field public static final int SIGNALING_DATA_NO_GROUP_ID = -1; // 0xffffffff
    field public static final String SIGNALING_METADATA_AEAT = "AEAT";
    field public static final String SIGNALING_METADATA_AEI = "AEI";
    field public static final String SIGNALING_METADATA_APD = "APD";
    field public static final String SIGNALING_METADATA_ASD = "ASD";
    field public static final String SIGNALING_METADATA_ASPD = "ASPD";
    field public static final String SIGNALING_METADATA_CAD = "CAD";
    field public static final String SIGNALING_METADATA_CDT = "CDT";
    field public static final String SIGNALING_METADATA_CRIT = "CRIT";
    field public static final String SIGNALING_METADATA_DCIT = "DCIT";
    field public static final String SIGNALING_METADATA_DWD = "DWD";
    field public static final String SIGNALING_METADATA_EMSG = "EMSG";
    field public static final String SIGNALING_METADATA_EVTI = "EVTI";
    field public static final String SIGNALING_METADATA_HELD = "HELD";
    field public static final String SIGNALING_METADATA_IED = "IED";
    field public static final String SIGNALING_METADATA_MPD = "MPD";
    field public static final String SIGNALING_METADATA_MPIT = "MPIT";
    field public static final String SIGNALING_METADATA_MPT = "MPT";
    field public static final String SIGNALING_METADATA_OSN = "OSN";
    field public static final String SIGNALING_METADATA_PAT = "PAT";
    field public static final String SIGNALING_METADATA_RDT = "RDT";
    field public static final String SIGNALING_METADATA_RRT = "RRT";
    field public static final String SIGNALING_METADATA_RSAT = "RSAT";
    field public static final String SIGNALING_METADATA_SLT = "SLT";
    field public static final String SIGNALING_METADATA_SMT = "SMT";
    field public static final String SIGNALING_METADATA_SSD = "SSD";
    field public static final String SIGNALING_METADATA_STSID = "STSID";
    field public static final String SIGNALING_METADATA_STT = "STT";
    field public static final String SIGNALING_METADATA_USBD = "USBD";
    field public static final String SIGNALING_METADATA_USD = "USD";
    field public static final String SIGNALING_METADATA_VSPD = "VSPD";
  }
  @FlaggedApi("android.media.tv.flags.tiaf_v_apis") public final class SignalingDataResponse extends android.media.tv.BroadcastInfoResponse implements android.os.Parcelable {
    ctor public SignalingDataResponse(int, int, int, @NonNull java.util.List<java.lang.String>, @NonNull java.util.List<android.media.tv.SignalingDataInfo>);
    method @NonNull public java.util.List<android.media.tv.SignalingDataInfo> getSignalingDataInfoList();
    method @NonNull public java.util.List<java.lang.String> getSignalingDataTypes();
    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.SignalingDataResponse> CREATOR;
  }
  public final class StreamEventRequest extends android.media.tv.BroadcastInfoRequest implements android.os.Parcelable {
    ctor public StreamEventRequest(int, int, @NonNull android.net.Uri, @NonNull String);
    method @NonNull public String getEventName();
+2 −0
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ public abstract class BroadcastInfoRequest implements Parcelable {
                            return CommandRequest.createFromParcelBody(source);
                        case TvInputManager.BROADCAST_INFO_TYPE_TIMELINE:
                            return TimelineRequest.createFromParcelBody(source);
                        case TvInputManager.BROADCAST_INFO_TYPE_SIGNALING_DATA:
                            return SignalingDataRequest.createFromParcelBody(source);
                        default:
                            throw new IllegalStateException(
                                    "Unexpected broadcast info request type (value "
+2 −0
Original line number Diff line number Diff line
@@ -71,6 +71,8 @@ public abstract class BroadcastInfoResponse implements Parcelable {
                            return CommandResponse.createFromParcelBody(source);
                        case TvInputManager.BROADCAST_INFO_TYPE_TIMELINE:
                            return TimelineResponse.createFromParcelBody(source);
                        case TvInputManager.BROADCAST_INFO_TYPE_SIGNALING_DATA:
                            return SignalingDataResponse.createFromParcelBody(source);
                        default:
                            throw new IllegalStateException(
                                    "Unexpected broadcast info response type (value "
+106 −26
Original line number Diff line number Diff line
@@ -16,11 +16,19 @@

package android.media.tv;

import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.media.tv.flags.Flags;
import android.os.Parcelable;

/** @hide */
public class SignalingDataInfo implements Parcelable {
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * Describes a metadata object of a {@link SignalingDataResponse}.
 */
@FlaggedApi(Flags.FLAG_TIAF_V_APIS)
public final class SignalingDataInfo implements Parcelable {
    public static final @NonNull Parcelable.Creator<SignalingDataInfo> CREATOR =
            new Parcelable.Creator<SignalingDataInfo>() {
                @Override
@@ -34,59 +42,131 @@ public class SignalingDataInfo implements Parcelable {
                }
            };

    private int mTableId;
    private @NonNull String mTable;
    private int mMetadataType;
    private int mVersion;
    private int mGroup;
    private @NonNull String mEncoding;
    private final @NonNull String mTable;
    private final @NonNull @SignalingDataRequest.SignalingMetadata String mSignalingDataType;
    private final int mVersion;
    private final int mGroup;
    private final @NonNull String mEncoding;

    /**
     * This value for {@link #getGroup()} denotes that there's no group associated with this
     * metadata.
     */
    public static final int LLS_NO_GROUP_ID = -1;

    /**
     * The encoding of the content is UTF-8. This is the default value.
     */
    public static final String CONTENT_ENCODING_UTF_8 = "UTF-8";

    /**
     *  A/344:2023-5 9.2.10 compliant string for when the encoding of the content is Base64.
     */
    public static final String CONTENT_ENCODING_BASE64 = "Base64";

    /**
     * @hide
     */
    @android.annotation.StringDef(prefix = "CONTENT_ENCODING_", value = {
            CONTENT_ENCODING_UTF_8,
            CONTENT_ENCODING_BASE64
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ContentEncoding {}

    public SignalingDataInfo(
            @NonNull String table,
            @NonNull String signalingDataType,
            int version,
            int group) {
        this.mTable = table;
        com.android.internal.util.AnnotationValidations.validate(NonNull.class, null, mTable);
        this.mSignalingDataType = signalingDataType;
        this.mVersion = version;
        this.mGroup = group;
        this.mEncoding = CONTENT_ENCODING_UTF_8;
    }

    public SignalingDataInfo(
            int tableId,
            @NonNull String table,
            int metadataType,
            @NonNull String signalingDataType,
            int version,
            int group,
            @NonNull String encoding) {
        this.mTableId = tableId;
        this.mTable = table;
        com.android.internal.util.AnnotationValidations.validate(NonNull.class, null, mTable);
        this.mMetadataType = metadataType;
        this.mSignalingDataType = signalingDataType;
        this.mVersion = version;
        this.mGroup = group;
        this.mEncoding = encoding;
        com.android.internal.util.AnnotationValidations.validate(NonNull.class, null, mEncoding);
    }

    public int getTableId() {
        return mTableId;
    }

    public @NonNull String getTable() {
    /**
     * The signaling table data, represented as a XML, JSON or BASE64 string.
     *
     * <p> For more details on how this data is formatted refer to the ATSC standard
     * A/344:2023-5 9.2.10 - Query Signaling Data API.
     *
     * @return The signaling table data.
     */
    @NonNull
    public String getTable() {
        return mTable;
    }

    public int getMetadataType() {
        return mMetadataType;
    /**
     * Gets the signaling data type contained in this metadata object. This may be either a
     * LLS Metadata Object or a SLS Metadata Object name.
     *
     * <p>For more details on each type of metadata that can be requested, refer to the ATSC
     * standard A/344:2023-5 9.2.10 - Query Signaling Data API.
     *
     * @return the type of metadata in this metadata object
     */
    @NonNull
    public @SignalingDataRequest.SignalingMetadata String getSignalingDataType() {
        return mSignalingDataType;
    }

    /**
     * Gets the version of the signalling element. For LLS, this should be the
     * LLS_table_version. For SLS Metadata Objects, this should be metadataEnvelope@version.
     *
     * For more details on where this version comes from, refer to the ATSC 3.0
     * standard A/344:2023-5 9.2.10 - Query Signaling Data API.
     *
     * @return The version of the signalling element.
     */
    public int getVersion() {
        return mVersion;
    }

    /**
     * Gets the LLS group ID. Required for LLS Tables. For SLS Metadata Objects, this should be
     * {@link #LLS_NO_GROUP_ID}.
     *
     * @return the LLS group ID.
     */
    public int getGroup() {
        return mGroup;
    }

    public @NonNull String getEncoding() {
    /**
     * The content encoding of the data. This value defaults to {@link #CONTENT_ENCODING_UTF_8}.
     *
     * <p> Can be either {@link #CONTENT_ENCODING_BASE64} or {@link #CONTENT_ENCODING_UTF_8}.
     * @return The content encoding of the data.
     */
    @NonNull
    public @ContentEncoding String getEncoding() {
        return mEncoding;
    }

    @Override
    public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
        dest.writeInt(mTableId);
        dest.writeString(mTable);
        dest.writeInt(mMetadataType);
        dest.writeString(mSignalingDataType);
        dest.writeInt(mVersion);
        dest.writeInt(mGroup);
        dest.writeString(mEncoding);
@@ -98,17 +178,17 @@ public class SignalingDataInfo implements Parcelable {
    }

    SignalingDataInfo(@NonNull android.os.Parcel in) {
        int tableId = in.readInt();
        String table = in.readString();
        int metadataType = in.readInt();
        String metadataType = in.readString();
        int version = in.readInt();
        int group = in.readInt();
        String encoding = in.readString();

        this.mTableId = tableId;
        this.mTable = table;
        com.android.internal.util.AnnotationValidations.validate(NonNull.class, null, mTable);
        this.mMetadataType = metadataType;
        this.mSignalingDataType = metadataType;
        com.android.internal.util.AnnotationValidations
                .validate(NonNull.class, null, mSignalingDataType);
        this.mVersion = version;
        this.mGroup = group;
        this.mEncoding = encoding;
+161 −59
Original line number Diff line number Diff line
@@ -16,9 +16,16 @@

package android.media.tv;

import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.media.tv.flags.Flags;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;

/**
 * Request to retrieve the Low-level Signalling Tables (LLS) and Service-layer Signalling (SLS)
 * metadata.
@@ -26,9 +33,10 @@ import android.os.Parcelable;
 * <p> For more details on each type of metadata that can be requested, refer to the ATSC standard
 * A/344:2023-5 9.2.10 - Query Signaling Data API.
 *
 * @hide
 * @see SignalingDataResponse
 */
public class SignalingDataRequest extends BroadcastInfoRequest implements Parcelable {
@FlaggedApi(Flags.FLAG_TIAF_V_APIS)
public final class SignalingDataRequest extends BroadcastInfoRequest implements Parcelable {
    private static final @TvInputManager.BroadcastInfoType int REQUEST_TYPE =
            TvInputManager.BROADCAST_INFO_TYPE_SIGNALING_DATA;

@@ -45,126 +53,220 @@ public class SignalingDataRequest extends BroadcastInfoRequest implements Parcel
                }
            };

    /** SLS Metadata: All metadata objects for the requested service(s) */
    public static final int SLS_METADATA_ALL = 0x7FFFFFF;

    /** SLS Metadata: APD for the requested service(s) */
    public static final int SLS_METADATA_APD = 1;
    public static final String SIGNALING_METADATA_APD = "APD";

    /** SLS Metadata: USBD for the requested service(s) */
    public static final int SLS_METADATA_USBD = 1 << 1;
    public static final String SIGNALING_METADATA_USBD = "USBD";

    /** SLS Metadata: S-TSID for the requested service(s) */
    public static final int SLS_METADATA_STSID = 1 << 2;
    public static final String SIGNALING_METADATA_STSID = "STSID";

    /** SLS Metadata: DASH MPD for the requested service(s) */
    public static final int SLS_METADATA_MPD = 1 << 3;
    public static final String SIGNALING_METADATA_MPD = "MPD";

    /** SLS Metadata: User Service Description for MMTP */
    public static final int SLS_METADATA_USD = 1 << 4;
    public static final String SIGNALING_METADATA_USD = "USD";

    /** SLS Metadata: MMT Package Access Table for the requested service(s) */
    public static final int SLS_METADATA_PAT = 1 << 5;
    public static final String SIGNALING_METADATA_PAT  = "PAT";

    /** SLS Metadata: MMT Package Table for the requested service(s) */
    public static final int SLS_METADATA_MPT = 1 << 6;
    public static final String SIGNALING_METADATA_MPT = "MPT";

    /** SLS Metadata: MMT Media Presentation Information Table for the requested service(s) */
    public static final int SLS_METADATA_MPIT = 1 << 7;
    public static final String SIGNALING_METADATA_MPIT = "MPIT";

    /** SLS Metadata: MMT Clock Relation Information for the requested service(s) */
    public static final int SLS_METADATA_CRIT = 1 << 8;
    public static final String SIGNALING_METADATA_CRIT = "CRIT";

    /** SLS Metadata: MMT Device Capabilities Information Table for the requested service(s) */
    public static final int SLS_METADATA_DCIT = 1 << 9;
    public static final String SIGNALING_METADATA_DCIT = "DCIT";

    /** SLS Metadata: HTML Entry Pages Location Description for the requested service(s) */
    public static final int SLS_METADATA_HELD = 1 << 10;
    public static final String SIGNALING_METADATA_HELD = "HELD";

    /** SLS Metadata: Distribution Window Desciription for the requested service(s) */
    public static final int SLS_METADATA_DWD = 1 << 11;
    public static final String SIGNALING_METADATA_DWD = "DWD";

    /** SLS Metadata: MMT Application Event Information for the requested service(s) */
    public static final int SLS_METADATA_AEI = 1 << 12;
    public static final String SIGNALING_METADATA_AEI = "AEI";

    /** SLS Metadata: Video Stream Properties Descriptor */
    public static final int SLS_METADATA_VSPD = 1 << 13;
    public static final String SIGNALING_METADATA_VSPD = "VSPD";

    /** SLS Metadata: ATSC Staggercast Descriptor */
    public static final int SLS_METADATA_ASD = 1 << 14;
    public static final String SIGNALING_METADATA_ASD = "ASD";

    /** SLS Metadata: Inband Event Descriptor */
    public static final int SLS_METADATA_IED = 1 << 15;
    public static final String SIGNALING_METADATA_IED = "IED";

    /** SLS Metadata: Caption Asset Descriptor */
    public static final int SLS_METADATA_CAD = 1 << 16;
    public static final String SIGNALING_METADATA_CAD = "CAD";

    /** SLS Metadata: Audio Stream Properties Descriptor */
    public static final int SLS_METADATA_ASPD = 1 << 17;
    public static final String SIGNALING_METADATA_ASPD = "ASPD";

    /** SLS Metadata: Security Properties Descriptor */
    public static final int SLS_METADATA_SSD = 1 << 18;
    public static final String SIGNALING_METADATA_SSD = "SSD";

    /** SLS Metadata: ROUTE/DASH Application Dynamic Event for the requested service(s) */
    public static final int SLS_METADATA_EMSG = 1 << 19;
    public static final String SIGNALING_METADATA_EMSG = "EMSG";

    /** SLS Metadata: MMT Application Dynamic Event for the requested service(s) */
    public static final int SLS_METADATA_EVTI = 1 << 20;
    public static final String SIGNALING_METADATA_EVTI = "EVTI";

    /** SLS Metadata: Regional Service Availability Table for the requested service(s) */
    public static final String SIGNALING_METADATA_RSAT = "RSAT";

    /** SLS Metadata: Recovery Data Table for the requested service(s) */
    public static final String SIGNALING_METADATA_RDT = "RDT";

    /**
     * Service List Table for the requested service(s), LLS_table_id = 1.
     */
    public static final String SIGNALING_METADATA_SLT = "SLT";

    /**
     * Region Rating Table for the requested service(s), LLS_table_id = 2.
     */
    public static final String SIGNALING_METADATA_RRT = "RRT";

    /**
     * System Time Table for the requested service(s), LLS_table_id = 3.
     */
    public static final String SIGNALING_METADATA_STT = "STT";

    /**
     * Advance Emergency Information Table for the requested service(s), LLS_table_id = 4.
     */
    public static final String SIGNALING_METADATA_AEAT = "AEAT";

    /**
     * Onscreen Message Notifications for the requested service(s), LLS_table_id = 5.
     */
    public static final String SIGNALING_METADATA_OSN = "OSN";

    /** Regional Service Availability Table for the requested service(s) */
    public static final int SLS_METADATA_RSAT = 1 << 21;
    /**
     * Signed Multitable for the requested service(s), LLS_table_id = 0xFE (254).
     */
    public static final String SIGNALING_METADATA_SMT = "SMT";

    /**
     * CertificateData Tablefor the requested service(s), LLS_table_id = 6.
     */
    public static final String SIGNALING_METADATA_CDT = "CDT";

    private final int mGroup;
    private @NonNull final int[] mLlsTableIds;
    private final int mSlsMetadataTypes;
    private final @NonNull List<String> mSignalingDataTypes;

    /**
     * Denotes that theres no group associated with this request.
     */
    public static final int SIGNALING_DATA_NO_GROUP_ID = -1;

    SignalingDataRequest(
            int requestId,
            int option,
    /**
     * @hide
     */
    @android.annotation.StringDef(prefix = "SIGNALING_METADATA_", value = {
        SIGNALING_METADATA_APD,
        SIGNALING_METADATA_USBD,
        SIGNALING_METADATA_STSID,
        SIGNALING_METADATA_MPD,
        SIGNALING_METADATA_USD,
        SIGNALING_METADATA_PAT,
        SIGNALING_METADATA_MPT,
        SIGNALING_METADATA_MPIT,
        SIGNALING_METADATA_CRIT,
        SIGNALING_METADATA_DCIT,
        SIGNALING_METADATA_HELD,
        SIGNALING_METADATA_DWD,
        SIGNALING_METADATA_AEI,
        SIGNALING_METADATA_VSPD,
        SIGNALING_METADATA_ASD,
        SIGNALING_METADATA_IED,
        SIGNALING_METADATA_CAD,
        SIGNALING_METADATA_ASPD,
        SIGNALING_METADATA_SSD,
        SIGNALING_METADATA_EMSG,
        SIGNALING_METADATA_EVTI,
        SIGNALING_METADATA_RSAT,
        SIGNALING_METADATA_RDT,
        SIGNALING_METADATA_SLT,
        SIGNALING_METADATA_RRT,
        SIGNALING_METADATA_STT,
        SIGNALING_METADATA_AEAT,
        SIGNALING_METADATA_OSN,
        SIGNALING_METADATA_SMT,
        SIGNALING_METADATA_CDT
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface SignalingMetadata {}

    public SignalingDataRequest(int requestId, @RequestOption int option,
            int group,
            @NonNull int[] llsTableIds,
            int slsMetadataTypes) {
            @NonNull List<String> signalingDataTypes) {
        super(REQUEST_TYPE, requestId, option);
        mGroup = group;
        mLlsTableIds = llsTableIds;
        mSlsMetadataTypes = slsMetadataTypes;
        this.mGroup = group;
        this.mSignalingDataTypes = signalingDataTypes;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mSignalingDataTypes);
    }

    SignalingDataRequest(@NonNull android.os.Parcel in) {
        super(REQUEST_TYPE, in);

        int group = in.readInt();
        int[] llsTableIds = in.createIntArray();
        int slsMetadataTypes = in.readInt();

        this.mGroup = group;
        this.mLlsTableIds = llsTableIds;
        com.android.internal.util.AnnotationValidations.validate(NonNull.class, null, mLlsTableIds);
        this.mSlsMetadataTypes = slsMetadataTypes;
    static SignalingDataRequest createFromParcelBody(Parcel in) {
        return new SignalingDataRequest(in);
    }

    /**
     * Gets the group with which any signaling returned will be associated.
     *
     * <p> Requested metadata objects will only be returned if they are part of the group specified.
     *
     * <p> If no group is specified ({@link #SIGNALING_DATA_NO_GROUP_ID}),
     * the receiver will send all the metadata objects discovered.
     *
     * @return The group ID which any signaling returned will be associated.
     */
    public int getGroup() {
        return mGroup;
    }

    public @NonNull int[] getLlsTableIds() {
        return mLlsTableIds;
    /**
     * Gets the signaling data types for which data should be retrieved.
     *
     * <p> For more details on each type of metadata that can be requested, refer to the ATSC
     * standard A/344:2023-5 9.2.10 - Query Signaling Data API.
     *
     * @return The signaling data types for which data should be retrieved.
     */
    public @NonNull List<String> getSignalingDataTypes() {
        return mSignalingDataTypes;
    }

    public int getSlsMetadataTypes() {
        return mSlsMetadataTypes;
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeInt(mGroup);
        dest.writeIntArray(mLlsTableIds);
        dest.writeInt(mSlsMetadataTypes);
        dest.writeStringList(mSignalingDataTypes);
    }

    @Override
    public int describeContents() {
        return 0;
    SignalingDataRequest(@NonNull android.os.Parcel in) {
        super(REQUEST_TYPE, in);

        int group = in.readInt();
        List<String> signalingDataTypes = new java.util.ArrayList<>();
        in.readStringList(signalingDataTypes);

        this.mGroup = group;
        this.mSignalingDataTypes = signalingDataTypes;
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mSignalingDataTypes);
    }

}
Loading