Use shouldOfferSwitchingToNextInputMethod when available
With this CL, LatinIME starts using InputMethodManager#shouldOfferSwitchingToNextInputMethod when available and API level is higher than 19 (KitKat). Note that relevant settings of LatinIME will be ignored if InputMethodManager#shouldOfferSwitchingToNextInputMethod is considered to be available at the moment. We will revisit here to reorganize the user visible settings before the new global IME switching mechanism becomes publicly available. BUG: 12965588 Change-Id: I0188fa56cba8e983c61cef3ae3400a0e3821f718main
parent
2cc7c3321d
commit
8ba4f33709
|
@ -28,6 +28,12 @@ public final class InputMethodManagerCompatWrapper {
|
||||||
private static final Method METHOD_switchToNextInputMethod = CompatUtils.getMethod(
|
private static final Method METHOD_switchToNextInputMethod = CompatUtils.getMethod(
|
||||||
InputMethodManager.class, "switchToNextInputMethod", IBinder.class, Boolean.TYPE);
|
InputMethodManager.class, "switchToNextInputMethod", IBinder.class, Boolean.TYPE);
|
||||||
|
|
||||||
|
// Note that InputMethodManager.shouldOfferSwitchingToNextInputMethod() has been introduced
|
||||||
|
// in API level 19 (Build.VERSION_CODES.KITKAT).
|
||||||
|
private static final Method METHOD_shouldOfferSwitchingToNextInputMethod =
|
||||||
|
CompatUtils.getMethod(InputMethodManager.class,
|
||||||
|
"shouldOfferSwitchingToNextInputMethod", IBinder.class);
|
||||||
|
|
||||||
public final InputMethodManager mImm;
|
public final InputMethodManager mImm;
|
||||||
|
|
||||||
public InputMethodManagerCompatWrapper(final Context context) {
|
public InputMethodManagerCompatWrapper(final Context context) {
|
||||||
|
@ -38,4 +44,9 @@ public final class InputMethodManagerCompatWrapper {
|
||||||
return (Boolean)CompatUtils.invoke(mImm, false /* defaultValue */,
|
return (Boolean)CompatUtils.invoke(mImm, false /* defaultValue */,
|
||||||
METHOD_switchToNextInputMethod, token, onlyCurrentIme);
|
METHOD_switchToNextInputMethod, token, onlyCurrentIme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldOfferSwitchingToNextInputMethod(final IBinder token) {
|
||||||
|
return (Boolean)CompatUtils.invoke(mImm, false /* defaultValue */,
|
||||||
|
METHOD_shouldOfferSwitchingToNextInputMethod, token);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
builder.setOptions(
|
builder.setOptions(
|
||||||
mSubtypeSwitcher.isShortcutImeEnabled(),
|
mSubtypeSwitcher.isShortcutImeEnabled(),
|
||||||
settingsValues.mShowsVoiceInputKey,
|
settingsValues.mShowsVoiceInputKey,
|
||||||
settingsValues.isLanguageSwitchKeyEnabled());
|
mLatinIME.shouldSwitchToOtherInputMethods());
|
||||||
mKeyboardLayoutSet = builder.build();
|
mKeyboardLayoutSet = builder.build();
|
||||||
mCurrentSettingsValues = settingsValues;
|
mCurrentSettingsValues = settingsValues;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1229,7 +1229,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
// TODO: Revise the language switch key behavior to make it much smarter and more reasonable.
|
// TODO: Revise the language switch key behavior to make it much smarter and more reasonable.
|
||||||
public void switchToNextSubtype() {
|
public void switchToNextSubtype() {
|
||||||
final IBinder token = getWindow().getWindow().getAttributes().token;
|
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||||
if (mSettings.getCurrent().mIncludesOtherImesInLanguageSwitchList) {
|
if (shouldSwitchToOtherInputMethods()) {
|
||||||
mRichImm.switchToNextInputMethod(token, false /* onlyCurrentIme */);
|
mRichImm.switchToNextInputMethod(token, false /* onlyCurrentIme */);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1799,4 +1799,28 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
p.println(settingsValues.dump());
|
p.println(settingsValues.dump());
|
||||||
// TODO: Dump all settings values
|
// TODO: Dump all settings values
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldSwitchToOtherInputMethods() {
|
||||||
|
// TODO: Revisit here to reorganize the settings. Probably we can/should use different
|
||||||
|
// strategy once the implementation of
|
||||||
|
// {@link InputMethodManager#shouldOfferSwitchingToNextInputMethod} is defined well.
|
||||||
|
final boolean fallbackValue = mSettings.getCurrent().mIncludesOtherImesInLanguageSwitchList;
|
||||||
|
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||||
|
if (token == null) {
|
||||||
|
return fallbackValue;
|
||||||
|
}
|
||||||
|
return mRichImm.shouldOfferSwitchingToNextInputMethod(token, fallbackValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldShowLanguageSwitchKey() {
|
||||||
|
// TODO: Revisit here to reorganize the settings. Probably we can/should use different
|
||||||
|
// strategy once the implementation of
|
||||||
|
// {@link InputMethodManager#shouldOfferSwitchingToNextInputMethod} is defined well.
|
||||||
|
final boolean fallbackValue = mSettings.getCurrent().isLanguageSwitchKeyEnabled();
|
||||||
|
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||||
|
if (token == null) {
|
||||||
|
return fallbackValue;
|
||||||
|
}
|
||||||
|
return mRichImm.shouldOfferSwitchingToNextInputMethod(token, fallbackValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import static com.android.inputmethod.latin.Constants.Subtype.KEYBOARD_MODE;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
@ -406,4 +407,15 @@ public final class RichInputMethodManager {
|
||||||
mSubtypeListCacheWithoutImplicitlySelectedSubtypes.clear();
|
mSubtypeListCacheWithoutImplicitlySelectedSubtypes.clear();
|
||||||
mInputMethodInfoCache.clear();
|
mInputMethodInfoCache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldOfferSwitchingToNextInputMethod(final IBinder binder,
|
||||||
|
boolean defaultValue) {
|
||||||
|
// Use the default value instead on Jelly Bean MR2 and previous where
|
||||||
|
// {@link InputMethodManager#shouldOfferSwitchingToNextInputMethod} isn't yet available
|
||||||
|
// and on KitKat where the API is still just a stub to return true always.
|
||||||
|
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return mImmWrapper.shouldOfferSwitchingToNextInputMethod(binder);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue