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

Commit cdef9dd3 authored by Sunny Goyal's avatar Sunny Goyal Committed by Android (Google) Code Review
Browse files

Merge "Match updated redlines for shortcuts." into ub-launcher3-calgary

parents 2ee96c86 780c926d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -15,12 +15,12 @@
-->

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:width="@dimen/deep_shortcut_drag_handle_size"
        android:height="@dimen/deep_shortcut_drag_handle_size"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">

    <path
        android:pathData="M20 9H4v2h16V9zM4 15h16v-2H4v2z"
        android:fillColor="#757575"/>
        android:fillColor="#4D000000"/>
</vector>
 No newline at end of file
+10 −1
Original line number Diff line number Diff line
@@ -155,7 +155,7 @@

<!-- Deep shortcuts -->
    <dimen name="deep_shortcuts_elevation">9dp</dimen>
    <dimen name="bg_pill_width">180dp</dimen>
    <dimen name="bg_pill_width">208dp</dimen>
    <dimen name="bg_pill_height">48dp</dimen>
    <dimen name="bg_pill_radius">24dp</dimen>
    <dimen name="deep_shortcuts_spacing">4dp</dimen>
@@ -164,9 +164,18 @@
         of the shortcut container before the container is removed. -->
    <dimen name="deep_shortcuts_start_drag_threshold">35dp</dimen>
    <dimen name="deep_shortcut_icon_size">36dp</dimen>
    <dimen name="deep_shortcut_padding_start">6dp</dimen>
    <dimen name="deep_shortcut_padding_end">16dp</dimen>
    <dimen name="deep_shortcut_drawable_padding">8dp</dimen>
    <dimen name="deep_shortcut_anim_translation_y">5dp</dimen>
    <dimen name="deep_shortcut_drag_handle_size">16dp</dimen>
    <dimen name="deep_shortcuts_arrow_width">10dp</dimen>
    <dimen name="deep_shortcuts_arrow_height">8dp</dimen>
    <dimen name="deep_shortcuts_arrow_vertical_offset">-2dp</dimen>
    <!-- deep_shortcut_padding_start + deep_shortcut_icon_size / 2 - deep_shortcuts_arrow_width / 2-->
    <!-- Note that this works for right-aligned shortcuts, too, because
         deep_shortcut_padding_end + deep_shortcut_drag_handle_size / 2 - deep_shortcuts_arrow_width / 2
         also happens to equal 19dp-->
    <dimen name="deep_shortcuts_arrow_horizontal_offset">19dp</dimen>

</resources>
+3 −3
Original line number Diff line number Diff line
@@ -80,9 +80,9 @@
    <style name="Icon.DeepShortcut">
        <item name="android:gravity">start|center_vertical</item>
        <item name="android:elevation">@dimen/deep_shortcuts_elevation</item>
        <item name="android:paddingLeft">7dp</item>
        <item name="android:paddingRight">12dp</item>
        <item name="android:drawablePadding">9dp</item>
        <item name="android:paddingStart">@dimen/deep_shortcut_padding_start</item>
        <item name="android:paddingEnd">@dimen/deep_shortcut_padding_end</item>
        <item name="android:drawablePadding">@dimen/deep_shortcut_drawable_padding</item>
        <item name="android:textColor">@color/quantum_panel_text_color</item>
        <item name="android:shadowRadius">0</item>
        <item name="customShadows">false</item>
+48 −20
Original line number Diff line number Diff line
@@ -96,8 +96,10 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
    private boolean mIsLeftAligned;
    private boolean mIsAboveIcon;
    private View mArrow;

    private boolean mSrcIconDragStarted;
    private LauncherViewPropertyAnimator mArrowHoverAnimator;
    private boolean mIsRtl;
    private int mArrowHorizontalOffset;

    /**
     * Sorts shortcuts in rank order, with manifest shortcuts coming before dynamic shortcuts.
@@ -128,6 +130,7 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
        mStartDragThreshold = getResources().getDimensionPixelSize(
                R.dimen.deep_shortcuts_start_drag_threshold);
        mAccessibilityDelegate = new ShortcutMenuAccessibilityDelegate(mLauncher);
        mIsRtl = Utilities.isRtl(getResources());
    }

    public DeepShortcutsContainer(Context context, AttributeSet attrs) {
@@ -153,7 +156,20 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
        }

        measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
        animateOpen(originalIcon);
        orientAboutIcon(originalIcon);

        // Add the arrow.
        final Resources resources = getResources();
        final int arrowWidth = resources.getDimensionPixelSize(R.dimen.deep_shortcuts_arrow_width);
        final int arrowHeight = resources.getDimensionPixelSize(R.dimen.deep_shortcuts_arrow_height);
        mArrowHorizontalOffset = resources.getDimensionPixelSize(
                R.dimen.deep_shortcuts_arrow_horizontal_offset);
        final int arrowVerticalOffset = resources.getDimensionPixelSize(
                R.dimen.deep_shortcuts_arrow_vertical_offset);
        mArrow = addArrowView(mArrowHorizontalOffset, arrowVerticalOffset, arrowWidth, arrowHeight);
        mArrowHoverAnimator = new LauncherViewPropertyAnimator(mArrow);

        animateOpen();

        deferDrag(originalIcon);

@@ -230,25 +246,13 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
        return getChildCount() - 1;
    }

    private void animateOpen(BubbleTextView originalIcon) {
        orientAboutIcon(originalIcon);
        final Resources resources = getResources();
        final int arrowWidth = resources.getDimensionPixelSize(R.dimen.deep_shortcuts_arrow_width);
        final int arrowHeight = resources.getDimensionPixelSize(R.dimen.deep_shortcuts_arrow_height);
        int iconWidth = originalIcon.getWidth() - originalIcon.getTotalPaddingLeft()
                - originalIcon.getTotalPaddingRight();
        iconWidth *= originalIcon.getScaleX();
        final int arrowHorizontalOffset = iconWidth / 2 - arrowWidth / 2;
        final int arrowVerticalOffset = resources.getDimensionPixelSize(
                R.dimen.deep_shortcuts_arrow_vertical_offset);
        mArrow = addArrowView(arrowHorizontalOffset, arrowVerticalOffset, arrowWidth, arrowHeight);

    private void animateOpen() {
        setVisibility(View.VISIBLE);

        final AnimatorSet shortcutAnims = LauncherAnimUtils.createAnimatorSet();
        final int shortcutCount = getShortcutCount();
        final int pivotX = mIsLeftAligned ? arrowHorizontalOffset
                : getMeasuredWidth() - arrowHorizontalOffset;
        final int pivotX = mIsLeftAligned ? mArrowHorizontalOffset
                : getMeasuredWidth() - mArrowHorizontalOffset;
        final int pivotY = getShortcutAt(0).getMeasuredHeight() / 2;
        for (int i = 0; i < shortcutCount; i++) {
            DeepShortcutView deepShortcutView = getShortcutAt(i);
@@ -292,20 +296,40 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
        Rect insets = dragLayer.getInsets();

        // Align left (right in RTL) if there is room.
        boolean isRtl = Utilities.isRtl(getResources());
        int leftAlignedX = mTempRect.left + icon.getPaddingLeft();
        int rightAlignedX = mTempRect.right - width - icon.getPaddingRight();
        int x = leftAlignedX;
        boolean canBeLeftAligned = leftAlignedX + width < dragLayer.getRight() - insets.right;
        boolean canBeRightAligned = rightAlignedX > dragLayer.getLeft() + insets.left;
        if (!canBeLeftAligned || (isRtl && canBeRightAligned)) {
        if (!canBeLeftAligned || (mIsRtl && canBeRightAligned)) {
            x = rightAlignedX;
        }
        mIsLeftAligned = x == leftAlignedX;
        if (isRtl) {
        if (mIsRtl) {
            x -= dragLayer.getWidth() - width;
        }

        // Offset x so that the arrow and shortcut icons are center-aligned with the original icon.
        int iconWidth = icon.getWidth() - icon.getTotalPaddingLeft() - icon.getTotalPaddingRight();
        iconWidth *= icon.getScaleX();
        Resources resources = getResources();
        int xOffset;
        if (isAlignedWithStart()) {
            // Aligning with the shortcut icon.
            int shortcutIconWidth = resources.getDimensionPixelSize(R.dimen.deep_shortcut_icon_size);
            int shortcutPaddingStart = resources.getDimensionPixelSize(
                    R.dimen.deep_shortcut_padding_start);
            xOffset = iconWidth / 2 - shortcutIconWidth / 2 - shortcutPaddingStart;
        } else {
            // Aligning with the drag handle.
            int shortcutDragHandleWidth = resources.getDimensionPixelSize(
                    R.dimen.deep_shortcut_drag_handle_size);
            int shortcutPaddingEnd = resources.getDimensionPixelSize(
                    R.dimen.deep_shortcut_padding_end);
            xOffset = iconWidth / 2 - shortcutDragHandleWidth / 2 - shortcutPaddingEnd;
        }
        x += mIsLeftAligned ? xOffset : -xOffset;

        // Open above icon if there is room.
        int y = mTempRect.top - height;
        mIsAboveIcon = mTempRect.top - height > dragLayer.getTop() + insets.top;
@@ -320,6 +344,10 @@ public class DeepShortcutsContainer extends LinearLayout implements View.OnLongC
        setY(y);
    }

    private boolean isAlignedWithStart() {
        return mIsLeftAligned && !mIsRtl || !mIsLeftAligned && mIsRtl;
    }

    /**
     * Adds an arrow view pointing at the original icon.
     * @param horizontalOffset the horizontal offset of the arrow, so that it