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

Commit 98fb9ed4 authored by Gilles Debunne's avatar Gilles Debunne
Browse files

Longpressing in landscape correctly starts selection mode.

Two issues here:
1. selection mode was stopped when extracted mode started,
thus loosing the selection.
2. starting selection mode shows a transient action bar which
is then hidden when extracted mode starts. Detect this case
and do not start selection mode, which will start in extracted
mode. This also solves 1.

Change-Id: I61d6e8d2071e9d3b1a136915b685962bbc093bd0
parent a7e88d68
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -5754,7 +5754,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        if (mInputMethodState != null) {
            mInputMethodState.mExtracting = req;
        }
        // This stops a possible text selection mode. Maybe not intended.
        // This would stop a possible selection mode, but no such mode is started in case
        // extracted mode will start. Some text is selected though, and will trigger an action mode
        // in the extracted view.
        hideControllers();
    }

@@ -10015,14 +10017,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            }
        }

        final InputMethodManager imm = InputMethodManager.peekInstance();
        boolean extractedTextModeWillBeStartedFullScreen = !(this instanceof ExtractEditText) &&
                imm != null && imm.isFullscreenMode();

        // Do not start the action mode when extracted text will show up full screen, thus
        // immediately hiding the newly created action bar, which would be visually distracting.
        if (!extractedTextModeWillBeStartedFullScreen) {
            ActionMode.Callback actionModeCallback = new SelectionActionModeCallback();
            mSelectionActionMode = startActionMode(actionModeCallback);
        final boolean selectionStarted = mSelectionActionMode != null;
        }
        final boolean selectionStarted = mSelectionActionMode != null ||
                extractedTextModeWillBeStartedFullScreen;

        if (selectionStarted && !mTextIsSelectable) {
        if (selectionStarted && !mTextIsSelectable && imm != null) {
            // Show the IME to be able to replace text, except when selecting non editable text.
            final InputMethodManager imm = InputMethodManager.peekInstance();
            if (imm != null) imm.showSoftInput(this, 0, null);
            imm.showSoftInput(this, 0, null);
        }

        return selectionStarted;