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

Commit b86ca76c authored by Dan Zivkovic's avatar Dan Zivkovic
Browse files

Handle null InputMethodSubtype.

Bug 19627494.

Change-Id: I50dc77c59ced0f2e7c07a49ae0cb040197c2ab35
parent 8eb2fad5
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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() {
+10 −0
Original line number Diff line number Diff line
@@ -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 =
+1 −1
Original line number Diff line number Diff line
@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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);
+7 −0
Original line number Diff line number Diff line
@@ -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());
    }
}