16ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko/*
26ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * Copyright (C) 2016 The Android Open Source Project
36ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *
46ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
56ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * you may not use this file except in compliance with the License.
66ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * You may obtain a copy of the License at
76ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *
86ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
96ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko *
106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * Unless required by applicable law or agreed to in writing, software
116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * See the License for the specific language governing permissions and
146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * limitations under the License
156ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko */
166ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkopackage com.android.tv.dvr.ui.browse;
186ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
196ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.content.Context;
206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.media.tv.TvContract;
216ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.support.annotation.Nullable;
226ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport android.text.TextUtils;
236ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
246ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.R;
256ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.TvApplication;
266ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.data.Channel;
276ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.dvr.data.RecordedProgram;
286ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.dvr.data.ScheduledRecording;
296ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.dvr.data.SeriesRecording;
306ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoimport com.android.tv.dvr.ui.DvrUiHelper;
316ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
326ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko/**
336ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko * A class for details content.
346ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko */
356ebde20b03db4c0d57f67acaac11832b610b966bNick Chalkoclass DetailsContent {
366ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /** Constant for invalid time. */
376ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public static final long INVALID_TIME = -1;
386ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
396ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private CharSequence mTitle;
406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private long mStartTimeUtcMillis;
416ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private long mEndTimeUtcMillis;
426ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private String mDescription;
436ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private String mLogoImageUri;
446ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private String mBackgroundImageUri;
456ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private boolean mUsingChannelLogo;
466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
476ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    static DetailsContent createFromRecordedProgram(Context context,
486ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            RecordedProgram recordedProgram) {
496ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return new DetailsContent.Builder()
506ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setChannelId(recordedProgram.getChannelId())
516ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setProgramTitle(recordedProgram.getTitle())
526ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setSeasonNumber(recordedProgram.getSeasonNumber())
536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setEpisodeNumber(recordedProgram.getEpisodeNumber())
546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setStartTimeUtcMillis(recordedProgram.getStartTimeUtcMillis())
556ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setEndTimeUtcMillis(recordedProgram.getEndTimeUtcMillis())
566ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setDescription(TextUtils.isEmpty(recordedProgram.getLongDescription())
576ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                        ? recordedProgram.getDescription() : recordedProgram.getLongDescription())
586ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setPosterArtUri(recordedProgram.getPosterArtUri())
596ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setThumbnailUri(recordedProgram.getThumbnailUri())
606ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .build(context);
616ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
636ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    static DetailsContent createFromSeriesRecording(Context context,
646ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            SeriesRecording seriesRecording) {
656ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return new DetailsContent.Builder()
666ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setChannelId(seriesRecording.getChannelId())
676ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setTitle(seriesRecording.getTitle())
686ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setDescription(TextUtils.isEmpty(seriesRecording.getLongDescription())
696ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                        ? seriesRecording.getDescription() : seriesRecording.getLongDescription())
706ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setPosterArtUri(seriesRecording.getPosterUri())
716ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setThumbnailUri(seriesRecording.getPhotoUri())
726ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .build(context);
736ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
746ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
756ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    static DetailsContent createFromScheduledRecording(Context context,
766ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            ScheduledRecording scheduledRecording) {
776ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        Channel channel = TvApplication.getSingletons(context).getChannelDataManager()
786ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .getChannel(scheduledRecording.getChannelId());
796ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        String description = !TextUtils.isEmpty(scheduledRecording.getProgramDescription()) ?
806ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                scheduledRecording.getProgramDescription()
816ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                : scheduledRecording.getProgramLongDescription();
826ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        if (TextUtils.isEmpty(description)) {
836ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            description = channel != null ? channel.getDescription() : null;
846ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
856ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return new DetailsContent.Builder()
866ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setChannelId(scheduledRecording.getChannelId())
876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setProgramTitle(scheduledRecording.getProgramTitle())
886ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setSeasonNumber(scheduledRecording.getSeasonNumber())
896ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setEpisodeNumber(scheduledRecording.getEpisodeNumber())
906ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setStartTimeUtcMillis(scheduledRecording.getStartTimeMs())
916ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setEndTimeUtcMillis(scheduledRecording.getEndTimeMs())
926ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setDescription(description)
936ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setPosterArtUri(scheduledRecording.getProgramPosterArtUri())
946ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .setThumbnailUri(scheduledRecording.getProgramThumbnailUri())
956ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                .build(context);
966ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
976ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
986ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    private DetailsContent() { }
996ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1006ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1016ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns title.
1026ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1036ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public CharSequence getTitle() {
1046ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mTitle;
1056ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1066ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1076ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1086ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns start time.
1096ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public long getStartTimeUtcMillis() {
1116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mStartTimeUtcMillis;
1126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1156ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns end time.
1166ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public long getEndTimeUtcMillis() {
1186ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mEndTimeUtcMillis;
1196ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1216ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1226ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns description.
1236ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1246ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public String getDescription() {
1256ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mDescription;
1266ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1276ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1286ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1296ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns Logo image URI as a String.
1306ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1316ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public String getLogoImageUri() {
1326ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mLogoImageUri;
1336ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1346ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1356ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1366ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns background image URI as a String.
1376ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1386ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public String getBackgroundImageUri() {
1396ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mBackgroundImageUri;
1406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1416ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1426ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1436ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Returns if image URIs are from its channels' logo.
1446ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1456ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public boolean isUsingChannelLogo() {
1466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        return mUsingChannelLogo;
1476ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1486ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1496ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1506ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * Copies other details content.
1516ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1526ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public void copyFrom(DetailsContent other) {
1536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        if (this == other) {
1546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return;
1556ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
1566ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mTitle = other.mTitle;
1576ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mStartTimeUtcMillis = other.mStartTimeUtcMillis;
1586ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mEndTimeUtcMillis = other.mEndTimeUtcMillis;
1596ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mDescription = other.mDescription;
1606ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mLogoImageUri = other.mLogoImageUri;
1616ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mBackgroundImageUri = other.mBackgroundImageUri;
1626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        mUsingChannelLogo = other.mUsingChannelLogo;
1636ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
1646ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1656ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    /**
1666ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     * A class for building details content.
1676ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko     */
1686ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    public static final class Builder {
1696ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private final DetailsContent mDetailsContent;
1706ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1716ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private long mChannelId;
1726ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private String mProgramTitle;
1736ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private String mSeasonNumber;
1746ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private String mEpisodeNumber;
1756ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private String mPosterArtUri;
1766ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private String mThumbnailUri;
1776ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1786ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder() {
1796ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent = new DetailsContent();
1806ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mStartTimeUtcMillis = INVALID_TIME;
1816ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mEndTimeUtcMillis = INVALID_TIME;
1826ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
1836ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1846ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
1856ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Sets title.
1866ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
1876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder setTitle(CharSequence title) {
1886ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mTitle = title;
1896ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
1906ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
1916ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
1926ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
1936ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Sets start time.
1946ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
1956ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder setStartTimeUtcMillis(long startTimeUtcMillis) {
1966ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mStartTimeUtcMillis = startTimeUtcMillis;
1976ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
1986ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
1996ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2006ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
2016ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Sets end time.
2026ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
2036ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder setEndTimeUtcMillis(long endTimeUtcMillis) {
2046ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mEndTimeUtcMillis = endTimeUtcMillis;
2056ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2066ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2076ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2086ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
2096ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Sets description.
2106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
2116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder setDescription(String description) {
2126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mDescription = description;
2136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2156ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2166ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
2176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Sets logo image URI as a String.
2186ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
2196ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder setLogoImageUri(String logoImageUri) {
2206ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mLogoImageUri = logoImageUri;
2216ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2226ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2236ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2246ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
2256ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Sets background image URI as a String.
2266ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
2276ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public Builder setBackgroundImageUri(String backgroundImageUri) {
2286ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mBackgroundImageUri = backgroundImageUri;
2296ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2306ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2316ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2326ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private Builder setProgramTitle(String programTitle) {
2336ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mProgramTitle = programTitle;
2346ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2356ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2366ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2376ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private Builder setSeasonNumber(String seasonNumber) {
2386ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mSeasonNumber = seasonNumber;
2396ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2406ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2416ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2426ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private Builder setEpisodeNumber(String episodeNumber) {
2436ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mEpisodeNumber = episodeNumber;
2446ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2456ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2466ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2476ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private Builder setChannelId(long channelId) {
2486ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mChannelId = channelId;
2496ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2506ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2516ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2526ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private Builder setPosterArtUri(String posterArtUri) {
2536ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mPosterArtUri = posterArtUri;
2546ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2556ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2566ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2576ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private Builder setThumbnailUri(String thumbnailUri) {
2586ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mThumbnailUri = thumbnailUri;
2596ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return this;
2606ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2616ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2626ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private void createStyledTitle(Context context, Channel channel) {
2636ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            CharSequence title = DvrUiHelper.getStyledTitleWithEpisodeNumber(context,
2646ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                    mProgramTitle, mSeasonNumber, mEpisodeNumber,
2656ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                    R.style.text_appearance_card_view_episode_number);
2666ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            if (TextUtils.isEmpty(title)) {
2676ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mTitle = channel != null ? channel.getDisplayName()
2686ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                        : context.getResources().getString(R.string.no_program_information);
2696ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            } else {
2706ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mTitle = title;
2716ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            }
2726ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2736ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2746ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        private void createImageUris(@Nullable Channel channel) {
2756ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mLogoImageUri = null;
2766ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mBackgroundImageUri = null;
2776ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            mDetailsContent.mUsingChannelLogo = false;
2786ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            if (!TextUtils.isEmpty(mPosterArtUri) && !TextUtils.isEmpty(mThumbnailUri)) {
2796ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mLogoImageUri = mPosterArtUri;
2806ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mBackgroundImageUri = mThumbnailUri;
2816ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            } else if (!TextUtils.isEmpty(mPosterArtUri)) {
2826ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                // thumbnailUri is empty
2836ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mLogoImageUri = mPosterArtUri;
2846ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mBackgroundImageUri = mPosterArtUri;
2856ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            } else if (!TextUtils.isEmpty(mThumbnailUri)) {
2866ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                // posterArtUri is empty
2876ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mLogoImageUri = mThumbnailUri;
2886ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mBackgroundImageUri = mThumbnailUri;
2896ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            }
2906ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            if (TextUtils.isEmpty(mDetailsContent.mLogoImageUri) && channel != null) {
2916ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                String channelLogoUri = TvContract.buildChannelLogoUri(channel.getId())
2926ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                        .toString();
2936ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mLogoImageUri = channelLogoUri;
2946ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mBackgroundImageUri = channelLogoUri;
2956ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                mDetailsContent.mUsingChannelLogo = true;
2966ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            }
2976ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
2986ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko
2996ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        /**
3006ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         * Builds details content.
3016ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko         */
3026ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        public DetailsContent build(Context context) {
3036ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            Channel channel = TvApplication.getSingletons(context).getChannelDataManager()
3046ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                    .getChannel(mChannelId);
3056ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            if (mDetailsContent.mTitle == null) {
3066ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                createStyledTitle(context, channel);
3076ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            }
3086ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            if (mDetailsContent.mBackgroundImageUri == null
3096ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                    && mDetailsContent.mLogoImageUri == null) {
3106ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko                createImageUris(channel);
3116ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            }
3126ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            DetailsContent detailsContent = new DetailsContent();
3136ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            detailsContent.copyFrom(mDetailsContent);
3146ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko            return detailsContent;
3156ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko        }
3166ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko    }
3176ebde20b03db4c0d57f67acaac11832b610b966bNick Chalko}