Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50457c1f authored by Romain Guy's avatar Romain Guy Committed by The Android Open Source Project
Browse files

Merge branch 'readonly-p4-donut' into donut

parents 7d1d7785 939151f1
Loading
Loading
Loading
Loading
+40 −10
Original line number Diff line number Diff line
@@ -1641,6 +1641,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    @android.view.RemotableViewMethod
    public void setTextScaleX(float size) {
        if (size != mTextPaint.getTextScaleX()) {
            mUserSetTextScaleX = true;
            mTextPaint.setTextScaleX(size);

            if (mLayout != null) {
@@ -2511,6 +2512,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            text = "";
        }

        if (!mUserSetTextScaleX) mTextPaint.setTextScaleX(1.0f);

        if (text instanceof Spanned &&
            ((Spanned) text).getSpanStart(TextUtils.TruncateAt.MARQUEE) >= 0) {
            setHorizontalFadingEdgeEnabled(true);
@@ -4819,6 +4822,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        }

        if (mEllipsize == TextUtils.TruncateAt.MARQUEE) {
            if (!compressText(ellipsisWidth)) {
                final int height = mLayoutParams.height;
                // If the size of the view does not depend on the size of the text, try to
                // start the marquee immediately
@@ -4830,6 +4834,26 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                }
            }
        }
    }

    private boolean compressText(float width) {
        if (width > 0.0f && mLayout != null && getLineCount() == 1 && !mUserSetTextScaleX) {
            final float textWidth = mLayout.getLineWidth(0);
            final float overflow = (textWidth - width) / width;

            if (overflow > 0.0f && overflow <= Marquee.MARQUEE_DELTA_MAX) {
                mTextPaint.setTextScaleX(1.0f - overflow - 0.005f);
                post(new Runnable() {
                    public void run() {
                        requestLayout();
                    }
                });
                return true;
            }
        }

        return false;
    }

    private static int desired(Layout layout) {
        int n = layout.getLineCount();
@@ -5688,8 +5712,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    private void startMarquee() {
        if (compressText(getWidth() - getCompoundPaddingLeft() - getCompoundPaddingRight())) {
            return;
        }

        if ((mMarquee == null || mMarquee.isStopped()) && (isFocused() || isSelected()) &&
                getLineCount() == 1 && canMarquee()) {

            if (mMarquee == null) mMarquee = new Marquee(this);
            mMarquee.start(mMarqueeRepeatLimit);
        }
@@ -5713,7 +5742,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

    private static final class Marquee extends Handler {
        // TODO: Add an option to configure this
        private static final int MARQUEE_DELTA_MAX = 5;
        private static final float MARQUEE_DELTA_MAX = 0.07f;
        private static final int MARQUEE_DELAY = 1200;
        private static final int MARQUEE_RESTART_DELAY = 1200;
        private static final int MARQUEE_RESOLUTION = 1000 / 30;
@@ -7028,6 +7057,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

    // display attributes
    private TextPaint               mTextPaint;
    private boolean                 mUserSetTextScaleX;
    private Paint                   mHighlightPaint;
    private int                     mHighlightColor = 0xFFBBDDFF;
    private Layout                  mLayout;