blob: 4ee571047085d948518f85a3489da1d9f37bdb13 [file] [log] [blame]
/*
* 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.net.Uri;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Pair;
import androidx.tvprovider.media.tv.TvContractCompat;
import com.android.tv.TvSingletons;
import com.android.tv.data.api.Channel;
import com.android.tv.data.api.Program;
import com.android.tv.dvr.data.RecordedProgram;
import java.util.Objects;
/** A class to store the content of preview programs. */
public class PreviewProgramContent {
@VisibleForTesting static final 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 ProgramImpl} */
public static PreviewProgramContent createFromProgram(
Context context, long previewChannelId, Program program) {
Channel channel =
TvSingletons.getSingletons(context)
.getChannelDataManager()
.getChannel(program.getChannelId());
return channel == null ? null : createFromProgram(previewChannelId, program, channel);
}
/** Create preview program content from {@link RecordedProgram} */
public static PreviewProgramContent createFromRecordedProgram(
Context context, long previewChannelId, RecordedProgram recordedProgram) {
Channel channel =
TvSingletons.getSingletons(context)
.getChannelDataManager()
.getChannel(recordedProgram.getChannelId());
return createFromRecordedProgram(previewChannelId, recordedProgram, channel);
}
@VisibleForTesting
static PreviewProgramContent createFromProgram(
long previewChannelId, Program program, Channel channel) {
String channelDisplayName = channel.getDisplayName();
return new PreviewProgramContent.Builder()
.setId(program.getId())
.setPreviewChannelId(previewChannelId)
.setType(TvContractCompat.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(), Pair.create(PARAM_INPUT, channel.getInputId())))
.build();
}
@VisibleForTesting
static PreviewProgramContent createFromRecordedProgram(
long previewChannelId, RecordedProgram recordedProgram, Channel channel) {
String channelDisplayName = channel == null ? null : channel.getDisplayName();
Uri recordedProgramUri = TvContractCompat.buildRecordedProgramUri(recordedProgram.getId());
return new PreviewProgramContent.Builder()
.setId(recordedProgram.getId())
.setPreviewChannelId(previewChannelId)
.setType(TvContractCompat.PreviewPrograms.TYPE_CLIP)
.setTitle(recordedProgram.getTitle())
.setDescription(channelDisplayName != null ? channelDisplayName : "")
.setPosterArtUri(Uri.parse(recordedProgram.getPosterArtUri()))
.setIntentUri(recordedProgramUri)
.setPreviewVideoUri(
PreviewDataManager.PreviewDataUtils.addQueryParamToUri(
recordedProgramUri,
Pair.create(PARAM_INPUT, recordedProgram.getInputId())))
.build();
}
private PreviewProgramContent() {}
@SuppressWarnings("ReferenceEquality")
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;
}
}
}