forked from extern/Unexpected-Keyboard
Hide the input switching key if it's not needed
Android has a new way of switching between input methods and this key need to be hidden in most cases.
This commit is contained in:
parent
1421bccc7b
commit
f8bce500ff
@ -24,6 +24,8 @@ class Config
|
|||||||
public float horizontalMargin;
|
public float horizontalMargin;
|
||||||
public boolean disableAccentKeys;
|
public boolean disableAccentKeys;
|
||||||
|
|
||||||
|
public boolean shouldOfferSwitchingToNextInputMethod;
|
||||||
|
|
||||||
public Config(Keyboard2 context)
|
public Config(Keyboard2 context)
|
||||||
{
|
{
|
||||||
Resources res = context.getResources();
|
Resources res = context.getResources();
|
||||||
@ -46,6 +48,8 @@ class Config
|
|||||||
disableAccentKeys = false;
|
disableAccentKeys = false;
|
||||||
// from prefs
|
// from prefs
|
||||||
refresh();
|
refresh();
|
||||||
|
// initialized later
|
||||||
|
shouldOfferSwitchingToNextInputMethod = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -100,6 +100,7 @@ public class Keyboard2 extends InputMethodService
|
|||||||
public void onStartInputView(EditorInfo info, boolean restarting)
|
public void onStartInputView(EditorInfo info, boolean restarting)
|
||||||
{
|
{
|
||||||
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
|
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
_config.shouldOfferSwitchingToNextInputMethod = imm.shouldOfferSwitchingToNextInputMethod(getCurrentInputBinding().getConnectionToken());
|
||||||
refreshSubtype(imm.getCurrentInputMethodSubtype());
|
refreshSubtype(imm.getCurrentInputMethodSubtype());
|
||||||
if ((info.inputType & InputType.TYPE_CLASS_NUMBER) != 0)
|
if ((info.inputType & InputType.TYPE_CLASS_NUMBER) != 0)
|
||||||
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
|
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
|
||||||
@ -156,7 +157,7 @@ public class Keyboard2 extends InputMethodService
|
|||||||
{
|
{
|
||||||
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
|
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)
|
else if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT)) != 0)
|
||||||
handleMetaKeyUp(key, flags);
|
handleMetaKeyUp(key, flags);
|
||||||
|
@ -83,12 +83,13 @@ public class Keyboard2View extends View
|
|||||||
return (paint);
|
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)
|
if (_config.disableAccentKeys)
|
||||||
_keyboard = keyboard.removeKeys(new KeyboardData.RemoveKeysByFlags(KeyValue.FLAGS_ACCENTS));
|
kw = kw.removeKeys(new KeyboardData.RemoveKeysByFlags(KeyValue.FLAGS_ACCENTS));
|
||||||
else
|
_keyboard = kw;
|
||||||
_keyboard = keyboard;
|
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,4 +171,16 @@ class KeyboardData
|
|||||||
return (k == null || (k.getFlags() & _flags) != 0) ? null : k;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user