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

Commit 7c1e4258 authored by Abodunrinwa Toki's avatar Abodunrinwa Toki
Browse files

Fix crash due to TextView.getText() returning null.

This CL ensures that a null text is not passed to
TextClassificationHelper.reset(...)

This CL does not handle the issue of TextView.getText() being null.

Bug: 65682674
Test: none
Change-Id: Id8bdc062ecf21cc14810586580fef9052672cfd8
parent d35b250a
Loading
Loading
Loading
Loading
+20 −7
Original line number Diff line number Diff line
@@ -85,7 +85,8 @@ public final class SelectionActionModeHelper {
        mEditor = Preconditions.checkNotNull(editor);
        mTextView = mEditor.getTextView();
        mTextClassificationHelper = new TextClassificationHelper(
                mTextView.getTextClassifier(), mTextView.getText(),
                mTextView.getTextClassifier(),
                getText(mTextView),
                0, 1, mTextView.getTextLocales());
        mSelectionTracker = new SelectionTracker(mTextView);

@@ -99,7 +100,7 @@ public final class SelectionActionModeHelper {

    public void startActionModeAsync(boolean adjustSelection) {
        mSelectionTracker.onOriginalSelection(
                mTextView.getText(),
                getText(mTextView),
                mTextView.getSelectionStart(),
                mTextView.getSelectionEnd(),
                mTextView.isTextEditable());
@@ -197,7 +198,7 @@ public final class SelectionActionModeHelper {
    }

    private void startActionMode(@Nullable SelectionResult result) {
        final CharSequence text = mTextView.getText();
        final CharSequence text = getText(mTextView);
        if (result != null && text instanceof Spannable) {
            Selection.setSelection((Spannable) text, result.mStart, result.mEnd);
            mTextClassification = result.mClassification;
@@ -358,7 +359,9 @@ public final class SelectionActionModeHelper {
    }

    private void resetTextClassificationHelper() {
        mTextClassificationHelper.reset(mTextView.getTextClassifier(), mTextView.getText(),
        mTextClassificationHelper.reset(
                mTextView.getTextClassifier(),
                getText(mTextView),
                mTextView.getSelectionStart(), mTextView.getSelectionEnd(),
                mTextView.getTextLocales());
    }
@@ -467,7 +470,7 @@ public final class SelectionActionModeHelper {
            if (isSelectionStarted()
                    && mAllowReset
                    && textIndex >= mSelectionStart && textIndex <= mSelectionEnd
                    && textView.getText() instanceof Spannable) {
                    && getText(textView) instanceof Spannable) {
                mAllowReset = false;
                boolean selected = editor.selectCurrentWord();
                if (selected) {
@@ -723,7 +726,7 @@ public final class SelectionActionModeHelper {
            mSelectionResultSupplier = Preconditions.checkNotNull(selectionResultSupplier);
            mSelectionResultCallback = Preconditions.checkNotNull(selectionResultCallback);
            // Make a copy of the original text.
            mOriginalText = mTextView.getText().toString();
            mOriginalText = getText(mTextView).toString();
        }

        @Override
@@ -739,7 +742,7 @@ public final class SelectionActionModeHelper {
        @Override
        @UiThread
        protected void onPostExecute(SelectionResult result) {
            result = TextUtils.equals(mOriginalText, mTextView.getText()) ? result : null;
            result = TextUtils.equals(mOriginalText, getText(mTextView)) ? result : null;
            mSelectionResultCallback.accept(result);
        }

@@ -888,4 +891,14 @@ public final class SelectionActionModeHelper {
                return SelectionEvent.ActionType.OTHER;
        }
    }

    private static CharSequence getText(TextView textView) {
        // Extracts the textView's text.
        // TODO: Investigate why/when TextView.getText() is null.
        final CharSequence text = textView.getText();
        if (text != null) {
            return text;
        }
        return "";
    }
}