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

Commit 03c1e795 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Add a utility method to SuggestionSpanUtils

This is a ground work for subsequent CLs.

BUG: 16995261
Change-Id: Icbb708a35412a635a0d625b520069840c0bb0904
parent a48ff4e2
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -28,9 +28,13 @@ import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.SuggestionSpanPickedNotificationReceiver;
import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.utils.LocaleUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Locale;

import javax.annotation.Nullable;

public final class SuggestionSpanUtils {
    // Note that SuggestionSpan.FLAG_AUTO_CORRECTION has been introduced
@@ -98,4 +102,28 @@ public final class SuggestionSpanUtils {
        spannable.setSpan(suggestionSpan, 0, pickedWord.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spannable;
    }

    /**
     * Returns first {@link Locale} found in the given array of {@link SuggestionSpan}.
     * @param suggestionSpans the array of {@link SuggestionSpan} to be examined.
     * @return the first {@link Locale} found in {@code suggestionSpans}. {@code null} when not
     * found.
     */
    @UsedForTesting
    @Nullable
    public static Locale findFirstLocaleFromSuggestionSpans(
            final SuggestionSpan[] suggestionSpans) {
        for (final SuggestionSpan suggestionSpan : suggestionSpans) {
            final String localeString = suggestionSpan.getLocale();
            if (TextUtils.isEmpty(localeString)) {
                continue;
            }
            final Locale locale = LocaleUtils.constructLocaleFromString(localeString);
            if (locale == null) {
                continue;
            }
            return locale;
        }
        return null;
    }
}
+26 −0
Original line number Diff line number Diff line
@@ -178,4 +178,30 @@ public class SuggestionSpanUtilsTest extends AndroidTestCase {
                            typedAndCollectedWords));
        }
    }

    public void testFindFirstLocaleFromSuggestionSpans() {
        final String[] suggestions = new String[] {"Quality", "Speed", "Price"};
        final SuggestionSpan nullLocaleSpan = new SuggestionSpan((Locale)null, suggestions, 0);
        final SuggestionSpan emptyLocaleSpan = new SuggestionSpan(new Locale(""), suggestions, 0);
        final SuggestionSpan enUsLocaleSpan = new SuggestionSpan(Locale.US, suggestions, 0);
        final SuggestionSpan jaJpLocaleSpan = new SuggestionSpan(Locale.JAPAN, suggestions, 0);

        assertEquals(null, SuggestionSpanUtils.findFirstLocaleFromSuggestionSpans(
                new SuggestionSpan[] {}));

        assertEquals(null, SuggestionSpanUtils.findFirstLocaleFromSuggestionSpans(
                new SuggestionSpan[] {emptyLocaleSpan}));

        assertEquals(Locale.US, SuggestionSpanUtils.findFirstLocaleFromSuggestionSpans(
                new SuggestionSpan[] {enUsLocaleSpan}));

        assertEquals(Locale.US, SuggestionSpanUtils.findFirstLocaleFromSuggestionSpans(
                new SuggestionSpan[] {nullLocaleSpan, enUsLocaleSpan}));

        assertEquals(Locale.US, SuggestionSpanUtils.findFirstLocaleFromSuggestionSpans(
                new SuggestionSpan[] {nullLocaleSpan, emptyLocaleSpan, enUsLocaleSpan}));

        assertEquals(Locale.JAPAN, SuggestionSpanUtils.findFirstLocaleFromSuggestionSpans(
                new SuggestionSpan[] {nullLocaleSpan, jaJpLocaleSpan, enUsLocaleSpan}));
    }
}