Search in sources :

Example 21 with SuggestionSpan

use of android.text.style.SuggestionSpan in project android_frameworks_base by ParanoidAndroid.

the class TextView method removeSuggestionSpans.

/**
     * Removes the suggestion spans.
     */
CharSequence removeSuggestionSpans(CharSequence text) {
    if (text instanceof Spanned) {
        Spannable spannable;
        if (text instanceof Spannable) {
            spannable = (Spannable) text;
        } else {
            spannable = new SpannableString(text);
            text = spannable;
        }
        SuggestionSpan[] spans = spannable.getSpans(0, text.length(), SuggestionSpan.class);
        for (int i = 0; i < spans.length; i++) {
            spannable.removeSpan(spans[i]);
        }
    }
    return text;
}
Also used : SpannableString(android.text.SpannableString) SuggestionSpan(android.text.style.SuggestionSpan) Spanned(android.text.Spanned) Spannable(android.text.Spannable) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint)

Example 22 with SuggestionSpan

use of android.text.style.SuggestionSpan in project android_frameworks_base by ParanoidAndroid.

the class EditableInputConnection method commitText.

@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
    if (mTextView == null) {
        return super.commitText(text, newCursorPosition);
    }
    if (text instanceof Spanned) {
        Spanned spanned = ((Spanned) text);
        SuggestionSpan[] spans = spanned.getSpans(0, text.length(), SuggestionSpan.class);
        mIMM.registerSuggestionSpansForNotification(spans);
    }
    mTextView.resetErrorChangedFlag();
    boolean success = super.commitText(text, newCursorPosition);
    mTextView.hideErrorIfUnchanged();
    return success;
}
Also used : SuggestionSpan(android.text.style.SuggestionSpan) Spanned(android.text.Spanned)

Example 23 with SuggestionSpan

use of android.text.style.SuggestionSpan in project android_frameworks_base by AOSPA.

the class SuggestionsPopupWindowTest method testInsertionActionMode.

@SmallTest
public void testInsertionActionMode() {
    final String text = "abc def ghi";
    onView(withId(R.id.textview)).perform(click());
    onView(withId(R.id.textview)).perform(replaceText(text));
    final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(), new String[] { "DEF", "Def" }, SuggestionSpan.FLAG_AUTO_CORRECTION);
    setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);
    onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('e')));
    onHandleView(com.android.internal.R.id.insertion_handle).perform(click());
    sleepForFloatingToolbarPopup();
    assertFloatingToolbarContainsItem(getActivity().getString(com.android.internal.R.string.replace));
    clickFloatingToolbarItem(getActivity().getString(com.android.internal.R.string.replace));
    assertSuggestionsPopupIsDisplayed();
}
Also used : SuggestionSpan(android.text.style.SuggestionSpan) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 24 with SuggestionSpan

use of android.text.style.SuggestionSpan in project android_frameworks_base by AOSPA.

the class SuggestionsPopupWindowTest method testEasyCorrect.

@SmallTest
public void testEasyCorrect() {
    final String text = "abc def ghi";
    onView(withId(R.id.textview)).perform(click());
    onView(withId(R.id.textview)).perform(replaceText(text));
    final SuggestionSpan suggestionSpan = new SuggestionSpan(getActivity(), new String[] { "DEF", "Def" }, SuggestionSpan.FLAG_EASY_CORRECT | SuggestionSpan.FLAG_MISSPELLED);
    setSuggestionSpan(suggestionSpan, text.indexOf('d'), text.indexOf('f') + 1);
    onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('e')));
    assertSuggestionsPopupIsDisplayed();
    assertSuggestionsPopupContainsItem("DEF");
    assertSuggestionsPopupContainsItem("Def");
    assertSuggestionsPopupContainsItem(getActivity().getString(com.android.internal.R.string.delete));
    // Select an item.
    clickSuggestionsPopupItem("DEF");
    assertSuggestionsPopupIsNotDisplayed();
    onView(withId(R.id.textview)).check(matches(withText("abc DEF ghi")));
    onView(withId(R.id.textview)).perform(clickOnTextAtIndex(text.indexOf('e')));
    assertSuggestionsPopupIsNotDisplayed();
    showSuggestionsPopup();
    assertSuggestionsPopupIsDisplayed();
    assertSuggestionsPopupContainsItem("def");
    assertSuggestionsPopupContainsItem("Def");
    assertSuggestionsPopupContainsItem(getActivity().getString(com.android.internal.R.string.delete));
}
Also used : SuggestionSpan(android.text.style.SuggestionSpan) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 25 with SuggestionSpan

use of android.text.style.SuggestionSpan in project android_frameworks_base by AOSPA.

the class Editor method replaceWithSuggestion.

private void replaceWithSuggestion(@NonNull final SuggestionInfo suggestionInfo) {
    final SuggestionSpan targetSuggestionSpan = findEquivalentSuggestionSpan(suggestionInfo.mSuggestionSpanInfo);
    if (targetSuggestionSpan == null) {
        // Span has been removed
        return;
    }
    final Editable editable = (Editable) mTextView.getText();
    final int spanStart = editable.getSpanStart(targetSuggestionSpan);
    final int spanEnd = editable.getSpanEnd(targetSuggestionSpan);
    if (spanStart < 0 || spanEnd <= spanStart) {
        // Span has been removed
        return;
    }
    final String originalText = TextUtils.substring(editable, spanStart, spanEnd);
    // SuggestionSpans are removed by replace: save them before
    SuggestionSpan[] suggestionSpans = editable.getSpans(spanStart, spanEnd, SuggestionSpan.class);
    final int length = suggestionSpans.length;
    int[] suggestionSpansStarts = new int[length];
    int[] suggestionSpansEnds = new int[length];
    int[] suggestionSpansFlags = new int[length];
    for (int i = 0; i < length; i++) {
        final SuggestionSpan suggestionSpan = suggestionSpans[i];
        suggestionSpansStarts[i] = editable.getSpanStart(suggestionSpan);
        suggestionSpansEnds[i] = editable.getSpanEnd(suggestionSpan);
        suggestionSpansFlags[i] = editable.getSpanFlags(suggestionSpan);
        // Remove potential misspelled flags
        int suggestionSpanFlags = suggestionSpan.getFlags();
        if ((suggestionSpanFlags & SuggestionSpan.FLAG_MISSPELLED) != 0) {
            suggestionSpanFlags &= ~SuggestionSpan.FLAG_MISSPELLED;
            suggestionSpanFlags &= ~SuggestionSpan.FLAG_EASY_CORRECT;
            suggestionSpan.setFlags(suggestionSpanFlags);
        }
    }
    // Notify source IME of the suggestion pick. Do this before swapping texts.
    targetSuggestionSpan.notifySelection(mTextView.getContext(), originalText, suggestionInfo.mSuggestionIndex);
    // Swap text content between actual text and Suggestion span
    final int suggestionStart = suggestionInfo.mSuggestionStart;
    final int suggestionEnd = suggestionInfo.mSuggestionEnd;
    final String suggestion = suggestionInfo.mText.subSequence(suggestionStart, suggestionEnd).toString();
    mTextView.replaceText_internal(spanStart, spanEnd, suggestion);
    String[] suggestions = targetSuggestionSpan.getSuggestions();
    suggestions[suggestionInfo.mSuggestionIndex] = originalText;
    // Restore previous SuggestionSpans
    final int lengthDelta = suggestion.length() - (spanEnd - spanStart);
    for (int i = 0; i < length; i++) {
        // way to assign them a valid range after replacement
        if (suggestionSpansStarts[i] <= spanStart && suggestionSpansEnds[i] >= spanEnd) {
            mTextView.setSpan_internal(suggestionSpans[i], suggestionSpansStarts[i], suggestionSpansEnds[i] + lengthDelta, suggestionSpansFlags[i]);
        }
    }
    // Move cursor at the end of the replaced word
    final int newCursorPosition = spanEnd + lengthDelta;
    mTextView.setCursorPosition_internal(newCursorPosition, newCursorPosition);
}
Also used : Editable(android.text.Editable) SuggestionSpan(android.text.style.SuggestionSpan) Paint(android.graphics.Paint)

Aggregations

SuggestionSpan (android.text.style.SuggestionSpan)114 Paint (android.graphics.Paint)43 SmallTest (android.test.suitebuilder.annotation.SmallTest)35 Spannable (android.text.Spannable)29 Spanned (android.text.Spanned)24 Editable (android.text.Editable)21 TextPaint (android.text.TextPaint)21 SpannableString (android.text.SpannableString)14 View (android.view.View)10 SpannableStringBuilder (android.text.SpannableStringBuilder)7 SpellCheckSpan (android.text.style.SpellCheckSpan)7 Nullable (android.annotation.Nullable)5 TypedArray (android.content.res.TypedArray)5 Espresso.onView (android.support.test.espresso.Espresso.onView)5 NoMatchingViewException (android.support.test.espresso.NoMatchingViewException)5 ViewAssertion (android.support.test.espresso.ViewAssertion)5 RootMatchers.withDecorView (android.support.test.espresso.matcher.RootMatchers.withDecorView)5 BackgroundColorSpan (android.text.style.BackgroundColorSpan)5 ForegroundColorSpan (android.text.style.ForegroundColorSpan)5 ImageSpan (android.text.style.ImageSpan)5