diff --git a/app/src/main/java/org/xbmc/kore/ui/AbstractInfoFragment.java b/app/src/main/java/org/xbmc/kore/ui/AbstractInfoFragment.java index 1c3a0cb..a93c3c4 100644 --- a/app/src/main/java/org/xbmc/kore/ui/AbstractInfoFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/AbstractInfoFragment.java @@ -35,7 +35,6 @@ import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v4.widget.NestedScrollView; import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v4.widget.TextViewCompat; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.LayoutInflater; @@ -375,31 +374,7 @@ abstract public class AbstractInfoFragment extends AbstractFragment @SuppressLint("StringFormatInvalid") protected void updateView(DataHolder dataHolder) { titleTextView.setText(dataHolder.getTitle()); - titleTextView.post(new Runnable() { - @Override - public void run() { - int lines = titleTextView.getLineCount(); - int maxLines = TextViewCompat.getMaxLines(titleTextView); - if (lines > maxLines) { - titleTextView.setEllipsize(TextUtils.TruncateAt.END); - titleTextView.setClickable(true); - titleTextView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - v.setSelected(!v.isSelected()); - TextUtils.TruncateAt ellipsize; - if (v.isSelected()) { - ellipsize = TextUtils.TruncateAt.MARQUEE; - } else { - ellipsize = TextUtils.TruncateAt.END; - } - titleTextView.setEllipsize(ellipsize); - titleTextView.setHorizontallyScrolling(v.isSelected()); - } - }); - } - } - }); + titleTextView.post(UIUtils.getMarqueeToggleableAction(titleTextView)); underTitleTextView.setText(dataHolder.getUnderTitle()); detailsRightTextView.setText(dataHolder.getDetails()); diff --git a/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java b/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java index b80462c..e891448 100644 --- a/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/sections/remote/NowPlayingFragment.java @@ -20,7 +20,6 @@ import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; -import android.support.v4.widget.TextViewCompat; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.LayoutInflater; @@ -753,31 +752,7 @@ public class NowPlayingFragment extends Fragment } mediaTitle.setText(title); - mediaTitle.post(new Runnable() { - @Override - public void run() { - int lines = mediaTitle.getLineCount(); - int maxLines = TextViewCompat.getMaxLines(mediaTitle); - if (lines > maxLines) { - mediaTitle.setEllipsize(TextUtils.TruncateAt.END); - mediaTitle.setClickable(true); - mediaTitle.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - v.setSelected(!v.isSelected()); - TextUtils.TruncateAt ellipsize; - if (v.isSelected()) { - ellipsize = TextUtils.TruncateAt.MARQUEE; - } else { - ellipsize = TextUtils.TruncateAt.END; - } - mediaTitle.setEllipsize(ellipsize); - mediaTitle.setHorizontallyScrolling(v.isSelected()); - } - }); - } - } - }); + mediaTitle.post(UIUtils.getMarqueeToggleableAction(mediaTitle)); mediaUndertitle.setText(underTitle); mediaProgressIndicator.setOnProgressChangeListener(this); diff --git a/app/src/main/java/org/xbmc/kore/utils/UIUtils.java b/app/src/main/java/org/xbmc/kore/utils/UIUtils.java index c245b72..b28fc15 100644 --- a/app/src/main/java/org/xbmc/kore/utils/UIUtils.java +++ b/app/src/main/java/org/xbmc/kore/utils/UIUtils.java @@ -29,6 +29,7 @@ import android.os.Vibrator; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v4.widget.TextViewCompat; import android.support.v7.app.AlertDialog; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -612,6 +613,42 @@ public class UIUtils { } } + /** + * Returns a {@link Runnable} that sets up toggleable scrolling behavior on a {@link TextView} + * if the number of lines to be displayed exceeds the maximum lines limit supported by the TextView. + * Can be applied by using {@link View#post(Runnable)}. + * + * @param textView TextView that the Runnable should apply against + * @return Runnable + */ + public static Runnable getMarqueeToggleableAction(final TextView textView) { + return new Runnable() { + @Override + public void run() { + int lines = textView.getLineCount(); + int maxLines = TextViewCompat.getMaxLines(textView); + if (lines > maxLines) { + textView.setEllipsize(TextUtils.TruncateAt.END); + textView.setClickable(true); + textView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + v.setSelected(!v.isSelected()); + TextUtils.TruncateAt ellipsize; + if (v.isSelected()) { + ellipsize = TextUtils.TruncateAt.MARQUEE; + } else { + ellipsize = TextUtils.TruncateAt.END; + } + textView.setEllipsize(ellipsize); + textView.setHorizontallyScrolling(v.isSelected()); + } + }); + } + } + }; + } + /** * Replaces some BBCode-ish tagged text with styled spans. *