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

Commit b6b8c731 authored by Nikita Dubrovsky's avatar Nikita Dubrovsky Committed by Android (Google) Code Review
Browse files

Merge "Add debug logging for cursor logic in TextView and Editor"

parents 8b884a11 05cfcc8a
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -1189,6 +1189,9 @@ public class Editor {
    }

    public boolean performLongClick(boolean handled) {
        if (TextView.DEBUG_CURSOR) {
            logCursor("performLongClick", "handled=%s", handled);
        }
        // Long press in empty space moves cursor and starts the insertion action mode.
        if (!handled && !isPositionOnText(mLastDownPositionX, mLastDownPositionY)
                && mInsertionControllerEnabled) {
@@ -1252,6 +1255,10 @@ public class Editor {
    }

    void onFocusChanged(boolean focused, int direction) {
        if (TextView.DEBUG_CURSOR) {
            logCursor("onFocusChanged", "focused=%s", focused);
        }

        mShowCursor = SystemClock.uptimeMillis();
        ensureEndedBatchEdit();

@@ -1450,12 +1457,22 @@ public class Editor {
                } else {
                    mTapState = TAP_STATE_TRIPLE_CLICK;
                }
                if (TextView.DEBUG_CURSOR) {
                    logCursor("updateTapState", "ACTION_DOWN: %s tap detected",
                            (mTapState == TAP_STATE_DOUBLE_TAP ? "double" : "triple"));
                }
            } else {
                mTapState = TAP_STATE_FIRST_TAP;
                if (TextView.DEBUG_CURSOR) {
                    logCursor("updateTapState", "ACTION_DOWN: first tap detected");
                }
            }
        }
        if (action == MotionEvent.ACTION_UP) {
            mLastTouchUpTime = SystemClock.uptimeMillis();
            if (TextView.DEBUG_CURSOR) {
                logCursor("updateTapState", "ACTION_UP");
            }
        }
    }

@@ -2354,6 +2371,9 @@ public class Editor {
    }

    void onTouchUpEvent(MotionEvent event) {
        if (TextView.DEBUG_CURSOR) {
            logCursor("onTouchUpEvent", null);
        }
        if (getSelectionActionModeHelper().resetSelection(
                getTextView().getOffsetForPosition(event.getX(), event.getY()))) {
            return;
@@ -2481,6 +2501,9 @@ public class Editor {
        loadCursorDrawable();
        final int left = clampHorizontalPosition(mDrawableForCursor, horizontal);
        final int width = mDrawableForCursor.getIntrinsicWidth();
        if (TextView.DEBUG_CURSOR) {
            logCursor("updateCursorPosition", "left=%s, top=%s", left, (top - mTempRect.top));
        }
        mDrawableForCursor.setBounds(left, top - mTempRect.top, left + width,
                bottom + mTempRect.bottom);
    }
@@ -4621,6 +4644,11 @@ public class Editor {
        }

        public void show() {
            if (TextView.DEBUG_CURSOR) {
                logCursor(getClass().getSimpleName() + ": HandleView: show()", "offset=%s",
                        getCurrentCursorOffset());
            }

            if (isShowing()) return;

            getPositionListener().addSubscriber(this, true /* local position may change */);
@@ -4637,6 +4665,11 @@ public class Editor {
        }

        public void hide() {
            if (TextView.DEBUG_CURSOR) {
                logCursor(getClass().getSimpleName() + ": HandleView: hide()", "offset=%s",
                        getCurrentCursorOffset());
            }

            dismiss();

            getPositionListener().removeSubscriber(this);
@@ -5033,6 +5066,11 @@ public class Editor {

        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            if (TextView.DEBUG_CURSOR) {
                logCursor(this.getClass().getSimpleName() + ": HandleView: onTouchEvent",
                        MotionEvent.actionToString(ev.getActionMasked()));
            }

            updateFloatingToolbarVisibility(ev);

            switch (ev.getActionMasked()) {
@@ -5951,6 +5989,10 @@ public class Editor {
                                        distanceSquared < doubleTapSlop * doubleTapSlop;

                                if (stayedInArea && (isMouse || isPositionOnText(eventX, eventY))) {
                                    if (TextView.DEBUG_CURSOR) {
                                        logCursor("SelectionModifierCursorController: onTouchEvent",
                                                "ACTION_DOWN: select and start drag");
                                    }
                                    if (mTapState == TAP_STATE_DOUBLE_TAP) {
                                        selectCurrentWordAndStartDrag();
                                    } else if (mTapState == TAP_STATE_TRIPLE_CLICK) {
@@ -6028,6 +6070,9 @@ public class Editor {
                    break;

                case MotionEvent.ACTION_UP:
                    if (TextView.DEBUG_CURSOR) {
                        logCursor("SelectionModifierCursorController: onTouchEvent", "ACTION_UP");
                    }
                    if (!isDragAcceleratorActive()) {
                        break;
                    }
@@ -7119,4 +7164,12 @@ public class Editor {
            return resolveInfo.loadLabel(mPackageManager);
        }
    }

    private static void logCursor(String location, @Nullable String msgFormat, Object ... msgArgs) {
        if (msgFormat == null) {
            Log.d(TAG, location);
        } else {
            Log.d(TAG, location + ": " + String.format(msgFormat, msgArgs));
        }
    }
}
+24 −1
Original line number Diff line number Diff line
@@ -345,6 +345,8 @@ import java.util.function.Supplier;
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
    static final String LOG_TAG = "TextView";
    static final boolean DEBUG_EXTRACT = false;
    static final boolean DEBUG_CURSOR = false;
    private static final float[] TEMP_POSITION = new float[2];
    // Enum for the "typeface" XML parameter.
@@ -10857,6 +10859,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (DEBUG_CURSOR) {
            logCursor("onTouchEvent", MotionEvent.actionToString(event.getActionMasked()));
        }
        final int action = event.getActionMasked();
        if (mEditor != null) {
            mEditor.onTouchEvent(event);
@@ -10868,6 +10874,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        }
        final boolean superResult = super.onTouchEvent(event);
        if (DEBUG_CURSOR) {
            logCursor("onTouchEvent", "superResult=%s", superResult);
        }
        /*
         * Don't handle the release after a long press, because it will move the selection away from
@@ -10876,7 +10885,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
         */
        if (mEditor != null && mEditor.mDiscardNextActionUp && action == MotionEvent.ACTION_UP) {
            mEditor.mDiscardNextActionUp = false;
            if (DEBUG_CURSOR) {
                logCursor("onTouchEvent", "release after long press detected");
            }
            if (mEditor.mIsInsertionActionModeStartPending) {
                mEditor.startInsertionActionMode();
                mEditor.mIsInsertionActionModeStartPending = false;
@@ -12254,6 +12265,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    @Override
    public boolean performLongClick() {
        if (DEBUG_CURSOR) {
            logCursor("performLongClick", null);
        }
        boolean handled = false;
        boolean performedHapticFeedback = false;
@@ -13481,4 +13496,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            TextView.this.spanChange(buf, what, s, -1, e, -1);
        }
    }
    private static void logCursor(String location, @Nullable String msgFormat, Object ... msgArgs) {
        if (msgFormat == null) {
            Log.d(LOG_TAG, location);
        } else {
            Log.d(LOG_TAG, location + ": " + String.format(msgFormat, msgArgs));
        }
    }
}