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

Commit 7fb0ed58 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Move current subtype management code to RichInputMethodManager

Change-Id: I82d5a17a5ec96f26047d29e79f3f28850fc5b3bb
parent 8a2c4afa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ public class AdditionalFeaturesSettingUtils {
        // do nothing.
    }

    @Nonnull
    public static RichInputMethodSubtype createRichInputMethodSubtype(
            @Nonnull final RichInputMethodManager imm,
            @Nonnull final InputMethodSubtype subtype,
+3 −2
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
        final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
        final int keyboardHeight = ResourceUtils.getKeyboardHeight(res, settingsValues);
        builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
        builder.setSubtype(mSubtypeSwitcher.getCurrentSubtype());
        builder.setSubtype(RichInputMethodManager.getInstance().getCurrentSubtype());
        builder.setVoiceInputKeyEnabled(settingsValues.mShowsVoiceInputKey);
        builder.setLanguageSwitchKeyEnabled(mLatinIME.shouldShowLanguageSwitchKey());
        builder.setSplitLayoutEnabledByUser(ProductionFlags.IS_SPLIT_KEYBOARD_SUPPORTED
@@ -123,7 +123,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
        try {
            mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState);
            // TODO: revisit this for multi-lingual input
            mKeyboardTextsSet.setLocale(mSubtypeSwitcher.getCurrentSubtypeLocales()[0],
            mKeyboardTextsSet.setLocale(
                    RichInputMethodManager.getInstance().getCurrentSubtypeLocales()[0],
                    mThemeContext);
        } catch (KeyboardLayoutSetException e) {
            Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause());
+6 −6
Original line number Diff line number Diff line
@@ -603,7 +603,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    // Has to be package-visible for unit tests
    @UsedForTesting
    void loadSettings() {
        final Locale[] locales = mSubtypeSwitcher.getCurrentSubtypeLocales();
        final Locale[] locales = mRichImm.getCurrentSubtypeLocales();
        final EditorInfo editorInfo = getCurrentInputEditorInfo();
        final InputAttributes inputAttributes = new InputAttributes(
                editorInfo, isFullscreenMode(), getPackageName());
@@ -657,7 +657,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    }

    void resetDictionaryFacilitatorIfNecessary() {
        final Locale[] subtypeSwitcherLocales = mSubtypeSwitcher.getCurrentSubtypeLocales();
        final Locale[] subtypeSwitcherLocales = mRichImm.getCurrentSubtypeLocales();
        if (mDictionaryFacilitator.isForLocales(subtypeSwitcherLocales)) {
            return;
        }
@@ -909,7 +909,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        // Update to a gesture consumer with the current editor and IME state.
        mGestureConsumer = GestureConsumer.newInstance(editorInfo,
                mInputLogic.getPrivateCommandPerformer(),
                Arrays.asList(mSubtypeSwitcher.getCurrentSubtypeLocales()),
                Arrays.asList(mRichImm.getCurrentSubtypeLocales()),
                switcher.getKeyboard());

        // Forward this event to the accessibility utilities, if enabled.
@@ -947,7 +947,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
            // span, so we should reset our state unconditionally, even if restarting is true.
            // We also tell the input logic about the combining rules for the current subtype, so
            // it can adjust its combiners if needed.
            mInputLogic.startInput(mSubtypeSwitcher.getCombiningRulesExtraValueOfCurrentSubtype(),
            mInputLogic.startInput(mRichImm.getCombiningRulesExtraValueOfCurrentSubtype(),
                    currentSettingsValues);

            resetDictionaryFacilitatorIfNecessary();
@@ -1468,7 +1468,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    public void onStartBatchInput() {
        mInputLogic.onStartBatchInput(mSettings.getCurrent(), mKeyboardSwitcher, mHandler);
        mGestureConsumer.onGestureStarted(
                Arrays.asList(mSubtypeSwitcher.getCurrentSubtypeLocales()),
                Arrays.asList(mRichImm.getCurrentSubtypeLocales()),
                mKeyboardSwitcher.getKeyboard());
    }

@@ -1590,7 +1590,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                // We should clear the contextual strip if there is no suggestion from dictionaries.
                || noSuggestionsFromDictionaries) {
            mSuggestionStripView.setSuggestions(suggestedWords,
                    mSubtypeSwitcher.getCurrentSubtype().isRtlSubtype());
                    mRichImm.getCurrentSubtype().isRtlSubtype());
        }
    }

+39 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.settings.AdditionalFeaturesSettingUtils;
@@ -68,6 +69,7 @@ public class RichInputMethodManager {
    private Context mContext;
    private InputMethodManagerCompatWrapper mImmWrapper;
    private InputMethodInfoCache mInputMethodInfoCache;
    private RichInputMethodSubtype mCurrentRichInputMethodSubtype;
    private InputMethodInfo mShortcutInputMethodInfo;
    private InputMethodSubtype mShortcutSubtype;
    private boolean mIsNetworkConnected;
@@ -323,11 +325,48 @@ public class RichInputMethodManager {
        return INDEX_NOT_FOUND;
    }

    @Nonnull
    public RichInputMethodSubtype onSubtypeChanged(@Nonnull final InputMethodSubtype newSubtype) {
        final RichInputMethodSubtype richSubtype = createCurrentRichInputMethodSubtype(newSubtype);
        if (DEBUG) {
            Log.w(TAG, "onSubtypeChanged: " + richSubtype.getNameForLogging());
        }
        mCurrentRichInputMethodSubtype = richSubtype;
        return richSubtype;
    }

    private static RichInputMethodSubtype sForcedSubtypeForTesting = null;

    @UsedForTesting
    static void forceSubtype(final InputMethodSubtype subtype) {
        sForcedSubtypeForTesting = new RichInputMethodSubtype(subtype);
    }

    public Locale[] getCurrentSubtypeLocales() {
        if (null != sForcedSubtypeForTesting) {
            return sForcedSubtypeForTesting.getLocales();
        }
        return getCurrentSubtype().getLocales();
    }

    public RichInputMethodSubtype getCurrentSubtype() {
        if (null != sForcedSubtypeForTesting) {
            return sForcedSubtypeForTesting;
        }
        return mCurrentRichInputMethodSubtype;
    }


    public String getCombiningRulesExtraValueOfCurrentSubtype() {
        return SubtypeLocaleUtils.getCombiningRulesExtraValue(getCurrentSubtype().getRawSubtype());
    }

    @Nonnull
    public InputMethodSubtype getCurrentRawSubtype() {
        return mImmWrapper.mImm.getCurrentInputMethodSubtype();
    }

    @Nonnull
    public RichInputMethodSubtype createCurrentRichInputMethodSubtype(
            @Nonnull final InputMethodSubtype rawSubtype) {
        return AdditionalFeaturesSettingUtils.createRichInputMethodSubtype(this, rawSubtype,
+1 −38
Original line number Diff line number Diff line
@@ -18,12 +18,9 @@ package com.android.inputmethod.latin;

import android.content.Context;
import android.content.res.Resources;
import android.util.Log;
import android.view.inputmethod.InputMethodSubtype;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.internal.LanguageOnSpacebarHelper;
import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;

import java.util.List;
@@ -32,9 +29,6 @@ import java.util.Locale;
import javax.annotation.Nonnull;

public final class SubtypeSwitcher {
    private static boolean DBG = DebugFlags.DEBUG_ENABLED;
    private static final String TAG = SubtypeSwitcher.class.getSimpleName();

    private static final SubtypeSwitcher sInstance = new SubtypeSwitcher();

    private /* final */ RichInputMethodManager mRichImm;
@@ -42,7 +36,6 @@ public final class SubtypeSwitcher {

    private final LanguageOnSpacebarHelper mLanguageOnSpacebarHelper =
            new LanguageOnSpacebarHelper();
    private RichInputMethodSubtype mCurrentRichInputMethodSubtype;

    public static SubtypeSwitcher getInstance() {
        return sInstance;
@@ -82,12 +75,7 @@ public final class SubtypeSwitcher {

    // Update the current subtype. LatinIME.onCurrentInputMethodSubtypeChanged calls this function.
    public void onSubtypeChanged(@Nonnull final InputMethodSubtype newSubtype) {
        final RichInputMethodSubtype richSubtype =
                mRichImm.createCurrentRichInputMethodSubtype(newSubtype);
        if (DBG) {
            Log.w(TAG, "onSubtypeChanged: " + richSubtype.getNameForLogging());
        }
        mCurrentRichInputMethodSubtype = richSubtype;
        final RichInputMethodSubtype richSubtype = mRichImm.onSubtypeChanged(newSubtype);
        final Locale[] newLocales = richSubtype.getLocales();
        if (newLocales.length > 1) {
            // In multi-locales mode, the system language is never the same as the input language
@@ -109,29 +97,4 @@ public final class SubtypeSwitcher {
    public int getLanguageOnSpacebarFormatType(final RichInputMethodSubtype subtype) {
        return mLanguageOnSpacebarHelper.getLanguageOnSpacebarFormatType(subtype);
    }

    private static RichInputMethodSubtype sForcedSubtypeForTesting = null;

    @UsedForTesting
    static void forceSubtype(final InputMethodSubtype subtype) {
        sForcedSubtypeForTesting = new RichInputMethodSubtype(subtype);
    }

    public Locale[] getCurrentSubtypeLocales() {
        if (null != sForcedSubtypeForTesting) {
            return sForcedSubtypeForTesting.getLocales();
        }
        return getCurrentSubtype().getLocales();
    }

    public RichInputMethodSubtype getCurrentSubtype() {
        if (null != sForcedSubtypeForTesting) {
            return sForcedSubtypeForTesting;
        }
        return mCurrentRichInputMethodSubtype;
    }

    public String getCombiningRulesExtraValueOfCurrentSubtype() {
        return SubtypeLocaleUtils.getCombiningRulesExtraValue(getCurrentSubtype().getRawSubtype());
    }
}
Loading