summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Raph Levien <raph@google.com> 2013-09-16 15:19:25 -0700
committer Raph Levien <raph@google.com> 2013-09-18 11:03:02 -0700
commit3954fd9a05232cb6f7fc52aa49a0b34c1539028a (patch)
tree4e61bf1e4c957091336f037849ffa100142977cb
parent6b2b845948f1f43c0e407744c9400d831a2e0e0c (diff)
Revert "Take the input device into account for meta state"
This reverts commit 8a1597b39632956cdbcb6b76874ccca786047d4c. That commit broke some of the handling of meta state, which in turn caused CTS test failures, notably bug 10210151 (CTS: android.text.method.cts.BaseKeyListenerTest#testBackspace_withSendKeys is failing on KLP). So this revert fixes those test failures, but leaves bug 8303489 (Pressing shift on the hardware keyboard messes with unrelated keypresses, including virtual ones) still present. We'll plan to address that in a future release. Change-Id: Iea42c643b6d08f33cbd2ed1747e8de3b5f8116a6
-rw-r--r--api/current.txt2
-rw-r--r--core/java/android/text/method/ArrowKeyMovementMethod.java2
-rw-r--r--core/java/android/text/method/BaseKeyListener.java2
-rw-r--r--core/java/android/text/method/BaseMovementMethod.java2
-rw-r--r--core/java/android/text/method/DialerKeyListener.java2
-rw-r--r--core/java/android/text/method/MetaKeyKeyListener.java54
-rw-r--r--core/java/android/text/method/NumberKeyListener.java2
-rw-r--r--core/java/android/text/method/QwertyKeyListener.java2
8 files changed, 6 insertions, 62 deletions
diff --git a/api/current.txt b/api/current.txt
index 4624c60dba48..0d65629b1af6 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -24925,9 +24925,7 @@ 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);
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index ba6f1d4ba07a..30bb447ff4b6 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -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, event) != 0) {
+ MetaKeyKeyListener.META_SELECTING) != 0) {
return widget.showContextMenu();
}
}
diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java
index 63607fa34872..4fede32f5e06 100644
--- a/core/java/android/text/method/BaseKeyListener.java
+++ b/core/java/android/text/method/BaseKeyListener.java
@@ -75,7 +75,7 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener
}
// Alt+Backspace or Alt+ForwardDelete deletes the current line, if possible.
- if (getMetaState(content, META_ALT_ON, event) == 1) {
+ if (event.isAltPressed() || getMetaState(content, META_ALT_ON) == 1) {
if (deleteLine(view, content)) {
return true;
}
diff --git a/core/java/android/text/method/BaseMovementMethod.java b/core/java/android/text/method/BaseMovementMethod.java
index 155a2c4fcfa0..113a4becfde6 100644
--- a/core/java/android/text/method/BaseMovementMethod.java
+++ b/core/java/android/text/method/BaseMovementMethod.java
@@ -135,7 +135,7 @@ public class BaseMovementMethod implements MovementMethod {
*/
protected int getMovementMetaState(Spannable buffer, KeyEvent event) {
// We ignore locked modifiers and SHIFT.
- int metaState = MetaKeyKeyListener.getMetaState(buffer, event)
+ int metaState = (event.getMetaState() | MetaKeyKeyListener.getMetaState(buffer))
& ~(MetaKeyKeyListener.META_ALT_LOCKED | MetaKeyKeyListener.META_SYM_LOCKED);
return KeyEvent.normalizeMetaState(metaState) & ~KeyEvent.META_SHIFT_MASK;
}
diff --git a/core/java/android/text/method/DialerKeyListener.java b/core/java/android/text/method/DialerKeyListener.java
index bb8b0de8a9f3..ce51fae06ecf 100644
--- a/core/java/android/text/method/DialerKeyListener.java
+++ b/core/java/android/text/method/DialerKeyListener.java
@@ -53,7 +53,7 @@ public class DialerKeyListener extends NumberKeyListener
* from the KeyEvent.
*/
protected int lookup(KeyEvent event, Spannable content) {
- int meta = getMetaState(content, event);
+ int meta = event.getMetaState() | getMetaState(content);
int number = event.getNumber();
/*
diff --git a/core/java/android/text/method/MetaKeyKeyListener.java b/core/java/android/text/method/MetaKeyKeyListener.java
index e9db5fde77ed..5ebb95751959 100644
--- a/core/java/android/text/method/MetaKeyKeyListener.java
+++ b/core/java/android/text/method/MetaKeyKeyListener.java
@@ -163,29 +163,6 @@ 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
/**
@@ -215,37 +192,6 @@ 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)) {
diff --git a/core/java/android/text/method/NumberKeyListener.java b/core/java/android/text/method/NumberKeyListener.java
index 988d566f5a7e..5d4c7329ab3b 100644
--- a/core/java/android/text/method/NumberKeyListener.java
+++ b/core/java/android/text/method/NumberKeyListener.java
@@ -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(), getMetaState(content, event));
+ return event.getMatch(getAcceptedChars(), event.getMetaState() | getMetaState(content));
}
public CharSequence filter(CharSequence source, int start, int end,
diff --git a/core/java/android/text/method/QwertyKeyListener.java b/core/java/android/text/method/QwertyKeyListener.java
index 0bd46bc992a0..98316ae58da6 100644
--- a/core/java/android/text/method/QwertyKeyListener.java
+++ b/core/java/android/text/method/QwertyKeyListener.java
@@ -108,7 +108,7 @@ public class QwertyKeyListener extends BaseKeyListener {
// QWERTY keyboard normal case
- int i = event.getUnicodeChar(getMetaState(content, event));
+ int i = event.getUnicodeChar(event.getMetaState() | getMetaState(content));
if (!mFullKeyboard) {
int count = event.getRepeatCount();