forked from extern/Unexpected-Keyboard
Swap the Enter and Action keys when needed
When IME_FLAG_NO_ENTER_ACTION is set.
This commit is contained in:
parent
53113cadd9
commit
dfec26a93b
@ -36,6 +36,7 @@ final class Config
|
|||||||
public int key_flags_to_remove;
|
public int key_flags_to_remove;
|
||||||
public String actionLabel; // Might be 'null'
|
public String actionLabel; // Might be 'null'
|
||||||
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
|
||||||
|
public boolean swapEnterActionKey; // Swap the "enter" and "action" keys
|
||||||
|
|
||||||
public final IKeyEventHandler handler;
|
public final IKeyEventHandler handler;
|
||||||
|
|
||||||
@ -66,6 +67,7 @@ final class Config
|
|||||||
key_flags_to_remove = 0;
|
key_flags_to_remove = 0;
|
||||||
actionLabel = null;
|
actionLabel = null;
|
||||||
actionId = 0;
|
actionId = 0;
|
||||||
|
swapEnterActionKey = false;
|
||||||
handler = h;
|
handler = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,12 +162,15 @@ public class Keyboard2 extends InputMethodService
|
|||||||
{
|
{
|
||||||
_config.actionLabel = info.actionLabel.toString();
|
_config.actionLabel = info.actionLabel.toString();
|
||||||
_config.actionId = info.actionId;
|
_config.actionId = info.actionId;
|
||||||
|
_config.swapEnterActionKey = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int action = info.imeOptions & EditorInfo.IME_MASK_ACTION;
|
int action = info.imeOptions & EditorInfo.IME_MASK_ACTION;
|
||||||
_config.actionLabel = actionLabel_of_imeAction(action); // Might be null
|
_config.actionLabel = actionLabel_of_imeAction(action); // Might be null
|
||||||
_config.actionId = action;
|
_config.actionId = action;
|
||||||
|
_config.swapEnterActionKey =
|
||||||
|
(info.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import android.os.Message;
|
|||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.PopupWindow;
|
import android.widget.PopupWindow;
|
||||||
@ -68,10 +69,18 @@ public class Keyboard2View extends View
|
|||||||
// Replace the action key to show the right label.
|
// Replace the action key to show the right label.
|
||||||
KeyValue action_key = null;
|
KeyValue action_key = null;
|
||||||
if (_config.actionLabel != null)
|
if (_config.actionLabel != null)
|
||||||
|
{
|
||||||
action_key = new KeyValue(_config.actionLabel, _config.actionLabel,
|
action_key = new KeyValue(_config.actionLabel, _config.actionLabel,
|
||||||
KeyValue.CHAR_NONE, KeyValue.EVENT_ACTION, KeyValue.FLAG_NOREPEAT);
|
KeyValue.CHAR_NONE, KeyValue.EVENT_ACTION, KeyValue.FLAG_NOREPEAT);
|
||||||
kw = kw.replaceKeys(
|
}
|
||||||
new KeyboardData.ReplaceKeysByEvent(KeyValue.EVENT_ACTION, action_key));
|
if (_config.swapEnterActionKey && action_key != null)
|
||||||
|
kw = kw.replaceKeys(
|
||||||
|
new KeyboardData.ReplaceKeysByEvent2(KeyEvent.KEYCODE_ENTER,
|
||||||
|
action_key, KeyValue.EVENT_ACTION,
|
||||||
|
KeyValue.getKeyByName("enter")));
|
||||||
|
else
|
||||||
|
kw = kw.replaceKeys(
|
||||||
|
new KeyboardData.ReplaceKeysByEvent(KeyValue.EVENT_ACTION, action_key));
|
||||||
_keyboard = kw;
|
_keyboard = kw;
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
@ -201,4 +201,30 @@ class KeyboardData
|
|||||||
return (k != null && k.eventCode == _eventCode) ? _replacement : k;
|
return (k != null && k.eventCode == _eventCode) ? _replacement : k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Replace two keys at the same time. Used for swaping keys. */
|
||||||
|
public static class ReplaceKeysByEvent2 implements MapKeys
|
||||||
|
{
|
||||||
|
private final int _e1;
|
||||||
|
private final KeyValue _r1;
|
||||||
|
private final int _e2;
|
||||||
|
private final KeyValue _r2;
|
||||||
|
|
||||||
|
public ReplaceKeysByEvent2(int e1, KeyValue r1, int e2, KeyValue r2)
|
||||||
|
{
|
||||||
|
_e1 = e1;
|
||||||
|
_r1 = r1;
|
||||||
|
_e2 = e2;
|
||||||
|
_r2 = r2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KeyValue map(KeyValue k)
|
||||||
|
{
|
||||||
|
if (k == null)
|
||||||
|
return null;
|
||||||
|
if (k.eventCode == _e1) return _r1;
|
||||||
|
if (k.eventCode == _e2) return _r2;
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user