aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Zivkovic <zivkovic@google.com>2015-03-06 14:34:57 -0800
committerDan Zivkovic <zivkovic@google.com>2015-03-06 14:34:57 -0800
commitb86ca76cea9aedf47a81f9272fb59897de3bbbe7 (patch)
treef971bdc960031555d1092ee0a7304e24d0ad8b94
parent8eb2fad5702d4d58476a015a5469a4d84adf4bbc (diff)
downloadlatinime-b86ca76cea9aedf47a81f9272fb59897de3bbbe7.tar.gz
latinime-b86ca76cea9aedf47a81f9272fb59897de3bbbe7.tar.xz
latinime-b86ca76cea9aedf47a81f9272fb59897de3bbbe7.zip
Handle null InputMethodSubtype.
Bug 19627494. Change-Id: I50dc77c59ced0f2e7c07a49ae0cb040197c2ab35
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputMethodManager.java7
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java10
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java2
-rw-r--r--tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java2
-rw-r--r--tests/src/com/android/inputmethod/latin/RichInputMethodSubtypeTests.java7
5 files changed, 23 insertions, 5 deletions
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
index c8e0b93bf..602205b59 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -46,6 +46,7 @@ import java.util.Map;
import java.util.Set;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
/**
* Enrichment class for InputMethodManager to simplify interaction and add functionality.
@@ -329,7 +330,7 @@ public class RichInputMethodManager {
@UsedForTesting
static void forceSubtype(@Nonnull final InputMethodSubtype subtype) {
- sForcedSubtypeForTesting = new RichInputMethodSubtype(subtype);
+ sForcedSubtypeForTesting = RichInputMethodSubtype.getRichInputMethodSubtype(subtype);
}
@Nonnull
@@ -488,8 +489,8 @@ public class RichInputMethodManager {
return true;
}
- private void updateCurrentSubtype(@Nonnull final InputMethodSubtype subtype) {
- mCurrentRichInputMethodSubtype = new RichInputMethodSubtype(subtype);
+ private void updateCurrentSubtype(@Nullable final InputMethodSubtype subtype) {
+ mCurrentRichInputMethodSubtype = RichInputMethodSubtype.getRichInputMethodSubtype(subtype);
}
private void updateShortcutIme() {
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java b/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
index ea8d4a210..8734e5925 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodSubtype.java
@@ -30,6 +30,7 @@ import java.util.Arrays;
import java.util.Locale;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
/**
* Enrichment class for InputMethodSubtype to enable concurrent multi-lingual input.
@@ -147,6 +148,15 @@ public final class RichInputMethodSubtype {
return SubtypeLocaleUtils.getKeyboardLayoutSetName(mSubtype);
}
+ public static RichInputMethodSubtype getRichInputMethodSubtype(
+ @Nullable final InputMethodSubtype subtype) {
+ if (subtype == null) {
+ return getNoLanguageSubtype();
+ } else {
+ return new RichInputMethodSubtype(subtype);
+ }
+ }
+
// Dummy no language QWERTY subtype. See {@link R.xml.method}.
private static final int SUBTYPE_ID_OF_DUMMY_NO_LANGUAGE_SUBTYPE = 0xdde0bfd3;
private static final String EXTRA_VALUE_OF_DUMMY_NO_LANGUAGE_SUBTYPE =
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index f04f093f0..ff0578d13 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -260,7 +260,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(this, editorInfo);
builder.setKeyboardGeometry(
SPELLCHECKER_DUMMY_KEYBOARD_WIDTH, SPELLCHECKER_DUMMY_KEYBOARD_HEIGHT);
- builder.setSubtype(new RichInputMethodSubtype(subtype));
+ builder.setSubtype(RichInputMethodSubtype.getRichInputMethodSubtype(subtype));
builder.setIsSpellChecker(true /* isSpellChecker */);
builder.disableTouchPositionCorrectionData();
return builder.build();
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
index 7f828111d..29787acc9 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java
@@ -159,7 +159,7 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase {
final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
final Builder builder = new Builder(context, editorInfo);
builder.setKeyboardGeometry(keyboardWidth, keyboardHeight)
- .setSubtype(new RichInputMethodSubtype(subtype))
+ .setSubtype(RichInputMethodSubtype.getRichInputMethodSubtype(subtype))
.setVoiceInputKeyEnabled(voiceInputKeyEnabled)
.setLanguageSwitchKeyEnabled(languageSwitchKeyEnabled)
.setSplitLayoutEnabledByUser(splitLayoutEnabled);
diff --git a/tests/src/com/android/inputmethod/latin/RichInputMethodSubtypeTests.java b/tests/src/com/android/inputmethod/latin/RichInputMethodSubtypeTests.java
index 9c8e16511..d59890a96 100644
--- a/tests/src/com/android/inputmethod/latin/RichInputMethodSubtypeTests.java
+++ b/tests/src/com/android/inputmethod/latin/RichInputMethodSubtypeTests.java
@@ -318,4 +318,11 @@ public class RichInputMethodSubtypeTests extends AndroidTestCase {
public void testAdditionalSubtypeForSpacebarInFrench() {
testsAdditionalSubtypesForSpacebar.runInLocale(mRes, Locale.FRENCH);
}
+
+ public void testRichInputMethodSubtypeForNullInputMethodSubtype() {
+ RichInputMethodSubtype subtype = RichInputMethodSubtype.getRichInputMethodSubtype(null);
+ assertNotNull(subtype);
+ assertEquals("zz", subtype.getRawSubtype().getLocale());
+ assertEquals("keyboard", subtype.getRawSubtype().getMode());
+ }
}