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

Commit 792d820c authored by Abodunrinwa Toki's avatar Abodunrinwa Toki
Browse files

Prevent crashes when in insertion mode.

Test: Manually tested. Automated core tests will be written in another
CL.

Change-Id: If07fa6a81e60de43d8be2cbcf37b355403779fb8
parent 53fc3cdd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -201,7 +201,7 @@ final class TextClassifierImpl implements TextClassifier {
        Preconditions.checkArgument(text != null);
        Preconditions.checkArgument(startIndex >= 0);
        Preconditions.checkArgument(endIndex <= text.length());
        Preconditions.checkArgument(endIndex >= startIndex);
        Preconditions.checkArgument(endIndex > startIndex);
    }

    /**
+11 −4
Original line number Diff line number Diff line
@@ -60,14 +60,14 @@ final class SelectionActionModeHelper {
        mEditor = Preconditions.checkNotNull(editor);
        final TextView textView = mEditor.getTextView();
        mTextClassificationHelper = new TextClassificationHelper(
                textView.getTextClassifier(), textView.getText(),
                textView.getSelectionStart(), textView.getSelectionEnd());
                textView.getTextClassifier(), textView.getText(), 0, 1);
    }

    public void startActionModeAsync() {
        cancelAsyncTask();
        if (isNoOpTextClassifier()) {
        if (isNoOpTextClassifier() || !hasSelection()) {
            // No need to make an async call for a no-op TextClassifier.
            // Do not call the TextClassifier if there is no selection.
            startActionMode(null);
        } else {
            resetTextClassificationHelper();
@@ -84,8 +84,9 @@ final class SelectionActionModeHelper {

    public void invalidateActionModeAsync() {
        cancelAsyncTask();
        if (isNoOpTextClassifier()) {
        if (isNoOpTextClassifier() || !hasSelection()) {
            // No need to make an async call for a no-op TextClassifier.
            // Do not call the TextClassifier if there is no selection.
            invalidateActionMode(null);
        } else {
            resetTextClassificationHelper();
@@ -126,6 +127,11 @@ final class SelectionActionModeHelper {
        return mEditor.getTextView().getTextClassifier() == TextClassifier.NO_OP;
    }

    private boolean hasSelection() {
        final TextView textView = mEditor.getTextView();
        return textView.getSelectionEnd() > textView.getSelectionStart();
    }

    private void startActionMode(@Nullable SelectionResult result) {
        final TextView textView = mEditor.getTextView();
        final CharSequence text = textView.getText();
@@ -311,6 +317,7 @@ final class SelectionActionModeHelper {
                CharSequence text, int selectionStart, int selectionEnd) {
            mTextClassifier = Preconditions.checkNotNull(textClassifier);
            mText = Preconditions.checkNotNull(text).toString();
            Preconditions.checkArgument(selectionEnd > selectionStart);
            mSelectionStart = selectionStart;
            mSelectionEnd = selectionEnd;
        }