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

Commit 27bfcaa6 authored by Pat Manning's avatar Pat Manning
Browse files

Update drop target button alignment across devices.

Fix: 229789612
Fix: 231711806
Fix: 231706480
Fix: 232063941
Fix: 232283628
Test: manual.
Change-Id: I75d649b953ad1607dbba87a8f758884ff938b6dc
parent 25d5334a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
    <dimen name="drop_target_button_drawable_horizontal_padding">24dp</dimen>
    <dimen name="drop_target_button_drawable_vertical_padding">20dp</dimen>
    <dimen name="drop_target_button_gap">32dp</dimen>
    <dimen name="drop_target_button_workspace_edge_gap">32dp</dimen>
    <dimen name="drop_target_top_margin">110dp</dimen>
    <dimen name="drop_target_bottom_margin">48dp</dimen>

+6 −6
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
    <dimen name="dynamic_grid_icon_drawable_padding">7dp</dimen>
    <!-- Minimum space between workspace and hotseat in spring loaded mode -->
    <dimen name="dynamic_grid_min_spring_loaded_space">8dp</dimen>
    <!-- Minimum amount of next page visible in spring loaded mode -->
    <dimen name="dynamic_grid_spring_loaded_min_next_space_visible">24dp</dimen>

    <dimen name="dynamic_grid_cell_border_spacing">16dp</dimen>
    <dimen name="cell_layout_padding">10.77dp</dimen>
@@ -58,13 +60,9 @@
<!-- Drop target bar -->
    <dimen name="dynamic_grid_drop_target_size">56dp</dimen>
    <dimen name="drop_target_vertical_gap">20dp</dimen>
    <dimen name="drop_target_top_margin">36dp</dimen>
    <dimen name="drop_target_top_margin">32dp</dimen>
    <dimen name="drop_target_bottom_margin">16dp</dimen>

    <!-- Button drop target bar -->
    <dimen name="button_drop_target_min_text_size">10sp</dimen>
    <dimen name="button_drop_target_resize_text_increment">1sp</dimen>

<!-- App Widget resize frame -->
    <dimen name="widget_handle_margin">13dp</dimen>
    <dimen name="resize_frame_background_padding">24dp</dimen>
@@ -229,7 +227,9 @@
    <dimen name="drop_target_button_drawable_padding">8dp</dimen>
    <dimen name="drop_target_button_drawable_horizontal_padding">16dp</dimen>
    <dimen name="drop_target_button_drawable_vertical_padding">8dp</dimen>
    <dimen name="drop_target_button_gap">22dp</dimen>
    <dimen name="drop_target_button_gap">28dp</dimen>
    <dimen name="drop_target_button_workspace_edge_gap">0dp</dimen>
    <dimen name="drop_target_button_screen_edge_gap">28dp</dimen>

    <!-- the distance an icon must be dragged before button drop targets accept it -->
    <dimen name="drag_distanceThreshold">30dp</dimen>
+45 −39
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.InputType;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
@@ -49,6 +50,8 @@ public abstract class ButtonDropTarget extends TextView
    private static final int[] sTempCords = new int[2];
    private static final int DRAG_VIEW_DROP_DURATION = 285;
    private static final float DRAG_VIEW_HOVER_OVER_OPACITY = 0.65f;
    private static final int MAX_LINES_TEXT_MULTI_LINE = 2;
    private static final int MAX_LINES_TEXT_SINGLE_LINE = 1;

    public static final int TOOLTIP_DEFAULT = 0;
    public static final int TOOLTIP_LEFT = 1;
@@ -72,6 +75,8 @@ public abstract class ButtonDropTarget extends TextView
    protected CharSequence mText;
    protected Drawable mDrawable;
    private boolean mTextVisible = true;
    private boolean mIconVisible = true;
    private boolean mTextMultiLine = true;

    private PopupWindow mToolTip;
    private int mToolTipLocation;
@@ -109,8 +114,7 @@ public abstract class ButtonDropTarget extends TextView
        // drawableLeft and drawableStart.
        mDrawable = getContext().getDrawable(resId).mutate();
        mDrawable.setTintList(getTextColors());
        centerIcon();
        setCompoundDrawablesRelative(mDrawable, null, null, null);
        updateIconVisibility();
    }

    public void setDropTargetBar(DropTargetBar dropTargetBar) {
@@ -306,11 +310,47 @@ public abstract class ButtonDropTarget extends TextView
        if (mTextVisible != isVisible || !TextUtils.equals(newText, getText())) {
            mTextVisible = isVisible;
            setText(newText);
            updateIconVisibility();
        }
    }

    /**
     * Display button text over multiple lines when isMultiLine is true, single line otherwise.
     */
    public void setTextMultiLine(boolean isMultiLine) {
        if (mTextMultiLine != isMultiLine) {
            mTextMultiLine = isMultiLine;
            setSingleLine(!isMultiLine);
            setMaxLines(isMultiLine ? MAX_LINES_TEXT_MULTI_LINE : MAX_LINES_TEXT_SINGLE_LINE);
            int inputType = InputType.TYPE_CLASS_TEXT;
            if (isMultiLine) {
                inputType |= InputType.TYPE_TEXT_FLAG_MULTI_LINE;

            }
            setInputType(inputType);
        }
    }

    protected boolean isTextMultiLine() {
        return mTextMultiLine;
    }

    /**
     * Sets the button icon visible when isVisible is true, hides it otherwise.
     */
    public void setIconVisible(boolean isVisible) {
        if (mIconVisible != isVisible) {
            mIconVisible = isVisible;
            updateIconVisibility();
        }
    }

    private void updateIconVisibility() {
        if (mIconVisible) {
            centerIcon();
            setCompoundDrawablesRelative(mDrawable, null, null, null);
            int drawablePadding = mTextVisible ? mDrawablePadding : 0;
            setCompoundDrawablePadding(drawablePadding);
        }
        setCompoundDrawablesRelative(mIconVisible ? mDrawable : null, null, null, null);
        setCompoundDrawablePadding(mIconVisible && mTextVisible ? mDrawablePadding : 0);
    }

    @Override
@@ -324,40 +364,6 @@ public abstract class ButtonDropTarget extends TextView
        hideTooltip();
    }


    /**
     * Reduce the size of the text until it fits or reaches a minimum.
     *
     * The minimum size is defined by {@code R.dimen.button_drop_target_min_text_size} and
     * it diminishes by intervals defined by
     * {@code R.dimen.button_drop_target_resize_text_increment}
     * This functionality is very similar to the option
     * {@link TextView#setAutoSizeTextTypeWithDefaults(int)} but can't be used in this view because
     * the layout width is {@code WRAP_CONTENT}.
     *
     * @param availableWidth Available width in the button to fit the text, used in
     *        {@code ButtonDropTarget#isTextTruncated(int)}
     * @return The biggest text size in SP that makes the text fit or if the text can't fit returns
     *         the min available value
     */
    public float resizeTextToFit(int availableWidth) {
        float minSize = Utilities.pxToSp(getResources()
                .getDimensionPixelSize(R.dimen.button_drop_target_min_text_size));
        float step = Utilities.pxToSp(getResources()
                .getDimensionPixelSize(R.dimen.button_drop_target_resize_text_increment));
        float textSize = Utilities.pxToSp(getTextSize());

        while (textSize > minSize) {
            if (isTextTruncated(availableWidth)) {
                textSize -= step;
                setTextSize(textSize);
            } else {
                return textSize;
            }
        }
        return minSize;
    }

    public boolean isTextTruncated(int availableWidth) {
        availableWidth -= (getPaddingLeft() + getPaddingRight() + mDrawable.getIntrinsicWidth()
                + getCompoundDrawablePadding());
+19 −10
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ public class DeviceProfile {
    public float workspaceSpringLoadShrunkTop;
    public float workspaceSpringLoadShrunkBottom;
    public final int workspaceSpringLoadedBottomSpace;
    public final int workspaceSpringLoadedMinNextPageVisiblePx;

    private final int extraSpace;
    public int workspaceTopPadding;
@@ -214,6 +215,8 @@ public class DeviceProfile {
    public int dropTargetHorizontalPaddingPx;
    public int dropTargetVerticalPaddingPx;
    public int dropTargetGapPx;
    public int dropTargetButtonWorkspaceEdgeGapPx;
    public int dropTargetButtonScreenEdgeGapPx;

    // Insets
    private final Rect mInsets = new Rect();
@@ -343,9 +346,15 @@ public class DeviceProfile {
        dropTargetVerticalPaddingPx = res.getDimensionPixelSize(
                R.dimen.drop_target_button_drawable_vertical_padding);
        dropTargetGapPx = res.getDimensionPixelSize(R.dimen.drop_target_button_gap);
        dropTargetButtonWorkspaceEdgeGapPx = res.getDimensionPixelSize(
                R.dimen.drop_target_button_workspace_edge_gap);
        dropTargetButtonScreenEdgeGapPx = res.getDimensionPixelSize(
                R.dimen.drop_target_button_screen_edge_gap);

        workspaceSpringLoadedBottomSpace =
                res.getDimensionPixelSize(R.dimen.dynamic_grid_min_spring_loaded_space);
        workspaceSpringLoadedMinNextPageVisiblePx = res.getDimensionPixelSize(
                R.dimen.dynamic_grid_spring_loaded_min_next_space_visible);

        workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x);

@@ -501,7 +510,7 @@ public class DeviceProfile {
     */
    private int calculateQsbWidth() {
        if (isQsbInline) {
            int columns = isTwoPanels ? inv.numColumns * 2 : inv.numColumns;
            int columns = getPanelCount() * inv.numColumns;
            return getIconToIconWidthForColumns(columns)
                    - iconSizePx * numShownHotseatIcons
                    - hotseatBorderSpace * numShownHotseatIcons;
@@ -954,13 +963,6 @@ public class DeviceProfile {
        return workspaceSpringLoadShrunkBottom;
    }

    /**
     * Gets the minimum visible amount of the next workspace page when in the spring-loaded state.
     */
    private float getWorkspaceSpringLoadedMinimumNextPageVisible() {
        return getCellSize().x / 2f;
    }

    /**
     * Gets the scale of the workspace for the spring-loaded edit state.
     */
@@ -972,8 +974,7 @@ public class DeviceProfile {
        // Reduce scale if next pages would not be visible after scaling the workspace
        int workspaceWidth = availableWidthPx;
        float scaledWorkspaceWidth = workspaceWidth * scale;
        float maxAvailableWidth =
                workspaceWidth - (2 * getWorkspaceSpringLoadedMinimumNextPageVisible());
        float maxAvailableWidth = workspaceWidth - (2 * workspaceSpringLoadedMinNextPageVisiblePx);
        if (scaledWorkspaceWidth > maxAvailableWidth) {
            scale *= maxAvailableWidth / scaledWorkspaceWidth;
        }
@@ -1412,11 +1413,19 @@ public class DeviceProfile {
        writer.println(prefix + pxToDpStr("dropTargetBarSizePx", dropTargetBarSizePx));
        writer.println(
                prefix + pxToDpStr("dropTargetBarBottomMarginPx", dropTargetBarBottomMarginPx));
        writer.println(prefix + pxToDpStr("dropTargetButtonWorkspaceEdgeGapPx",
                dropTargetButtonWorkspaceEdgeGapPx));
        writer.println(prefix + pxToDpStr("dropTargetButtonScreenEdgeGapPx",
                dropTargetButtonScreenEdgeGapPx));

        writer.println(
                prefix + pxToDpStr("workspaceSpringLoadShrunkTop", workspaceSpringLoadShrunkTop));
        writer.println(prefix + pxToDpStr("workspaceSpringLoadShrunkBottom",
                workspaceSpringLoadShrunkBottom));
        writer.println(prefix + pxToDpStr("workspaceSpringLoadedBottomSpace",
                workspaceSpringLoadedBottomSpace));
        writer.println(prefix + pxToDpStr("workspaceSpringLoadedMinNextPageVisiblePx",
                workspaceSpringLoadedMinNextPageVisiblePx));
        writer.println(
                prefix + pxToDpStr("getWorkspaceSpringLoadScale()", getWorkspaceSpringLoadScale()));
    }
+129 −92

File changed.

Preview size limit exceeded, changes collapsed.