diff options
Diffstat (limited to 'src/com/android/tv/dvr/ui/DetailsContentPresenter.java')
-rw-r--r-- | src/com/android/tv/dvr/ui/DetailsContentPresenter.java | 300 |
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 |