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

Commit 1a55cde8 authored by Helen Cheuk's avatar Helen Cheuk
Browse files

Resize text in drop target button if the text displayed is truncated vertically

“Don’t suggest app” text is cut off at the bottom in tablet when it is set to have largest font and display size before this fix. This change is to check if the text is displayed completely with available height. If not, decrease the text size until it does

Fix: 264732627
Test: manual
Change-Id: I8331a40f2cd767a7b2807c15d9772566baf9f355
parent b4af2072
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -57,6 +57,8 @@ public abstract class ButtonDropTarget extends TextView
    public static final int TOOLTIP_LEFT = 1;
    public static final int TOOLTIP_RIGHT = 2;

    private final Rect mTempRect = new Rect();

    protected final Launcher mLauncher;

    protected DropTargetBar mDropTargetBar;
@@ -402,6 +404,21 @@ public abstract class ButtonDropTarget extends TextView
                secondLine));
    }

    /**
     * Returns if the text will be clipped vertically within the provided availableHeight.
     */
    private boolean isTextClippedVertically(int availableHeight) {
        availableHeight -= getPaddingTop() + getPaddingBottom();
        if (availableHeight <= 0) {
            return true;
        }

        getPaint().getTextBounds(mText.toString(), 0, mText.length(), mTempRect);
        // Add bounds bottom to height, as text bounds height measures from the text baseline and
        // above, which characters can descend below
        return mTempRect.bottom + mTempRect.height() <= availableHeight;
    }

    /**
     * Reduce the size of the text until it fits the measured width or reaches a minimum.
     *
@@ -423,7 +440,9 @@ public abstract class ButtonDropTarget extends TextView
        float textSize = Utilities.pxToSp(getTextSize());

        int availableWidth = getMeasuredWidth();
        while (isTextTruncated(availableWidth)) {
        int availableHeight = getMeasuredHeight();

        while (isTextTruncated(availableWidth) || isTextClippedVertically(availableHeight)) {
            textSize -= step;
            if (textSize < minSize) {
                textSize = minSize;