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

Commit 5e999775 authored by David Zhao's avatar David Zhao
Browse files

Add SetRecordingInfo API

Test: atest
Bug: 261648703
Change-Id: Ie9365a8569e944a982872e87bc090d01f3b43ec8
parent d4417b97
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media.tv;

parcelable TvRecordingInfo;
 No newline at end of file
+219 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media.tv;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
/**
    @hide
 */
public final class TvRecordingInfo implements Parcelable {
    /*
     *   Indicates that getTvRecordingInfoList should return scheduled recordings.
     */
    public static final int RECORDING_SCHEDULED = 1;
    /*
     *   Indicates that getTvRecordingInfoList should return in-progress recordings.
     */
    public static final int RECORDING_IN_PROGRESS = 2;
    /*
     *   Indicates that getTvRecordingInfoList should return all recordings.
     */
    public static final int RECORDING_ALL = 3;
    /**
     *   Indicates which recordings should be returned by getTvRecordingList
     *   @hide
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "RECORDING_" }, value = {
            RECORDING_SCHEDULED,
            RECORDING_IN_PROGRESS,
            RECORDING_ALL,
    })
    public @interface TvRecordingListType {}

    private String mRecordingId;
    private int mStartPadding;
    private int mEndPadding;
    private int mRepeatDays;
    private String mName;
    private String mDescription;
    private int mScheduledStartTime;
    private int mScheduledDuration;
    private Uri mChannelUri;
    private Uri mProgramId;
    private List<String> mParentalRatings;
    private String mRecordingUri;
    private int mRecordingStartTime;
    private int mRecordingDuration;

    public TvRecordingInfo(
            @NonNull String recordingId, @NonNull int startPadding, @NonNull int endPadding,
            @NonNull int repeatDays, @NonNull int scheduledStartTime,
            @NonNull int scheduledDuration, @NonNull Uri channelUri, @Nullable Uri programId,
            @NonNull List<String> parentalRatings, @NonNull String recordingUri,
            @NonNull int recordingStartTime, @NonNull int recordingDuration) {
        mRecordingId = recordingId;
        mStartPadding = startPadding;
        mEndPadding = endPadding;
        mRepeatDays = repeatDays;
        mScheduledStartTime = scheduledStartTime;
        mScheduledDuration = scheduledDuration;
        mChannelUri = channelUri;
        mScheduledDuration = scheduledDuration;
        mChannelUri = channelUri;
        mProgramId = programId;
        mParentalRatings = parentalRatings;
        mRecordingUri = recordingUri;
        mRecordingStartTime = recordingStartTime;
        mRecordingDuration = recordingDuration;
    }
    @NonNull
    public String getRecordingId() {
        return mRecordingId;
    }
    @NonNull
    public int getStartPadding() {
        return mStartPadding;
    }
    @NonNull
    public int getEndPadding() {
        return mEndPadding;
    }
    @NonNull
    public int getRepeatDays() {
        return mRepeatDays;
    }
    @NonNull
    public String getName() {
        return mName;
    }
    @NonNull
    public void setName(String name) {
        mName = name;
    }
    @NonNull
    public String getDescription() {
        return mDescription;
    }
    @NonNull
    public void setDescription(String description) {
        mDescription = description;
    }
    @NonNull
    public int getScheduledStartTime() {
        return mScheduledStartTime;
    }
    @NonNull
    public int getScheduledDuration() {
        return mScheduledDuration;
    }
    @NonNull
    public Uri getChannelUri() {
        return mChannelUri;
    }
    @Nullable
    public Uri getProgramId() {
        return mProgramId;
    }
    @NonNull
    public List<String> getParentalRatings() {
        return mParentalRatings;
    }
    @NonNull
    public String getRecordingUri() {
        return mRecordingUri;
    }
    @NonNull
    public int getRecordingStartTime() {
        return mRecordingStartTime;
    }
    @NonNull
    public int getRecordingDuration() {
        return mRecordingDuration;
    }

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

    /**
     * Used to package this object into a {@link Parcel}.
     *
     * @param dest The {@link Parcel} to be written.
     * @param flags The flags used for parceling.
     */
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeString(mRecordingId);
        dest.writeInt(mStartPadding);
        dest.writeInt(mEndPadding);
        dest.writeInt(mRepeatDays);
        dest.writeString(mName);
        dest.writeString(mDescription);
        dest.writeInt(mScheduledStartTime);
        dest.writeInt(mScheduledDuration);
        dest.writeString(mChannelUri == null ? null : mChannelUri.toString());
        dest.writeString(mProgramId == null ? null : mProgramId.toString());
        dest.writeStringList(mParentalRatings);
        dest.writeString(mRecordingUri);
        dest.writeInt(mRecordingDuration);
        dest.writeInt(mRecordingStartTime);
    }

    private TvRecordingInfo(Parcel in) {
        mRecordingId = in.readString();
        mStartPadding = in.readInt();
        mEndPadding = in.readInt();
        mRepeatDays = in.readInt();
        mName = in.readString();
        mDescription = in.readString();
        mScheduledStartTime = in.readInt();
        mScheduledDuration = in.readInt();
        mChannelUri = Uri.parse(in.readString());
        mProgramId = Uri.parse(in.readString());
        in.readStringList(mParentalRatings);
        mRecordingUri = in.readString();
        mRecordingDuration = in.readInt();
        mRecordingStartTime = in.readInt();
    }


    public static final @android.annotation.NonNull Parcelable.Creator<TvRecordingInfo> CREATOR =
            new Parcelable.Creator<>() {
                @Override
                @NonNull
                public TvRecordingInfo createFromParcel(Parcel in) {
                    return new TvRecordingInfo(in);
                }

                @Override
                @NonNull
                public TvRecordingInfo[] newArray(int size) {
                    return new TvRecordingInfo[size];
                }
            };
}
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.graphics.Rect;
import android.media.tv.AdBuffer;
import android.media.tv.AdRequest;
import android.media.tv.BroadcastInfoRequest;
import android.media.tv.TvRecordingInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.InputChannel;
@@ -48,6 +49,7 @@ oneway interface ITvInteractiveAppClient {
    void onRequestCurrentTvInputId(int seq);
    void onRequestStartRecording(in Uri programUri, int seq);
    void onRequestStopRecording(in String recordingId, int seq);
    void onSetTvRecordingInfo(in String recordingId, in TvRecordingInfo recordingInfo, int seq);
    void onRequestSigning(
            in String id, in String algorithm, in String alias, in byte[] data, int seq);
    void onAdRequest(in AdRequest request, int Seq);
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.graphics.Rect;
import android.media.tv.AdBuffer;
import android.media.tv.AdRequest;
import android.media.tv.BroadcastInfoRequest;
import android.media.tv.TvRecordingInfo;
import android.media.tv.interactive.ITvInteractiveAppSession;
import android.net.Uri;
import android.os.Bundle;
@@ -47,6 +48,7 @@ oneway interface ITvInteractiveAppSessionCallback {
    void onRequestCurrentTvInputId();
    void onRequestStartRecording(in Uri programUri);
    void onRequestStopRecording(in String recordingId);
    void onSetTvRecordingInfo(in String recordingId, in TvRecordingInfo recordingInfo);
    void onRequestSigning(in String id, in String algorithm, in String alias, in byte[] data);
    void onAdRequest(in AdRequest request);
}
+36 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.media.tv.BroadcastInfoRequest;
import android.media.tv.BroadcastInfoResponse;
import android.media.tv.TvContentRating;
import android.media.tv.TvInputManager;
import android.media.tv.TvRecordingInfo;
import android.media.tv.TvTrackInfo;
import android.net.Uri;
import android.os.Bundle;
@@ -511,6 +512,19 @@ public final class TvInteractiveAppManager {
                }
            }

            @Override
            public void onSetTvRecordingInfo(String recordingId, TvRecordingInfo recordingInfo,
                    int seq) {
                synchronized (mSessionCallbackRecordMap) {
                    SessionCallbackRecord record = mSessionCallbackRecordMap.get(seq);
                    if (record == null) {
                        Log.e(TAG, "Callback not found for seq " + seq);
                        return;
                    }
                    record.postSetTvRecordingInfo(recordingId, recordingInfo);
                }
            }

            @Override
            public void onRequestSigning(
                    String id, String algorithm, String alias, byte[] data, int seq) {
@@ -1799,6 +1813,15 @@ public final class TvInteractiveAppManager {
            });
        }

        void postSetTvRecordingInfo(String recordingId, TvRecordingInfo recordingInfo) {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    mSessionCallback.onSetTvRecordingInfo(mSession, recordingId, recordingInfo);
                }
            });
        }

        void postAdRequest(final AdRequest request) {
            mHandler.post(new Runnable() {
                @Override
@@ -1971,6 +1994,19 @@ public final class TvInteractiveAppManager {
        public void onRequestStopRecording(Session session, String recordingId) {
        }

        /**
         * This is called when
         * {@link TvInteractiveAppService.Session#setTvRecordingInfo(String, TvRecordingInfo)} is
         * called.
         *
         * @param session A {@link TvInteractiveAppService.Session} associated with this callback.
         * @param recordingId The recordingId of the recording which will have the info set.
         * @param recordingInfo The recording info to set to the recording.
         */
        public void onSetTvRecordingInfo(Session session, String recordingId,
                TvRecordingInfo recordingInfo) {
        }

        /**
         * This is called when
         * {@link TvInteractiveAppService.Session#requestSigning(String, String, String, byte[])} is
Loading