aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/ui/DetailsContentPresenter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/ui/DetailsContentPresenter.java')
-rw-r--r--src/com/android/tv/dvr/ui/DetailsContentPresenter.java300
1 files changed, 0 insertions, 300 deletions
diff --git a/src/com/android/tv/dvr/ui/DetailsContentPresenter.java b/src/com/android/tv/dvr/ui/DetailsContentPresenter.java
deleted file mode 100644
index 175f05bc..00000000
--- a/src/com/android/tv/dvr/ui/DetailsContentPresenter.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (C) 2016 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.dvr.ui;
-
-import android.app.Activity;
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.graphics.Paint;
-import android.graphics.Paint.FontMetricsInt;
-import android.support.v17.leanback.widget.Presenter;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.tv.R;
-import com.android.tv.ui.ViewUtils;
-import com.android.tv.util.Utils;
-
-/**
- * An {@link Presenter} for rendering a detailed description of an DVR item.
- * Typically this Presenter will be used in a {@link DetailsOverviewRowPresenter}.
- * Most codes of this class is originated from
- * {@link android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter}.
- * The latter class are re-used to provide a customized version of
- * {@link android.support.v17.leanback.widget.DetailsOverviewRow}.
- */
-public class DetailsContentPresenter extends Presenter {
- /**
- * The ViewHolder for the {@link DetailsContentPresenter}.
- */
- public static class ViewHolder extends Presenter.ViewHolder {
- final TextView mTitle;
- final TextView mSubtitle;
- final LinearLayout mDescriptionContainer;
- final TextView mBody;
- final TextView mReadMoreView;
- final int mTitleMargin;
- final int mUnderTitleBaselineMargin;
- final int mUnderSubtitleBaselineMargin;
- final int mTitleLineSpacing;
- final int mBodyLineSpacing;
- final int mBodyMaxLines;
- final int mBodyMinLines;
- final FontMetricsInt mTitleFontMetricsInt;
- final FontMetricsInt mSubtitleFontMetricsInt;
- final FontMetricsInt mBodyFontMetricsInt;
- final int mTitleMaxLines;
-
- private Activity mActivity;
- private boolean mFullTextMode;
- private int mFullTextAnimationDuration;
- private boolean mIsListeningToPreDraw;
-
- private ViewTreeObserver.OnPreDrawListener mPreDrawListener =
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- if (mSubtitle.getVisibility() == View.VISIBLE
- && mSubtitle.getTop() > view.getHeight()
- && mTitle.getLineCount() > 1) {
- mTitle.setMaxLines(mTitle.getLineCount() - 1);
- return false;
- }
- final int bodyLines = mBody.getLineCount();
- final int maxLines = mFullTextMode ? bodyLines :
- (mTitle.getLineCount() > 1 ? mBodyMinLines : mBodyMaxLines);
- if (bodyLines > maxLines) {
- mReadMoreView.setVisibility(View.VISIBLE);
- mDescriptionContainer.setFocusable(true);
- mDescriptionContainer.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- mFullTextMode = true;
- mReadMoreView.setVisibility(View.GONE);
- mDescriptionContainer.setFocusable(false);
- mDescriptionContainer.setOnClickListener(null);
- mBody.setMaxLines(bodyLines);
- // Minus 1 from line difference to eliminate the space
- // originally occupied by "READ MORE"
- showFullText((bodyLines - maxLines - 1) * mBodyLineSpacing);
- }
- });
- }
- if (mBody.getMaxLines() != maxLines) {
- mBody.setMaxLines(maxLines);
- return false;
- } else {
- removePreDrawListener();
- return true;
- }
- }
- };
-
- public ViewHolder(final View view) {
- super(view);
- mTitle = (TextView) view.findViewById(R.id.dvr_details_description_title);
- mSubtitle = (TextView) view.findViewById(R.id.dvr_details_description_subtitle);
- mBody = (TextView) view.findViewById(R.id.dvr_details_description_body);
- mDescriptionContainer =
- (LinearLayout) view.findViewById(R.id.dvr_details_description_container);
- mReadMoreView = (TextView) view.findViewById(R.id.dvr_details_description_read_more);
-
- FontMetricsInt titleFontMetricsInt = getFontMetricsInt(mTitle);
- final int titleAscent = view.getResources().getDimensionPixelSize(
- R.dimen.lb_details_description_title_baseline);
- // Ascent is negative
- mTitleMargin = titleAscent + titleFontMetricsInt.ascent;
-
- mUnderTitleBaselineMargin = view.getResources().getDimensionPixelSize(
- R.dimen.lb_details_description_under_title_baseline_margin);
- mUnderSubtitleBaselineMargin = view.getResources().getDimensionPixelSize(
- R.dimen.lb_details_description_under_subtitle_baseline_margin);
-
- mTitleLineSpacing = view.getResources().getDimensionPixelSize(
- R.dimen.lb_details_description_title_line_spacing);
- mBodyLineSpacing = view.getResources().getDimensionPixelSize(
- R.dimen.lb_details_description_body_line_spacing);
-
- mBodyMaxLines = view.getResources().getInteger(
- R.integer.lb_details_description_body_max_lines);
- mBodyMinLines = view.getResources().getInteger(
- R.integer.lb_details_description_body_min_lines);
- mTitleMaxLines = mTitle.getMaxLines();
-
- mTitleFontMetricsInt = getFontMetricsInt(mTitle);
- mSubtitleFontMetricsInt = getFontMetricsInt(mSubtitle);
- mBodyFontMetricsInt = getFontMetricsInt(mBody);
- }
-
- void addPreDrawListener() {
- if (!mIsListeningToPreDraw) {
- mIsListeningToPreDraw = true;
- view.getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
- }
- }
-
- void removePreDrawListener() {
- if (mIsListeningToPreDraw) {
- view.getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
- mIsListeningToPreDraw = false;
- }
- }
-
- public TextView getTitle() {
- return mTitle;
- }
-
- public TextView getSubtitle() {
- return mSubtitle;
- }
-
- public TextView getBody() {
- return mBody;
- }
-
- private FontMetricsInt getFontMetricsInt(TextView textView) {
- Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
- paint.setTextSize(textView.getTextSize());
- paint.setTypeface(textView.getTypeface());
- return paint.getFontMetricsInt();
- }
-
- private void showFullText(int heightDiff) {
- final ViewGroup detailsFrame = (ViewGroup) mActivity.findViewById(R.id.details_frame);
- int nowHeight = ViewUtils.getLayoutHeight(detailsFrame);
- Animator expandAnimator = ViewUtils.createHeightAnimator(
- detailsFrame, nowHeight, nowHeight + heightDiff);
- expandAnimator.setDuration(mFullTextAnimationDuration);
- Animator shiftAnimator = ObjectAnimator.ofPropertyValuesHolder(detailsFrame,
- PropertyValuesHolder.ofFloat(View.TRANSLATION_Y,
- 0f, -(heightDiff / 2)));
- shiftAnimator.setDuration(mFullTextAnimationDuration);
- AnimatorSet fullTextAnimator = new AnimatorSet();
- fullTextAnimator.playTogether(expandAnimator, shiftAnimator);
- fullTextAnimator.start();
- }
- }
-
- private final Activity mActivity;
- private final int mFullTextAnimationDuration;
-
- public DetailsContentPresenter(Activity activity) {
- super();
- mActivity = activity;
- mFullTextAnimationDuration = mActivity.getResources()
- .getInteger(R.integer.dvr_details_full_text_animation_duration);
- }
-
- @Override
- public final ViewHolder onCreateViewHolder(ViewGroup parent) {
- View v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.dvr_details_description, parent, false);
- return new ViewHolder(v);
- }
-
- @Override
- public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
- final ViewHolder vh = (ViewHolder) viewHolder;
- final DetailsContent detailsContent = (DetailsContent) item;
-
- vh.mActivity = mActivity;
- vh.mFullTextAnimationDuration = mFullTextAnimationDuration;
-
- boolean hasTitle = true;
- if (TextUtils.isEmpty(detailsContent.getTitle())) {
- vh.mTitle.setVisibility(View.GONE);
- hasTitle = false;
- } else {
- vh.mTitle.setText(detailsContent.getTitle());
- vh.mTitle.setVisibility(View.VISIBLE);
- vh.mTitle.setLineSpacing(vh.mTitleLineSpacing - vh.mTitle.getLineHeight()
- + vh.mTitle.getLineSpacingExtra(), vh.mTitle.getLineSpacingMultiplier());
- vh.mTitle.setMaxLines(vh.mTitleMaxLines);
- }
- setTopMargin(vh.mTitle, vh.mTitleMargin);
-
- boolean hasSubtitle = true;
- if (detailsContent.getStartTimeUtcMillis() != DetailsContent.INVALID_TIME
- && detailsContent.getEndTimeUtcMillis() != DetailsContent.INVALID_TIME) {
- vh.mSubtitle.setText(Utils.getDurationString(viewHolder.view.getContext(),
- detailsContent.getStartTimeUtcMillis(),
- detailsContent.getEndTimeUtcMillis(), false));
- vh.mSubtitle.setVisibility(View.VISIBLE);
- if (hasTitle) {
- setTopMargin(vh.mSubtitle, vh.mUnderTitleBaselineMargin
- + vh.mSubtitleFontMetricsInt.ascent - vh.mTitleFontMetricsInt.descent);
- } else {
- setTopMargin(vh.mSubtitle, 0);
- }
- } else {
- vh.mSubtitle.setVisibility(View.GONE);
- hasSubtitle = false;
- }
-
- if (TextUtils.isEmpty(detailsContent.getDescription())) {
- vh.mBody.setVisibility(View.GONE);
- } else {
- vh.mBody.setText(detailsContent.getDescription());
- vh.mBody.setVisibility(View.VISIBLE);
- vh.mBody.setLineSpacing(vh.mBodyLineSpacing - vh.mBody.getLineHeight()
- + vh.mBody.getLineSpacingExtra(), vh.mBody.getLineSpacingMultiplier());
- if (hasSubtitle) {
- setTopMargin(vh.mDescriptionContainer, vh.mUnderSubtitleBaselineMargin
- + vh.mBodyFontMetricsInt.ascent - vh.mSubtitleFontMetricsInt.descent
- - vh.mBody.getPaddingTop());
- } else if (hasTitle) {
- setTopMargin(vh.mDescriptionContainer, vh.mUnderTitleBaselineMargin
- + vh.mBodyFontMetricsInt.ascent - vh.mTitleFontMetricsInt.descent
- - vh.mBody.getPaddingTop());
- } else {
- setTopMargin(vh.mDescriptionContainer, 0);
- }
- }
- }
-
- @Override
- public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { }
-
- @Override
- public void onViewAttachedToWindow(Presenter.ViewHolder holder) {
- // In case predraw listener was removed in detach, make sure
- // we have the proper layout.
- ViewHolder vh = (ViewHolder) holder;
- vh.addPreDrawListener();
- super.onViewAttachedToWindow(holder);
- }
-
- @Override
- public void onViewDetachedFromWindow(Presenter.ViewHolder holder) {
- ViewHolder vh = (ViewHolder) holder;
- vh.removePreDrawListener();
- super.onViewDetachedFromWindow(holder);
- }
-
- private void setTopMargin(View view, int topMargin) {
- ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
- lp.topMargin = topMargin;
- view.setLayoutParams(lp);
- }
-} \ No newline at end of file