aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/menu/ChannelCardView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/menu/ChannelCardView.java')
-rw-r--r--src/com/android/tv/menu/ChannelCardView.java140
1 files changed, 73 insertions, 67 deletions
diff --git a/src/com/android/tv/menu/ChannelCardView.java b/src/com/android/tv/menu/ChannelCardView.java
index 1c8015a6..2ecb6af7 100644
--- a/src/com/android/tv/menu/ChannelCardView.java
+++ b/src/com/android/tv/menu/ChannelCardView.java
@@ -34,10 +34,12 @@ import com.android.tv.data.Program;
import com.android.tv.parental.ParentalControlSettings;
import com.android.tv.util.ImageLoader;
+import java.util.Objects;
+
/**
* A view to render channel card.
*/
-public class ChannelCardView extends BaseCardView<Channel> {
+public class ChannelCardView extends BaseCardView<ChannelsRowItem> {
private static final String TAG = MenuView.TAG;
private static final boolean DEBUG = MenuView.DEBUG;
@@ -45,11 +47,11 @@ public class ChannelCardView extends BaseCardView<Channel> {
private final int mCardImageHeight;
private ImageView mImageView;
- private View mGradientView;
private TextView mChannelNumberNameView;
private ProgressBar mProgressBar;
private Channel mChannel;
private Program mProgram;
+ private String mPosterArtUri;
private final MainActivity mMainActivity;
public ChannelCardView(Context context) {
@@ -71,39 +73,72 @@ public class ChannelCardView extends BaseCardView<Channel> {
protected void onFinishInflate() {
super.onFinishInflate();
mImageView = (ImageView) findViewById(R.id.image);
- mGradientView = findViewById(R.id.image_gradient);
+ mImageView.setBackgroundResource(R.color.channel_card);
mChannelNumberNameView = (TextView) findViewById(R.id.channel_number_and_name);
mProgressBar = (ProgressBar) findViewById(R.id.progress);
}
@Override
- public void onBind(Channel channel, boolean selected) {
+ public void onBind(ChannelsRowItem item, boolean selected) {
if (DEBUG) {
- Log.d(TAG, "onBind(channelName=" + channel.getDisplayName() + ", selected=" + selected
- + ")");
+ Log.d(TAG, "onBind(channelName=" + item.getChannel().getDisplayName() + ", selected="
+ + selected + ")");
}
- mChannel = channel;
- mProgram = null;
- mChannelNumberNameView.setText(mChannel.getDisplayText());
- mChannelNumberNameView.setVisibility(VISIBLE);
- mImageView.setImageResource(R.drawable.ic_recent_thumbnail_default);
- mImageView.setBackgroundResource(R.color.channel_card);
- mGradientView.setVisibility(View.GONE);
- mProgressBar.setVisibility(GONE);
+ updateChannel(item);
+ updateProgram();
+ super.onBind(item, selected);
+ }
- setTextViewEnabled(true);
- if (mMainActivity.getParentalControlSettings().isParentalControlsEnabled()
- && mChannel.isLocked()) {
+ private void updateChannel(ChannelsRowItem item) {
+ if (!item.getChannel().equals(mChannel)) {
+ mChannel = item.getChannel();
+ mChannelNumberNameView.setText(mChannel.getDisplayText());
+ mChannelNumberNameView.setVisibility(VISIBLE);
+ }
+ }
+
+ private void updateProgram() {
+ ParentalControlSettings parental = mMainActivity.getParentalControlSettings();
+ if (parental.isParentalControlsEnabled() && mChannel.isLocked()) {
setText(R.string.program_title_for_blocked_channel);
- return;
+ mProgram = null;
+ } else {
+ Program currentProgram =
+ mMainActivity.getProgramDataManager().getCurrentProgram(mChannel.getId());
+ if (!Objects.equals(currentProgram, mProgram)) {
+ mProgram = currentProgram;
+ if (mProgram == null || TextUtils.isEmpty(mProgram.getTitle())) {
+ setTextViewEnabled(false);
+ setText(R.string.program_title_for_no_information);
+ } else {
+ setTextViewEnabled(true);
+ setText(mProgram.getTitle());
+ }
+ }
+ }
+ if (mProgram == null) {
+ mProgressBar.setVisibility(GONE);
+ setPosterArt(null);
} else {
- setText("");
+ // Update progress.
+ mProgressBar.setVisibility(View.VISIBLE);
+ long startTime = mProgram.getStartTimeUtcMillis();
+ long endTime = mProgram.getEndTimeUtcMillis();
+ long currTime = System.currentTimeMillis();
+ if (currTime <= startTime) {
+ mProgressBar.setProgress(0);
+ } else if (currTime >= endTime) {
+ mProgressBar.setProgress(100);
+ } else {
+ mProgressBar.setProgress(
+ (int) (100 * (currTime - startTime) / (endTime - startTime)));
+ }
+ // Update image.
+ if (!parental.isParentalControlsEnabled()
+ || !parental.isRatingBlocked(mProgram.getContentRatings())) {
+ setPosterArt(mProgram.getPosterArtUri());
+ }
}
-
- updateProgramInformation();
- // Call super.onBind() at the end intentionally. In order to correctly handle extension of
- // text view, text should be set before calling super.onBind.
- super.onBind(channel, selected);
}
private static ImageLoader.ImageLoaderCallback<ChannelCardView> createProgramPosterArtCallback(
@@ -121,49 +156,20 @@ public class ChannelCardView extends BaseCardView<Channel> {
};
}
- private void updatePosterArt(Bitmap posterArt) {
- mImageView.setImageBitmap(posterArt);
- mGradientView.setVisibility(View.VISIBLE);
- }
-
- private void updateProgramInformation() {
- if (mChannel == null) {
- return;
- }
- mProgram = mMainActivity.getProgramDataManager().getCurrentProgram(mChannel.getId());
- if (mProgram == null || TextUtils.isEmpty(mProgram.getTitle())) {
- setTextViewEnabled(false);
- setText(R.string.program_title_for_no_information);
- } else {
- setText(mProgram.getTitle());
- }
-
- if (mProgram == null) {
- return;
- }
-
- long startTime = mProgram.getStartTimeUtcMillis();
- long endTime = mProgram.getEndTimeUtcMillis();
- long currTime = System.currentTimeMillis();
- mProgressBar.setVisibility(View.VISIBLE);
- if (currTime <= startTime) {
- mProgressBar.setProgress(0);
- } else if (currTime >= endTime) {
- mProgressBar.setProgress(100);
- } else {
- mProgressBar.setProgress((int) (100 * (currTime - startTime) / (endTime - startTime)));
+ private void setPosterArt(String posterArtUri) {
+ if (!TextUtils.equals(mPosterArtUri, posterArtUri)) {
+ mPosterArtUri = posterArtUri;
+ if (posterArtUri == null
+ || !mProgram.loadPosterArt(getContext(), mCardImageWidth, mCardImageHeight,
+ createProgramPosterArtCallback(this, mProgram))) {
+ mImageView.setImageResource(R.drawable.ic_recent_thumbnail_default);
+ mImageView.setForeground(null);
+ }
}
+ }
- if (!(getContext() instanceof MainActivity)) {
- Log.e(TAG, "Fails to check program's content rating.");
- return;
- }
- ParentalControlSettings parental = mMainActivity.getParentalControlSettings();
- if ((!parental.isParentalControlsEnabled()
- || !parental.isRatingBlocked(mProgram.getContentRatings()))
- && !TextUtils.isEmpty(mProgram.getPosterArtUri())) {
- mProgram.loadPosterArt(getContext(), mCardImageWidth, mCardImageHeight,
- createProgramPosterArtCallback(this, mProgram));
- }
+ private void updatePosterArt(Bitmap posterArt) {
+ mImageView.setImageBitmap(posterArt);
+ mImageView.setForeground(getContext().getDrawable(R.drawable.card_image_gradient));
}
-}
+} \ No newline at end of file