• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package com.android.tv.dvr.ui;
18 
19 import android.media.tv.TvContract;
20 import android.support.annotation.Nullable;
21 import android.text.TextUtils;
22 
23 import com.android.tv.data.BaseProgram;
24 import com.android.tv.data.Channel;
25 
26 /**
27  * A class for details content.
28  */
29 public class DetailsContent {
30     /** Constant for invalid time. */
31     public static final long INVALID_TIME = -1;
32 
33     private CharSequence mTitle;
34     private long mStartTimeUtcMillis;
35     private long mEndTimeUtcMillis;
36     private String mDescription;
37     private String mLogoImageUri;
38     private String mBackgroundImageUri;
39 
DetailsContent()40     private DetailsContent() { }
41 
42     /**
43      * Returns title.
44      */
getTitle()45     public CharSequence getTitle() {
46         return mTitle;
47     }
48 
49     /**
50      * Returns start time.
51      */
getStartTimeUtcMillis()52     public long getStartTimeUtcMillis() {
53         return mStartTimeUtcMillis;
54     }
55 
56     /**
57      * Returns end time.
58      */
getEndTimeUtcMillis()59     public long getEndTimeUtcMillis() {
60         return mEndTimeUtcMillis;
61     }
62 
63     /**
64      * Returns description.
65      */
getDescription()66     public String getDescription() {
67         return mDescription;
68     }
69 
70     /**
71      * Returns Logo image URI as a String.
72      */
getLogoImageUri()73     public String getLogoImageUri() {
74         return mLogoImageUri;
75     }
76 
77     /**
78      * Returns background image URI as a String.
79      */
getBackgroundImageUri()80     public String getBackgroundImageUri() {
81         return mBackgroundImageUri;
82     }
83 
84     /**
85      * Copies other details content.
86      */
copyFrom(DetailsContent other)87     public void copyFrom(DetailsContent other) {
88         if (this == other) {
89             return;
90         }
91         mTitle = other.mTitle;
92         mStartTimeUtcMillis = other.mStartTimeUtcMillis;
93         mEndTimeUtcMillis = other.mEndTimeUtcMillis;
94         mDescription = other.mDescription;
95         mLogoImageUri = other.mLogoImageUri;
96         mBackgroundImageUri = other.mBackgroundImageUri;
97     }
98 
99     /**
100      * A class for building details content.
101      */
102     public static final class Builder {
103         private final DetailsContent mDetailsContent;
104 
Builder()105         public Builder() {
106             mDetailsContent = new DetailsContent();
107             mDetailsContent.mStartTimeUtcMillis = INVALID_TIME;
108             mDetailsContent.mEndTimeUtcMillis = INVALID_TIME;
109         }
110 
111         /**
112          * Sets title.
113          */
setTitle(CharSequence title)114         public Builder setTitle(CharSequence title) {
115             mDetailsContent.mTitle = title;
116             return this;
117         }
118 
119         /**
120          * Sets start time.
121          */
setStartTimeUtcMillis(long startTimeUtcMillis)122         public Builder setStartTimeUtcMillis(long startTimeUtcMillis) {
123             mDetailsContent.mStartTimeUtcMillis = startTimeUtcMillis;
124             return this;
125         }
126 
127         /**
128          * Sets end time.
129          */
setEndTimeUtcMillis(long endTimeUtcMillis)130         public Builder setEndTimeUtcMillis(long endTimeUtcMillis) {
131             mDetailsContent.mEndTimeUtcMillis = endTimeUtcMillis;
132             return this;
133         }
134 
135         /**
136          * Sets description.
137          */
setDescription(String description)138         public Builder setDescription(String description) {
139             mDetailsContent.mDescription = description;
140             return this;
141         }
142 
143         /**
144          * Sets logo image URI as a String.
145          */
setLogoImageUri(String logoImageUri)146         public Builder setLogoImageUri(String logoImageUri) {
147             mDetailsContent.mLogoImageUri = logoImageUri;
148             return this;
149         }
150 
151         /**
152          * Sets background image URI as a String.
153          */
setBackgroundImageUri(String backgroundImageUri)154         public Builder setBackgroundImageUri(String backgroundImageUri) {
155             mDetailsContent.mBackgroundImageUri = backgroundImageUri;
156             return this;
157         }
158 
159         /**
160          * Sets background image and logo image URI from program and channel.
161          */
setImageUris(@ullable BaseProgram program, @Nullable Channel channel)162         public Builder setImageUris(@Nullable BaseProgram program, @Nullable Channel channel) {
163             if (program != null) {
164                 return setImageUris(program.getPosterArtUri(), program.getThumbnailUri(), channel);
165             } else {
166                 return setImageUris(null, null, channel);
167             }
168         }
169 
170         /**
171          * Sets background image and logo image URI and channel is used for fallback images.
172          */
setImageUris(@ullable String posterArtUri, @Nullable String thumbnailUri, @Nullable Channel channel)173         public Builder setImageUris(@Nullable String posterArtUri,
174                 @Nullable String thumbnailUri, @Nullable Channel channel) {
175             mDetailsContent.mLogoImageUri = null;
176             mDetailsContent.mBackgroundImageUri = null;
177             if (!TextUtils.isEmpty(posterArtUri) && !TextUtils.isEmpty(thumbnailUri)) {
178                 mDetailsContent.mLogoImageUri = posterArtUri;
179                 mDetailsContent.mBackgroundImageUri = thumbnailUri;
180             } else if (!TextUtils.isEmpty(posterArtUri)) {
181                 // thumbnailUri is empty
182                 mDetailsContent.mLogoImageUri = posterArtUri;
183                 mDetailsContent.mBackgroundImageUri = posterArtUri;
184             } else if (!TextUtils.isEmpty(thumbnailUri)) {
185                 // posterArtUri is empty
186                 mDetailsContent.mLogoImageUri = thumbnailUri;
187                 mDetailsContent.mBackgroundImageUri = thumbnailUri;
188             }
189             if (TextUtils.isEmpty(mDetailsContent.mLogoImageUri) && channel != null) {
190                 String channelLogoUri = TvContract.buildChannelLogoUri(channel.getId())
191                         .toString();
192                 mDetailsContent.mLogoImageUri = channelLogoUri;
193                 mDetailsContent.mBackgroundImageUri = channelLogoUri;
194             }
195             return this;
196         }
197 
198         /**
199          * Builds details content.
200          */
build()201         public DetailsContent build() {
202             DetailsContent detailsContent = new DetailsContent();
203             detailsContent.copyFrom(mDetailsContent);
204             return detailsContent;
205         }
206     }
207 }