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

Commit 44c1e4c7 authored by Gilles Debunne's avatar Gilles Debunne
Browse files

Fix for text selection in horizontally scrolled TextViews.

A left padding and scroll was not taken into account in cursor position.

Bug http://b/issue?id=2970142

Change-Id: Ie76e8d97f3dd5fe3a750aa82cd4b97c98892cb48
parent edbb8083
Loading
Loading
Loading
Loading
+23 −12
Original line number Diff line number Diff line
@@ -5761,18 +5761,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    private void convertFromViewportToContentCoordinates(Rect r) {
        int paddingTop = getExtendedPaddingTop();
        if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
            paddingTop += getVerticalOffset(false);
        final int horizontalOffset = viewportToContentHorizontalOffset();
        r.left += horizontalOffset;
        r.right += horizontalOffset;

        final int verticalOffset = viewportToContentVerticalOffset();
        r.top += verticalOffset;
        r.bottom += verticalOffset;
    }
        r.top += paddingTop;
        r.bottom += paddingTop;

        int paddingLeft = getCompoundPaddingLeft();
        r.left += paddingLeft;
        r.right += paddingLeft;
    private int viewportToContentHorizontalOffset() {
        return getCompoundPaddingLeft() - mScrollX;
    }

        r.offset(-mScrollX, -mScrollY);
    private int viewportToContentVerticalOffset() {
        int offset = getExtendedPaddingTop() - mScrollY;
        if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
            offset += getVerticalOffset(false);
        }
        return offset;
    }

    @Override
@@ -7651,9 +7658,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            bounds.right = bounds.left + drawableWidth;
            bounds.bottom = bounds.top + drawableHeight;

            int boundTopBefore = bounds.top;
            convertFromViewportToContentCoordinates(bounds);
            mHotSpotVerticalPosition += bounds.top - boundTopBefore;
            mDrawable.setBounds(bounds);
            postInvalidate();
        }
@@ -7797,6 +7802,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                            mOffsetX = (bounds.left + bounds.right) / 2.0f - x;
                            mOffsetY = mHandle.mHotSpotVerticalPosition - y;

                            mOffsetX += viewportToContentHorizontalOffset();
                            mOffsetY += viewportToContentVerticalOffset();

                            mOnDownTimerStart = event.getEventTime();
                        }
                        break;
@@ -7986,6 +7994,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                                    mOffsetX = (bounds.left + bounds.right) / 2.0f - x;
                                    mOffsetY = draggedHandle.mHotSpotVerticalPosition - y;

                                    mOffsetX += viewportToContentHorizontalOffset();
                                    mOffsetY += viewportToContentVerticalOffset();

                                    mOnDownTimerStart = event.getEventTime();
                                    ((ArrowKeyMovementMethod)mMovement).setCursorController(this);
                                }