Merge "Revert "Revert "Take the input device into account for meta state""" into klp-dev
This commit is contained in:
@@ -25019,7 +25019,9 @@ package android.text.method {
|
||||
method public static void clearMetaKeyState(android.text.Editable, int);
|
||||
method public long clearMetaKeyState(long, int);
|
||||
method public static final int getMetaState(java.lang.CharSequence);
|
||||
method public static final int getMetaState(java.lang.CharSequence, android.view.KeyEvent);
|
||||
method public static final int getMetaState(java.lang.CharSequence, int);
|
||||
method public static final int getMetaState(java.lang.CharSequence, int, android.view.KeyEvent);
|
||||
method public static final int getMetaState(long);
|
||||
method public static final int getMetaState(long, int);
|
||||
method public static long handleKeyDown(long, int, android.view.KeyEvent);
|
||||
|
||||
@@ -56,7 +56,7 @@ public class ArrowKeyMovementMethod extends BaseMovementMethod implements Moveme
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN
|
||||
&& event.getRepeatCount() == 0
|
||||
&& MetaKeyKeyListener.getMetaState(buffer,
|
||||
MetaKeyKeyListener.META_SELECTING) != 0) {
|
||||
MetaKeyKeyListener.META_SELECTING, event) != 0) {
|
||||
return widget.showContextMenu();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener
|
||||
}
|
||||
|
||||
// Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible.
|
||||
if (event.isAltPressed() || getMetaState(content, META_ALT_ON) == 1) {
|
||||
if (getMetaState(content, META_ALT_ON, event) == 1) {
|
||||
if (deleteLine(view, content)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ public class BaseMovementMethod implements MovementMethod {
|
||||
*/
|
||||
protected int getMovementMetaState(Spannable buffer, KeyEvent event) {
|
||||
// We ignore locked modifiers and SHIFT.
|
||||
int metaState = (event.getMetaState() | MetaKeyKeyListener.getMetaState(buffer))
|
||||
int metaState = MetaKeyKeyListener.getMetaState(buffer, event)
|
||||
& ~(MetaKeyKeyListener.META_ALT_LOCKED | MetaKeyKeyListener.META_SYM_LOCKED);
|
||||
return KeyEvent.normalizeMetaState(metaState) & ~KeyEvent.META_SHIFT_MASK;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public class DialerKeyListener extends NumberKeyListener
|
||||
* from the KeyEvent.
|
||||
*/
|
||||
protected int lookup(KeyEvent event, Spannable content) {
|
||||
int meta = event.getMetaState() | getMetaState(content);
|
||||
int meta = getMetaState(content, event);
|
||||
int number = event.getNumber();
|
||||
|
||||
/*
|
||||
|
||||
@@ -163,6 +163,29 @@ public abstract class MetaKeyKeyListener {
|
||||
getActive(text, SELECTING, META_SELECTING, META_SELECTING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the state of the meta keys for a specific key event.
|
||||
*
|
||||
* For input devices that use toggled key modifiers, the `toggled' state
|
||||
* is stored into the text buffer. This method retrieves the meta state
|
||||
* for this event, accounting for the stored state. If the event has been
|
||||
* created by a device that does not support toggled key modifiers, like
|
||||
* a virtual device for example, the stored state is ignored.
|
||||
*
|
||||
* @param text the buffer in which the meta key would have been pressed.
|
||||
* @param event the event for which to evaluate the meta state.
|
||||
* @return an integer in which each bit set to one represents a pressed
|
||||
* or locked meta key.
|
||||
*/
|
||||
public static final int getMetaState(final CharSequence text, final KeyEvent event) {
|
||||
int metaState = event.getMetaState();
|
||||
if (event.getKeyCharacterMap().getModifierBehavior()
|
||||
== KeyCharacterMap.MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED) {
|
||||
metaState |= getMetaState(text);
|
||||
}
|
||||
return metaState;
|
||||
}
|
||||
|
||||
// As META_SELECTING is @hide we should not mention it in public comments, hence the
|
||||
// omission in @param meta
|
||||
/**
|
||||
@@ -192,6 +215,37 @@ public abstract class MetaKeyKeyListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the state of a particular meta key to use with a particular key event.
|
||||
*
|
||||
* If the key event has been created by a device that does not support toggled
|
||||
* key modifiers, like a virtual keyboard for example, only the meta state in
|
||||
* the key event is considered.
|
||||
*
|
||||
* @param meta META_SHIFT_ON, META_ALT_ON, META_SYM_ON
|
||||
* @param text the buffer in which the meta key would have been pressed.
|
||||
* @param event the event for which to evaluate the meta state.
|
||||
* @return 0 if inactive, 1 if active, 2 if locked.
|
||||
*/
|
||||
public static final int getMetaState(final CharSequence text, final int meta,
|
||||
final KeyEvent event) {
|
||||
int metaState = event.getMetaState();
|
||||
if (event.getKeyCharacterMap().getModifierBehavior()
|
||||
== KeyCharacterMap.MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED) {
|
||||
metaState |= getMetaState(text);
|
||||
}
|
||||
if (META_SELECTING == meta) {
|
||||
// #getMetaState(long, int) does not support META_SELECTING, but we want the same
|
||||
// behavior as #getMetaState(CharSequence, int) so we need to do it here
|
||||
if ((metaState & META_SELECTING) != 0) {
|
||||
// META_SELECTING is only ever set to PRESSED and can't be LOCKED, so return 1
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return getMetaState(metaState, meta);
|
||||
}
|
||||
|
||||
private static int getActive(CharSequence text, Object meta,
|
||||
int on, int lock) {
|
||||
if (!(text instanceof Spanned)) {
|
||||
|
||||
@@ -41,7 +41,7 @@ public abstract class NumberKeyListener extends BaseKeyListener
|
||||
protected abstract char[] getAcceptedChars();
|
||||
|
||||
protected int lookup(KeyEvent event, Spannable content) {
|
||||
return event.getMatch(getAcceptedChars(), event.getMetaState() | getMetaState(content));
|
||||
return event.getMatch(getAcceptedChars(), getMetaState(content, event));
|
||||
}
|
||||
|
||||
public CharSequence filter(CharSequence source, int start, int end,
|
||||
|
||||
@@ -108,7 +108,7 @@ public class QwertyKeyListener extends BaseKeyListener {
|
||||
|
||||
// QWERTY keyboard normal case
|
||||
|
||||
int i = event.getUnicodeChar(event.getMetaState() | getMetaState(content));
|
||||
int i = event.getUnicodeChar(getMetaState(content, event));
|
||||
|
||||
if (!mFullKeyboard) {
|
||||
int count = event.getRepeatCount();
|
||||
|
||||
Reference in New Issue
Block a user