Merge "Add a utility method to SuggestionSpanUtils"

main
Yohei Yukawa 2014-10-06 15:03:19 +00:00 committed by Android (Google) Code Review
commit db6c32778e
2 changed files with 54 additions and 0 deletions

View File

@ -28,9 +28,13 @@ import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.SuggestionSpanPickedNotificationReceiver; import com.android.inputmethod.latin.SuggestionSpanPickedNotificationReceiver;
import com.android.inputmethod.latin.define.DebugFlags; import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.utils.LocaleUtils;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale;
import javax.annotation.Nullable;
public final class SuggestionSpanUtils { public final class SuggestionSpanUtils {
// Note that SuggestionSpan.FLAG_AUTO_CORRECTION has been introduced // 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); spannable.setSpan(suggestionSpan, 0, pickedWord.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannable; 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;
}
} }

View File

@ -178,4 +178,30 @@ public class SuggestionSpanUtilsTest extends AndroidTestCase {
typedAndCollectedWords)); 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}));
}
} }