Merge "Resize text in drop target button if the text displayed is truncated vertically" into tm-qpr-dev
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java
index ee3e278..376cab7 100644
--- a/src/com/android/launcher3/ButtonDropTarget.java
+++ b/src/com/android/launcher3/ButtonDropTarget.java
@@ -57,6 +57,8 @@
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;
@@ -403,6 +405,21 @@
}
/**
+ * 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.
*
* The minimum size is defined by {@code R.dimen.button_drop_target_min_text_size} and
@@ -423,7 +440,9 @@
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;