diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index 20e0311..366cc0c 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -24,6 +24,8 @@ class Config public float horizontalMargin; public boolean disableAccentKeys; + public boolean shouldOfferSwitchingToNextInputMethod; + public Config(Keyboard2 context) { Resources res = context.getResources(); @@ -46,6 +48,8 @@ class Config disableAccentKeys = false; // from prefs refresh(); + // initialized later + shouldOfferSwitchingToNextInputMethod = false; } /* diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index f4226f6..f94ef3a 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -100,6 +100,7 @@ public class Keyboard2 extends InputMethodService public void onStartInputView(EditorInfo info, boolean restarting) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); + _config.shouldOfferSwitchingToNextInputMethod = imm.shouldOfferSwitchingToNextInputMethod(getCurrentInputBinding().getConnectionToken()); refreshSubtype(imm.getCurrentInputMethodSubtype()); if ((info.inputType & InputType.TYPE_CLASS_NUMBER) != 0) _keyboardView.setKeyboard(getLayout(R.xml.numeric)); @@ -156,7 +157,7 @@ public class Keyboard2 extends InputMethodService { InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); - imm.switchToNextInputMethod(getWindow().getWindow().getAttributes().token, false); + imm.switchToNextInputMethod(getCurrentInputBinding().getConnectionToken(), false); } else if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT)) != 0) handleMetaKeyUp(key, flags); diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java index ccbbb7e..1dbfb87 100644 --- a/srcs/juloo.keyboard2/Keyboard2View.java +++ b/srcs/juloo.keyboard2/Keyboard2View.java @@ -83,12 +83,13 @@ public class Keyboard2View extends View return (paint); } - public void setKeyboard(KeyboardData keyboard) + public void setKeyboard(KeyboardData kw) { + if (!_config.shouldOfferSwitchingToNextInputMethod) + kw = kw.removeKeys(new KeyboardData.RemoveKeysByEvent(KeyValue.EVENT_CHANGE_METHOD)); if (_config.disableAccentKeys) - _keyboard = keyboard.removeKeys(new KeyboardData.RemoveKeysByFlags(KeyValue.FLAGS_ACCENTS)); - else - _keyboard = keyboard; + kw = kw.removeKeys(new KeyboardData.RemoveKeysByFlags(KeyValue.FLAGS_ACCENTS)); + _keyboard = kw; reset(); } diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index 000c7e0..c137af2 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -171,4 +171,16 @@ class KeyboardData return (k == null || (k.getFlags() & _flags) != 0) ? null : k; } } + + public static class RemoveKeysByEvent implements MapKeys + { + private final int _eventCode; + + public RemoveKeysByEvent(int ev) { _eventCode = ev; } + + public KeyValue map(KeyValue k) + { + return (k == null || k.getEventCode() == _eventCode) ? null : k; + } + } }