diff options
Diffstat (limited to 'src/com/android/tv/data/PreviewProgramContent.java')
-rw-r--r-- | src/com/android/tv/data/PreviewProgramContent.java | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/src/com/android/tv/data/PreviewProgramContent.java b/src/com/android/tv/data/PreviewProgramContent.java new file mode 100644 index 00000000..39f5051d --- /dev/null +++ b/src/com/android/tv/data/PreviewProgramContent.java @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2017 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 com.android.tv.data; + +import android.content.Context; +import android.media.tv.TvContract; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Pair; + +import com.android.tv.TvApplication; +import com.android.tv.dvr.data.RecordedProgram; + +import java.util.Objects; + +/** + * A class to store the content of preview programs. + */ +public class PreviewProgramContent { + private final static String PARAM_INPUT = "input"; + + private long mId; + private long mPreviewChannelId; + private int mType; + private boolean mLive; + private String mTitle; + private String mDescription; + private Uri mPosterArtUri; + private Uri mIntentUri; + private Uri mPreviewVideoUri; + + /** + * Create preview program content from {@link Program} + */ + public static PreviewProgramContent createFromProgram(Context context, + long previewChannelId, Program program) { + Channel channel = TvApplication.getSingletons(context).getChannelDataManager() + .getChannel(program.getChannelId()); + if (channel == null) { + return null; + } + String channelDisplayName = channel.getDisplayName(); + return new PreviewProgramContent.Builder() + .setId(program.getId()) + .setPreviewChannelId(previewChannelId) + .setType(TvContract.PreviewPrograms.TYPE_CHANNEL) + .setLive(true) + .setTitle(program.getTitle()) + .setDescription(!TextUtils.isEmpty(channelDisplayName) + ? channelDisplayName : channel.getDisplayNumber()) + .setPosterArtUri(Uri.parse(program.getPosterArtUri())) + .setIntentUri(channel.getUri()) + .setPreviewVideoUri(PreviewDataManager.PreviewDataUtils.addQueryParamToUri( + channel.getUri(), new Pair<>(PARAM_INPUT, channel.getInputId()))) + .build(); + } + + /** + * Create preview program content from {@link RecordedProgram} + */ + public static PreviewProgramContent createFromRecordedProgram( + Context context, long previewChannelId, RecordedProgram recordedProgram) { + Channel channel = TvApplication.getSingletons(context).getChannelDataManager() + .getChannel(recordedProgram.getChannelId()); + String channelDisplayName = null; + if (channel != null) { + channelDisplayName = channel.getDisplayName(); + } + Uri recordedProgramUri = TvContract.buildRecordedProgramUri(recordedProgram.getId()); + return new PreviewProgramContent.Builder() + .setId(recordedProgram.getId()) + .setPreviewChannelId(previewChannelId) + .setType(TvContract.PreviewPrograms.TYPE_CLIP) + .setTitle(recordedProgram.getTitle()) + .setDescription(channelDisplayName != null ? channelDisplayName : "") + .setPosterArtUri(Uri.parse(recordedProgram.getPosterArtUri())) + .setIntentUri(recordedProgramUri) + .setPreviewVideoUri(PreviewDataManager.PreviewDataUtils.addQueryParamToUri( + recordedProgramUri, new Pair<>(PARAM_INPUT, recordedProgram.getInputId()))) + .build(); + } + + private PreviewProgramContent() { } + + public void copyFrom(PreviewProgramContent other) { + if (this == other) { + return; + } + mId = other.mId; + mPreviewChannelId = other.mPreviewChannelId; + mType = other.mType; + mLive = other.mLive; + mTitle = other.mTitle; + mDescription = other.mDescription; + mPosterArtUri = other.mPosterArtUri; + mIntentUri = other.mIntentUri; + mPreviewVideoUri = other.mPreviewVideoUri; + } + + /** + * Returns the id, which is an identification. It usually comes from the original data which + * create the {@PreviewProgramContent}. + */ + public long getId() { + return mId; + } + + /** + * Returns the preview channel id which the preview program belongs to. + */ + public long getPreviewChannelId() { + return mPreviewChannelId; + } + + /** + * Returns the type of the preview program. + */ + public int getType() { + return mType; + } + + /** + * Returns whether the preview program is live or not. + */ + public boolean getLive() { + return mLive; + } + + /** + * Returns the title of the preview program. + */ + public String getTitle() { + return mTitle; + } + + /** + * Returns the description of the preview program. + */ + public String getDescription() { + return mDescription; + } + + /** + * Returns the poster art uri of the preview program. + */ + public Uri getPosterArtUri() { + return mPosterArtUri; + } + + /** + * Returns the intent uri of the preview program. + */ + public Uri getIntentUri() { + return mIntentUri; + } + + /** + * Returns the preview video uri of the preview program. + */ + public Uri getPreviewVideoUri() { + return mPreviewVideoUri; + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof PreviewProgramContent)) { + return false; + } + PreviewProgramContent previewProgramContent = (PreviewProgramContent) other; + return previewProgramContent.mId == mId + && previewProgramContent.mPreviewChannelId == mPreviewChannelId + && previewProgramContent.mType == mType + && previewProgramContent.mLive == mLive + && Objects.equals(previewProgramContent.mTitle, mTitle) + && Objects.equals(previewProgramContent.mDescription, mDescription) + && Objects.equals(previewProgramContent.mPosterArtUri, mPosterArtUri) + && Objects.equals(previewProgramContent.mIntentUri, mIntentUri) + && Objects.equals(previewProgramContent.mPreviewVideoUri, mPreviewVideoUri); + } + + @Override + public int hashCode() { + return Objects.hash(mId, mPreviewChannelId, mType, mLive, mTitle, mDescription, + mPosterArtUri, mIntentUri, mPreviewVideoUri); + } + + public static final class Builder { + private final PreviewProgramContent mPreviewProgramContent; + + public Builder() { + mPreviewProgramContent = new PreviewProgramContent(); + } + + public Builder setId(long id) { + mPreviewProgramContent.mId = id; + return this; + } + + public Builder setPreviewChannelId(long previewChannelId) { + mPreviewProgramContent.mPreviewChannelId = previewChannelId; + return this; + } + + public Builder setType(int type) { + mPreviewProgramContent.mType = type; + return this; + } + + public Builder setLive(boolean live) { + mPreviewProgramContent.mLive = live; + return this; + } + + public Builder setTitle(String title) { + mPreviewProgramContent.mTitle = title; + return this; + } + + public Builder setDescription(String description) { + mPreviewProgramContent.mDescription = description; + return this; + } + + public Builder setPosterArtUri(Uri posterArtUri) { + mPreviewProgramContent.mPosterArtUri = posterArtUri; + return this; + } + + public Builder setIntentUri(Uri intentUri) { + mPreviewProgramContent.mIntentUri = intentUri; + return this; + } + + public Builder setPreviewVideoUri(Uri previewVideoUri) { + mPreviewProgramContent.mPreviewVideoUri = previewVideoUri; + return this; + } + + public PreviewProgramContent build() { + PreviewProgramContent previewProgramContent = new PreviewProgramContent(); + previewProgramContent.copyFrom(mPreviewProgramContent); + return previewProgramContent; + } + } +} |