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 static void clearMetaKeyState(android.text.Editable, int);
|
||||||
method public long clearMetaKeyState(long, 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);
|
||||||
|
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);
|
||||||
|
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);
|
||||||
method public static final int getMetaState(long, int);
|
method public static final int getMetaState(long, int);
|
||||||
method public static long handleKeyDown(long, int, android.view.KeyEvent);
|
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
|
if (event.getAction() == KeyEvent.ACTION_DOWN
|
||||||
&& event.getRepeatCount() == 0
|
&& event.getRepeatCount() == 0
|
||||||
&& MetaKeyKeyListener.getMetaState(buffer,
|
&& MetaKeyKeyListener.getMetaState(buffer,
|
||||||
MetaKeyKeyListener.META_SELECTING) != 0) {
|
MetaKeyKeyListener.META_SELECTING, event) != 0) {
|
||||||
return widget.showContextMenu();
|
return widget.showContextMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible.
|
// 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)) {
|
if (deleteLine(view, content)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public class BaseMovementMethod implements MovementMethod {
|
|||||||
*/
|
*/
|
||||||
protected int getMovementMetaState(Spannable buffer, KeyEvent event) {
|
protected int getMovementMetaState(Spannable buffer, KeyEvent event) {
|
||||||
// We ignore locked modifiers and SHIFT.
|
// 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);
|
& ~(MetaKeyKeyListener.META_ALT_LOCKED | MetaKeyKeyListener.META_SYM_LOCKED);
|
||||||
return KeyEvent.normalizeMetaState(metaState) & ~KeyEvent.META_SHIFT_MASK;
|
return KeyEvent.normalizeMetaState(metaState) & ~KeyEvent.META_SHIFT_MASK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class DialerKeyListener extends NumberKeyListener
|
|||||||
* from the KeyEvent.
|
* from the KeyEvent.
|
||||||
*/
|
*/
|
||||||
protected int lookup(KeyEvent event, Spannable content) {
|
protected int lookup(KeyEvent event, Spannable content) {
|
||||||
int meta = event.getMetaState() | getMetaState(content);
|
int meta = getMetaState(content, event);
|
||||||
int number = event.getNumber();
|
int number = event.getNumber();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -163,6 +163,29 @@ public abstract class MetaKeyKeyListener {
|
|||||||
getActive(text, SELECTING, META_SELECTING, META_SELECTING);
|
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
|
// As META_SELECTING is @hide we should not mention it in public comments, hence the
|
||||||
// omission in @param meta
|
// 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,
|
private static int getActive(CharSequence text, Object meta,
|
||||||
int on, int lock) {
|
int on, int lock) {
|
||||||
if (!(text instanceof Spanned)) {
|
if (!(text instanceof Spanned)) {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public abstract class NumberKeyListener extends BaseKeyListener
|
|||||||
protected abstract char[] getAcceptedChars();
|
protected abstract char[] getAcceptedChars();
|
||||||
|
|
||||||
protected int lookup(KeyEvent event, Spannable content) {
|
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,
|
public CharSequence filter(CharSequence source, int start, int end,
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public class QwertyKeyListener extends BaseKeyListener {
|
|||||||
|
|
||||||
// QWERTY keyboard normal case
|
// QWERTY keyboard normal case
|
||||||
|
|
||||||
int i = event.getUnicodeChar(event.getMetaState() | getMetaState(content));
|
int i = event.getUnicodeChar(getMetaState(content, event));
|
||||||
|
|
||||||
if (!mFullKeyboard) {
|
if (!mFullKeyboard) {
|
||||||
int count = event.getRepeatCount();
|
int count = event.getRepeatCount();
|
||||||
|
|||||||
Reference in New Issue
Block a user