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

Commit d849b7c1 authored by Jonathan Miranda's avatar Jonathan Miranda
Browse files

[automerger] Hides text on ButtonDropTargets if any of them are ellipsized. am: bfaa4a4e

Change-Id: I6ff9395c7681636d191a31f308c994641d387592
parents fe2893b2 bfaa4a4e
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
@@ -69,6 +70,7 @@ public abstract class ButtonDropTarget extends TextView
    /** The paint applied to the drag view on hover */
    protected int mHoverColor = 0;

    protected CharSequence mText;
    protected ColorStateList mOriginalTextColor;
    protected Drawable mDrawable;

@@ -96,6 +98,7 @@ public abstract class ButtonDropTarget extends TextView
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        mText = getText();
        mOriginalTextColor = getTextColors();
    }

@@ -297,4 +300,30 @@ public abstract class ButtonDropTarget extends TextView
    public int getTextColor() {
        return getTextColors().getDefaultColor();
    }

    /**
     * Returns True if any update was made.
     */
    public boolean updateText(boolean hide) {
        if ((hide && getText().toString().isEmpty()) || (!hide && mText.equals(getText()))) {
            return false;
        }

        setText(hide ? "" : mText);
        return true;
    }

    public boolean isTextTruncated() {
        int availableWidth = getMeasuredWidth();
        if (mHideParentOnDisable) {
            ViewGroup parent = (ViewGroup) getParent();
            availableWidth = parent.getMeasuredWidth() - parent.getPaddingLeft()
                    - parent.getPaddingRight();
        }
        availableWidth -= (getPaddingLeft() + getPaddingRight() + mDrawable.getIntrinsicWidth()
                + getCompoundDrawablePadding());
        CharSequence displayedText = TextUtils.ellipsize(mText, getPaint(), availableWidth,
                TextUtils.TruncateAt.END);
        return !mText.equals(displayedText);
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -65,9 +65,11 @@ public class DeleteDropTarget extends ButtonDropTarget {
     * Set the drop target's text to either "Remove" or "Cancel" depending on the drag source.
     */
    public void setTextBasedOnDragSource(DragSource dragSource) {
        if (!TextUtils.isEmpty(getText())) {
            setText(dragSource.supportsDeleteDropTarget() ? R.string.remove_drop_target_label
        if (!TextUtils.isEmpty(mText)) {
            mText = getResources().getString(dragSource.supportsDeleteDropTarget()
                    ? R.string.remove_drop_target_label
                    : android.R.string.cancel);
            requestLayout();
        }
    }

+52 −0
Original line number Diff line number Diff line
@@ -78,6 +78,58 @@ public class DropTargetBar extends LinearLayout implements DragController.DragLi
        setupButtonDropTarget(this, dragController);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        boolean hideText = hideTextHelper(false /* shouldUpdateText */, false /* no-op */);
        if (hideTextHelper(true /* shouldUpdateText */, hideText)) {
            // Text has changed, so we need to re-measure.
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

    /**
     * Helper method that iterates through the children and returns whether any of the visible
     * {@link ButtonDropTarget} has truncated text.
     *
     * @param shouldUpdateText If True, updates the text of all children.
     * @param hideText If True and {@param shouldUpdateText} is True, clears the text of all
     *                 children; otherwise it sets the original text value.
     *
     *
     * @return If shouldUpdateText is True, returns whether any of the children updated their text.
     *         Else, returns whether any of the children have truncated their text.
     */
    private boolean hideTextHelper(boolean shouldUpdateText, boolean hideText) {
        boolean result = false;
        View visibleView;
        ButtonDropTarget dropTarget;
        for (int i = getChildCount() - 1; i >= 0; --i) {
            if (getChildAt(i) instanceof ButtonDropTarget) {
                visibleView = dropTarget = (ButtonDropTarget) getChildAt(i);
            } else if (getChildAt(i) instanceof ViewGroup) {
                // The Drop Target is wrapped in a FrameLayout.
                visibleView = getChildAt(i);
                dropTarget = (ButtonDropTarget) ((ViewGroup) visibleView).getChildAt(0);
            } else {
                // Ignore other views.
                continue;
            }

            if (visibleView.getVisibility() == View.VISIBLE) {
                if (shouldUpdateText) {
                    result |= dropTarget.updateText(hideText);
                } else if (dropTarget.isTextTruncated()) {
                    result = true;
                    break;
                }
            }
        }

        return result;
    }

    private void setupButtonDropTarget(View view, DragController dragController) {
        if (view instanceof ButtonDropTarget) {
            ButtonDropTarget bdt = (ButtonDropTarget) view;