From b7b2d4b490f5dd672e0b00ced579dc052e3637e9 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Mon, 19 Aug 2013 15:55:38 -0700 Subject: [PATCH] Expose API to query devices for supported keys Change-Id: I29f230e19c6f851b4b72b2fc8dd41f5abcba4631 --- api/current.txt | 1 + .../android/hardware/input/InputManager.java | 20 ++++++++++++++++++- core/java/android/view/InputDevice.java | 10 ++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index 118737ff706f3..3685b30a389cc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26112,6 +26112,7 @@ package android.view { method public int getSources(); method public int getVendorId(); method public android.os.Vibrator getVibrator(); + method public boolean[] hasKeys(int...); method public boolean isVirtual(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java index 761faaf85938b..30e69a68d743a 100644 --- a/core/java/android/hardware/input/InputManager.java +++ b/core/java/android/hardware/input/InputManager.java @@ -579,15 +579,33 @@ public final class InputManager { * @hide */ public boolean[] deviceHasKeys(int[] keyCodes) { + return deviceHasKeys(-1, keyCodes); + } + + /** + * Queries the framework about whether any physical keys exist on the + * any keyboard attached to the device that are capable of producing the given + * array of key codes. + * + * @param id The id of the device to query. + * @param keyCodes The array of key codes to query. + * @return A new array of the same size as the key codes array whose elements are set to true + * if the given device could produce the corresponding key code at the same index in the key + * codes array. + * + * @hide + */ + public boolean[] deviceHasKeys(int id, int[] keyCodes) { boolean[] ret = new boolean[keyCodes.length]; try { - mIm.hasKeys(-1, InputDevice.SOURCE_ANY, keyCodes, ret); + mIm.hasKeys(id, InputDevice.SOURCE_ANY, keyCodes, ret); } catch (RemoteException e) { // no fallback; just return the empty array } return ret; } + /** * Injects an input event into the event system on behalf of an application. * The synchronization mode determines whether the method blocks while waiting for diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index f43e4ab3c133e..afc7b3e789a68 100644 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java @@ -573,6 +573,16 @@ public final class InputDevice implements Parcelable { return mKeyCharacterMap; } + /** + * Gets whether the device is capable of producing the list of keycodes. + * @param keys The list of android keycodes to check for. + * @return An array of booleans where each member specifies whether the device is capable of + * generating the keycode given by the corresponding value at the same index in the keys array. + */ + public boolean[] hasKeys(int... keys) { + return InputManager.getInstance().deviceHasKeys(mId, keys); + } + /** * Gets information about the range of values for a particular {@link MotionEvent} axis. * If the device supports multiple sources, the same axis may have different meanings