summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/test-current.txt1
-rw-r--r--cmds/input/src/com/android/commands/input/Input.java3
-rw-r--r--core/java/android/view/KeyEvent.java37
3 files changed, 27 insertions, 14 deletions
diff --git a/api/test-current.txt b/api/test-current.txt
index f13e0dede74d..e7eda2288130 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1319,6 +1319,7 @@ package android.view {
public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
method public static java.lang.String actionToString(int);
+ field public static final int LAST_KEYCODE = 285; // 0x11d
}
public final class KeyboardShortcutGroup implements android.os.Parcelable {
diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java
index d3ec32076292..74edffb4738d 100644
--- a/cmds/input/src/com/android/commands/input/Input.java
+++ b/cmds/input/src/com/android/commands/input/Input.java
@@ -91,9 +91,6 @@ public class Input {
if (args.length > start) {
for (int i = start; i < args.length; i++) {
int keyCode = KeyEvent.keyCodeFromString(args[i]);
- if (keyCode == KeyEvent.KEYCODE_UNKNOWN) {
- keyCode = KeyEvent.keyCodeFromString("KEYCODE_" + args[i]);
- }
sendKeyEvent(inputSource, keyCode, longpress);
}
return;
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 378bb1a33738..dd5abaa4b038 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -810,7 +811,12 @@ public class KeyEvent extends InputEvent implements Parcelable {
/** Key code constant: Refresh key. */
public static final int KEYCODE_REFRESH = 285;
- private static final int LAST_KEYCODE = KEYCODE_REFRESH;
+ /**
+ * Integer value of the last KEYCODE. Increases as new keycodes are added to KeyEvent.
+ * @hide
+ */
+ @TestApi
+ public static final int LAST_KEYCODE = KEYCODE_REFRESH;
// NOTE: If you add a new keycode here you must also add it to:
// isSystem()
@@ -2889,25 +2895,34 @@ public class KeyEvent extends InputEvent implements Parcelable {
/**
* Gets a keycode by its symbolic name such as "KEYCODE_A" or an equivalent
- * numeric constant such as "1001".
+ * numeric constant such as "29". For symbolic names,
+ * starting in {@link android.os.Build.VERSION_CODES#Q} the prefix "KEYCODE_" is optional.
*
* @param symbolicName The symbolic name of the keycode.
* @return The keycode or {@link #KEYCODE_UNKNOWN} if not found.
* @see #keycodeToString(int)
*/
- public static int keyCodeFromString(String symbolicName) {
- if (symbolicName.startsWith(LABEL_PREFIX)) {
- symbolicName = symbolicName.substring(LABEL_PREFIX.length());
- int keyCode = nativeKeyCodeFromString(symbolicName);
- if (keyCode > 0) {
+ public static int keyCodeFromString(@NonNull String symbolicName) {
+ try {
+ int keyCode = Integer.parseInt(symbolicName);
+ if (keyCodeIsValid(keyCode)) {
return keyCode;
}
- }
- try {
- return Integer.parseInt(symbolicName, 10);
} catch (NumberFormatException ex) {
- return KEYCODE_UNKNOWN;
}
+
+ if (symbolicName.startsWith(LABEL_PREFIX)) {
+ symbolicName = symbolicName.substring(LABEL_PREFIX.length());
+ }
+ int keyCode = nativeKeyCodeFromString(symbolicName);
+ if (keyCodeIsValid(keyCode)) {
+ return keyCode;
+ }
+ return KEYCODE_UNKNOWN;
+ }
+
+ private static boolean keyCodeIsValid(int keyCode) {
+ return keyCode >= KEYCODE_UNKNOWN && keyCode <= LAST_KEYCODE;
}
/**