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

Commit 5f71b5af authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Make drag handle tests stable.

The center position of a drag handle can be outside of the
screen. In such cases, selection handle tests can be failed.
Changed to drag the visible position to deal with it.

Bug: 25730231
Change-Id: Id9270fc03d0f39041f243c9e9d17deca19925e09
parent a9292a24
Loading
Loading
Loading
Loading
+18 −2
Original line number Original line Diff line number Diff line
@@ -315,9 +315,25 @@ public final class TextViewActions {
                    (new TextCoordinates(mIndex)).calculateCoordinates(mTextView);
                    (new TextCoordinates(mIndex)).calculateCoordinates(mTextView);
            final Rect bounds = new Rect();
            final Rect bounds = new Rect();
            view.getBoundsOnScreen(bounds);
            view.getBoundsOnScreen(bounds);
            final float diffX = bounds.centerX() - currentCoordinates[0];
            final Rect visibleDisplayBounds = new Rect();
            mTextView.getWindowVisibleDisplayFrame(visibleDisplayBounds);
            visibleDisplayBounds.right -= 1;
            visibleDisplayBounds.bottom -= 1;
            if (!visibleDisplayBounds.intersect(bounds)) {
                throw new PerformException.Builder()
                        .withActionDescription(mActionDescription
                                + " The handle is entirely out of the visible display frame of"
                                + "the TextView's window.")
                        .withViewDescription(HumanReadables.describe(view))
                        .build();
            }
            final float dragPointX = Math.max(Math.min(bounds.centerX(),
                    visibleDisplayBounds.right), visibleDisplayBounds.left);
            final float diffX = dragPointX - currentCoordinates[0];
            final float verticalOffset = bounds.height() * 0.7f;
            final float verticalOffset = bounds.height() * 0.7f;
            float diffY = bounds.top + verticalOffset - currentCoordinates[1];
            final float dragPointY = Math.max(Math.min(bounds.top + verticalOffset,
                    visibleDisplayBounds.bottom), visibleDisplayBounds.top);
            float diffY = dragPointY - currentCoordinates[1];
            if (currentLine > targetLine) {
            if (currentLine > targetLine) {
                diffY -= mTextView.getLineHeight() * LINE_SLOP_MULTIPLIER;
                diffY -= mTextView.getLineHeight() * LINE_SLOP_MULTIPLIER;
            } else if (currentLine < targetLine) {
            } else if (currentLine < targetLine) {