summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Michael Wright <michaelwr@google.com> 2013-05-20 15:04:55 -0700
committer Michael Wright <michaelwr@google.com> 2013-07-17 16:19:25 -0700
commit7ddd11035b25b0a2dbf09f9d9efd3fca701f0a79 (patch)
tree90453201ab65b9673dbd78e073254694a37b6498
parentdc990e7c61430156b05563417b979e0858baf9da (diff)
Add input device property for buttons under touchpads
Bug: 8990644 Change-Id: I2cc10457595a861b707c0394bd435d60efa8405b
-rw-r--r--core/java/android/view/InputDevice.java16
-rw-r--r--core/jni/android_view_InputDevice.cpp6
-rw-r--r--services/input/InputReader.cpp4
-rw-r--r--services/input/InputReader.h1
4 files changed, 23 insertions, 4 deletions
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index 2a761c1b380f..34fa73df832f 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -51,6 +51,7 @@ public final class InputDevice implements Parcelable {
private final int mKeyboardType;
private final KeyCharacterMap mKeyCharacterMap;
private final boolean mHasVibrator;
+ private final boolean mHasButtonUnderPad;
private final ArrayList<MotionRange> mMotionRanges = new ArrayList<MotionRange>();
private Vibrator mVibrator; // guarded by mMotionRanges during initialization
@@ -343,7 +344,8 @@ public final class InputDevice implements Parcelable {
// Called by native code.
private InputDevice(int id, int generation, String name, String descriptor,
boolean isExternal, int sources,
- int keyboardType, KeyCharacterMap keyCharacterMap, boolean hasVibrator) {
+ int keyboardType, KeyCharacterMap keyCharacterMap,
+ boolean hasVibrator, boolean hasButtonUnderPad) {
mId = id;
mGeneration = generation;
mName = name;
@@ -353,6 +355,7 @@ public final class InputDevice implements Parcelable {
mKeyboardType = keyboardType;
mKeyCharacterMap = keyCharacterMap;
mHasVibrator = hasVibrator;
+ mHasButtonUnderPad = hasButtonUnderPad;
}
private InputDevice(Parcel in) {
@@ -365,6 +368,7 @@ public final class InputDevice implements Parcelable {
mKeyboardType = in.readInt();
mKeyCharacterMap = KeyCharacterMap.CREATOR.createFromParcel(in);
mHasVibrator = in.readInt() != 0;
+ mHasButtonUnderPad = in.readInt() != 0;
for (;;) {
int axis = in.readInt();
@@ -612,6 +616,15 @@ public final class InputDevice implements Parcelable {
}
/**
+ * Reports whether the device has a button under its touchpad
+ * @return Whether the device has a button under its touchpad
+ * @hide
+ */
+ public boolean hasButtonUnderPad() {
+ return mHasButtonUnderPad;
+ }
+
+ /**
* Provides information about the range of values for a particular {@link MotionEvent} axis.
*
* @see InputDevice#getMotionRange(int)
@@ -733,6 +746,7 @@ public final class InputDevice implements Parcelable {
out.writeInt(mKeyboardType);
mKeyCharacterMap.writeToParcel(out, flags);
out.writeInt(mHasVibrator ? 1 : 0);
+ out.writeInt(mHasButtonUnderPad ? 1 : 0);
final int numRanges = mMotionRanges.size();
for (int i = 0; i < numRanges; i++) {
diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp
index 8ef5d0b58582..e5e3db076f8b 100644
--- a/core/jni/android_view_InputDevice.cpp
+++ b/core/jni/android_view_InputDevice.cpp
@@ -57,7 +57,7 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
gInputDeviceClassInfo.ctor, deviceInfo.getId(), deviceInfo.getGeneration(),
nameObj.get(), descriptorObj.get(), deviceInfo.isExternal(),
deviceInfo.getSources(), deviceInfo.getKeyboardType(),
- kcmObj.get(), deviceInfo.hasVibrator()));
+ kcmObj.get(), deviceInfo.hasVibrator(), deviceInfo.hasButtonUnderPad()));
const Vector<InputDeviceInfo::MotionRange>& ranges = deviceInfo.getMotionRanges();
for (size_t i = 0; i < ranges.size(); i++) {
@@ -86,8 +86,8 @@ int register_android_view_InputDevice(JNIEnv* env)
FIND_CLASS(gInputDeviceClassInfo.clazz, "android/view/InputDevice");
gInputDeviceClassInfo.clazz = jclass(env->NewGlobalRef(gInputDeviceClassInfo.clazz));
- GET_METHOD_ID(gInputDeviceClassInfo.ctor, gInputDeviceClassInfo.clazz,
- "<init>", "(IILjava/lang/String;Ljava/lang/String;ZIILandroid/view/KeyCharacterMap;Z)V");
+ GET_METHOD_ID(gInputDeviceClassInfo.ctor, gInputDeviceClassInfo.clazz, "<init>",
+ "(IILjava/lang/String;Ljava/lang/String;ZIILandroid/view/KeyCharacterMap;ZZ)V");
GET_METHOD_ID(gInputDeviceClassInfo.addMotionRange, gInputDeviceClassInfo.clazz,
"addMotionRange", "(IIFFFFF)V");
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index 5b64d8afab3f..deeb3d0f1b80 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -2631,6 +2631,7 @@ void TouchInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_4, mSource, y.min, y.max, y.flat,
y.fuzz, y.resolution);
}
+ info->setButtonUnderPad(mParameters.hasButtonUnderPad);
}
}
@@ -2796,6 +2797,9 @@ void TouchInputMapper::configureParameters() {
mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
}
+ mParameters.hasButtonUnderPad=
+ getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_BUTTONPAD);
+
String8 deviceTypeString;
if (getDevice()->getConfiguration().tryGetProperty(String8("touch.deviceType"),
deviceTypeString)) {
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index 7e303e4bc3d6..3ed426f43821 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -1205,6 +1205,7 @@ protected:
bool hasAssociatedDisplay;
bool associatedDisplayIsExternal;
bool orientationAware;
+ bool hasButtonUnderPad;
enum GestureMode {
GESTURE_MODE_POINTER,