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

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

Remove CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED boolean

Bug: 6129704
Change-Id: I7643e656c6e7656eff339cc301dd32f34dee83a4
parent b1904ec2
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -21,9 +21,6 @@
    <PreferenceCategory
        android:title="@string/general_category"
        android:key="general_settings">
        <PreferenceScreen
            android:key="subtype_settings"
            android:title="@string/language_selection_title" />
        <CheckBoxPreference
            android:key="auto_cap"
            android:title="@string/auto_cap"
+9 −16
Original line number Diff line number Diff line
@@ -35,14 +35,9 @@ public class CompatUtils {

    public static Intent getInputLanguageSelectionIntent(String inputMethodId,
            int flagsForSubtypeSettings) {
        final String action;
        Intent intent;
        if (InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED
                /* android.os.Build.VERSION_CODES.HONEYCOMB */
                && android.os.Build.VERSION.SDK_INT >=  11) {
        // Refer to android.provider.Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS
            action = INPUT_METHOD_SUBTYPE_SETTINGS;
            intent = new Intent(action);
        final String action = INPUT_METHOD_SUBTYPE_SETTINGS;
        final Intent intent = new Intent(action);
        if (!TextUtils.isEmpty(inputMethodId)) {
            intent.putExtra(EXTRA_INPUT_METHOD_ID, inputMethodId);
        }
@@ -51,8 +46,6 @@ public class CompatUtils {
        }
        return intent;
    }
        throw new RuntimeException("Language selection doesn't supported on this platform");
    }

    public static Class<?> getClass(String className) {
        try {
+4 −76
Original line number Diff line number Diff line
@@ -17,23 +17,15 @@
package com.android.inputmethod.compat;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.IBinder;
import android.text.TextUtils;
import android.util.Log;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;

import com.android.inputmethod.latin.SubtypeSwitcher;
import com.android.inputmethod.latin.SubtypeUtils;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

// TODO: Override this class with the concrete implementation if we need to take care of the
@@ -61,18 +53,7 @@ public class InputMethodManagerCompatWrapper {
    private static final InputMethodManagerCompatWrapper sInstance =
            new InputMethodManagerCompatWrapper();

    // For the compatibility, IMM will create dummy subtypes if subtypes are not found.
    // This is required to be false if the current behavior is broken. For now, it's ok to be true.
    public static final boolean FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES =
            !InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED;
    private static final String VOICE_MODE = "voice";
    private static final String KEYBOARD_MODE = "keyboard";

    private InputMethodServiceCompatWrapper mService;
    private InputMethodManager mImm;
    private PackageManager mPackageManager;
    private ApplicationInfo mApplicationInfo;
    private String mLatinImePackageName;

    public static InputMethodManagerCompatWrapper getInstance() {
        if (sInstance.mImm == null)
@@ -81,12 +62,8 @@ public class InputMethodManagerCompatWrapper {
    }

    public static void init(InputMethodServiceCompatWrapper service) {
        sInstance.mService = service;
        sInstance.mImm = (InputMethodManager) service.getSystemService(
                Context.INPUT_METHOD_SERVICE);
        sInstance.mLatinImePackageName = service.getPackageName();
        sInstance.mPackageManager = service.getPackageManager();
        sInstance.mApplicationInfo = service.getApplicationInfo();
    }

    public InputMethodSubtypeCompatWrapper getCurrentInputMethodSubtype() {
@@ -104,68 +81,19 @@ public class InputMethodManagerCompatWrapper {
        Object retval = CompatUtils.invoke(mImm, null, METHOD_getEnabledInputMethodSubtypeList,
                imi, allowsImplicitlySelectedSubtypes);
        if (retval == null || !(retval instanceof List<?>) || ((List<?>)retval).isEmpty()) {
            if (!FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES) {
            // Returns an empty list
            return Collections.emptyList();
        }
            // Creates dummy subtypes
            @SuppressWarnings("unused")
            List<InputMethodSubtypeCompatWrapper> subtypeList =
                    new ArrayList<InputMethodSubtypeCompatWrapper>();
            InputMethodSubtypeCompatWrapper keyboardSubtype = getLastResortSubtype(KEYBOARD_MODE);
            InputMethodSubtypeCompatWrapper voiceSubtype = getLastResortSubtype(VOICE_MODE);
            if (keyboardSubtype != null) {
                subtypeList.add(keyboardSubtype);
            }
            if (voiceSubtype != null) {
                subtypeList.add(voiceSubtype);
            }
            return subtypeList;
        }
        return CompatUtils.copyInputMethodSubtypeListToWrapper(retval);
    }

    private InputMethodInfo getLatinImeInputMethodInfo() {
        if (TextUtils.isEmpty(mLatinImePackageName))
            return null;
        return SubtypeUtils.getInputMethodInfo(mLatinImePackageName);
    }

    private static InputMethodSubtypeCompatWrapper getLastResortSubtype(String mode) {
        if (VOICE_MODE.equals(mode) && !FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES)
            return null;
        Locale inputLocale = SubtypeSwitcher.getInstance().getInputLocale();
        if (inputLocale == null)
            return null;
        return new InputMethodSubtypeCompatWrapper(0, 0, inputLocale.toString(), mode, "");
    }

    public Map<InputMethodInfo, List<InputMethodSubtypeCompatWrapper>>
            getShortcutInputMethodsAndSubtypes() {
        Object retval = CompatUtils.invoke(mImm, null, METHOD_getShortcutInputMethodsAndSubtypes);
        if (retval == null || !(retval instanceof Map<?, ?>) || ((Map<?, ?>)retval).isEmpty()) {
            if (!FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES) {
            // Returns an empty map
            return Collections.emptyMap();
        }
            // Creates dummy subtypes
            @SuppressWarnings("unused")
            InputMethodInfo imi = getLatinImeInputMethodInfo();
            InputMethodSubtypeCompatWrapper voiceSubtype = getLastResortSubtype(VOICE_MODE);
            if (imi != null && voiceSubtype != null) {
                Map<InputMethodInfo, List<InputMethodSubtypeCompatWrapper>>
                        shortcutMap =
                                new HashMap<InputMethodInfo,
                                        List<InputMethodSubtypeCompatWrapper>>();
                List<InputMethodSubtypeCompatWrapper> subtypeList =
                        new ArrayList<InputMethodSubtypeCompatWrapper>();
                subtypeList.add(voiceSubtype);
                shortcutMap.put(imi, subtypeList);
                return shortcutMap;
            } else {
                return Collections.emptyMap();
            }
        }
        Map<InputMethodInfo, List<InputMethodSubtypeCompatWrapper>> shortcutMap =
                new HashMap<InputMethodInfo, List<InputMethodSubtypeCompatWrapper>>();
        final Map<?, ?> retvalMap = (Map<?, ?>)retval;
+0 −37
Original line number Diff line number Diff line
@@ -27,15 +27,6 @@ import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.SubtypeSwitcher;

public class InputMethodServiceCompatWrapper extends InputMethodService {
    // CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED needs to be false if the API level is 10
    // or previous. Note that InputMethodSubtype was added in the API level 11.
    // For the API level 11 or later, LatinIME should override onCurrentInputMethodSubtypeChanged().
    // For the API level 10 or previous, we handle the "subtype changed" events by ourselves
    // without having support from framework -- onCurrentInputMethodSubtypeChanged().
    public static final boolean CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED = true;

    private InputMethodManagerCompatWrapper mImm;

    // For compatibility of {@link InputMethodManager#showInputMethodPicker}.
    // TODO: Move this variable back to LatinIME when this compatibility wrapper is removed.
    protected AlertDialog mOptionsDialog;
@@ -62,32 +53,6 @@ public class InputMethodServiceCompatWrapper extends InputMethodService {
    @Override
    public void onCreate() {
        super.onCreate();
        mImm = InputMethodManagerCompatWrapper.getInstance();
    }

    // When the API level is 10 or previous, notifyOnCurrentInputMethodSubtypeChanged should
    // handle the event the current subtype was changed. LatinIME calls
    // notifyOnCurrentInputMethodSubtypeChanged every time LatinIME
    // changes the current subtype.
    // This call is required to let LatinIME itself know a subtype changed
    // event when the API level is 10 or previous.
    @SuppressWarnings("unused")
    public void notifyOnCurrentInputMethodSubtypeChanged(
            InputMethodSubtypeCompatWrapper newSubtype) {
        // Do nothing when the API level is 11 or later
        // and FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES is not true
        if (CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED && !InputMethodManagerCompatWrapper.
                FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES) {
            return;
        }
        final InputMethodSubtypeCompatWrapper subtype = (newSubtype == null)
                ? mImm.getCurrentInputMethodSubtype()
                : newSubtype;
        if (subtype != null) {
            if (!InputMethodManagerCompatWrapper.FORCE_ENABLE_VOICE_EVEN_WITH_NO_VOICE_SUBTYPES
                    && !subtype.isDummy()) return;
            SubtypeSwitcher.getInstance().updateSubtype(subtype);
        }
    }

    //////////////////////////////////////
@@ -95,8 +60,6 @@ public class InputMethodServiceCompatWrapper extends InputMethodService {
    //////////////////////////////////////
    @Override
    public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype) {
        // Do nothing when the API level is 10 or previous
        if (!CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED) return;
        SubtypeSwitcher.getInstance().updateSubtype(
                new InputMethodSubtypeCompatWrapper(subtype));
    }
+1 −41
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.inputmethod.latin;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.app.backup.BackupManager;
import android.content.Context;
@@ -34,31 +33,20 @@ import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

import com.android.inputmethod.compat.CompatUtils;
import com.android.inputmethod.compat.InputMethodServiceCompatWrapper;
import com.android.inputmethod.latin.VibratorUtils;
import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethodcommon.InputMethodSettingsActivity;

import java.util.Locale;

public class Settings extends InputMethodSettingsActivity
        implements SharedPreferences.OnSharedPreferenceChangeListener, OnPreferenceClickListener {
    private static final String TAG = Settings.class.getSimpleName();

        implements SharedPreferences.OnSharedPreferenceChangeListener {
    public static final boolean ENABLE_EXPERIMENTAL_SETTINGS = false;

    // In the same order as xml/prefs.xml
    public static final String PREF_GENERAL_SETTINGS = "general_settings";
    public static final String PREF_SUBTYPES_SETTINGS = "subtype_settings";
    public static final String PREF_AUTO_CAP = "auto_cap";
    public static final String PREF_VIBRATE_ON = "vibrate_on";
    public static final String PREF_SOUND_ON = "sound_on";
@@ -90,7 +78,6 @@ public class Settings extends InputMethodSettingsActivity
    public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
    public static final String PREF_DEBUG_SETTINGS = "debug_settings";

    private PreferenceScreen mInputLanguageSelection;
    private PreferenceScreen mKeypressVibrationDurationSettingsPref;
    private PreferenceScreen mKeypressSoundVolumeSettingsPref;
    private ListPreference mVoicePreference;
@@ -102,14 +89,10 @@ public class Settings extends InputMethodSettingsActivity
    // Prediction: use bigrams to predict the next word when there is no input for it yet
    private CheckBoxPreference mBigramPrediction;
    private Preference mDebugSettingsPreference;
    private boolean mVoiceOn;

    private AlertDialog mDialog;
    private TextView mKeypressVibrationDurationSettingsTextView;
    private TextView mKeypressSoundVolumeSettingsTextView;

    private String mVoiceModeOff;

    private void ensureConsistencyOfAutoCorrectionSettings() {
        final String autoCorrectionOff = getResources().getString(
                R.string.auto_correction_threshold_mode_index_off);
@@ -140,18 +123,12 @@ public class Settings extends InputMethodSettingsActivity
        final Context context = getActivityInternal();

        addPreferencesFromResource(R.xml.prefs);
        mInputLanguageSelection = (PreferenceScreen) findPreference(PREF_SUBTYPES_SETTINGS);
        mInputLanguageSelection.setOnPreferenceClickListener(this);
        mVoicePreference = (ListPreference) findPreference(PREF_VOICE_MODE);
        mShowCorrectionSuggestionsPreference =
                (ListPreference) findPreference(PREF_SHOW_SUGGESTIONS_SETTING);
        SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
        prefs.registerOnSharedPreferenceChangeListener(this);

        mVoiceModeOff = getString(R.string.voice_mode_off);
        mVoiceOn = !(prefs.getString(PREF_VOICE_MODE, mVoiceModeOff)
                .equals(mVoiceModeOff));

        mAutoCorrectionThresholdPreference =
                (ListPreference) findPreference(PREF_AUTO_CORRECTION_THRESHOLD);
        mBigramSuggestion = (CheckBoxPreference) findPreference(PREF_BIGRAM_SUGGESTION);
@@ -183,10 +160,6 @@ public class Settings extends InputMethodSettingsActivity
            generalSettings.removePreference(findPreference(PREF_VIBRATE_ON));
        }

        if (InputMethodServiceCompatWrapper.CAN_HANDLE_ON_CURRENT_INPUT_METHOD_SUBTYPE_CHANGED) {
            generalSettings.removePreference(findPreference(PREF_SUBTYPES_SETTINGS));
        }

        final boolean showPopupOption = res.getBoolean(
                R.bool.config_enable_show_popup_on_keypress_option);
        if (!showPopupOption) {
@@ -318,25 +291,12 @@ public class Settings extends InputMethodSettingsActivity
                    !SettingsValues.isLanguageSwitchKeySupressed(prefs));
        }
        ensureConsistencyOfAutoCorrectionSettings();
        mVoiceOn = !(prefs.getString(PREF_VOICE_MODE, mVoiceModeOff)
                .equals(mVoiceModeOff));
        updateVoiceModeSummary();
        updateShowCorrectionSuggestionsSummary();
        updateKeyPreviewPopupDelaySummary();
        refreshEnablingsOfKeypressSoundAndVibrationSettings(prefs, getResources());
    }

    @Override
    public boolean onPreferenceClick(Preference pref) {
        if (pref == mInputLanguageSelection) {
            final String imeId = SubtypeUtils.getInputMethodId(
                    getActivityInternal().getApplicationInfo().packageName);
            startActivity(CompatUtils.getInputLanguageSelectionIntent(imeId, 0));
            return true;
        }
        return false;
    }

    private void updateShowCorrectionSuggestionsSummary() {
        mShowCorrectionSuggestionsPreference.setSummary(
                getResources().getStringArray(R.array.prefs_suggestion_visibilities)
Loading