Chromium Code Reviews| Index: ui/android/java/src/org/chromium/ui/base/TouchDevice.java |
| diff --git a/ui/android/java/src/org/chromium/ui/base/TouchDevice.java b/ui/android/java/src/org/chromium/ui/base/TouchDevice.java |
| index 6801655c25e727c4e4654999450e26f046e59a04..36ee0900c187291716bf58791992d56d2e037e85 100644 |
| --- a/ui/android/java/src/org/chromium/ui/base/TouchDevice.java |
| +++ b/ui/android/java/src/org/chromium/ui/base/TouchDevice.java |
| @@ -6,12 +6,16 @@ package org.chromium.ui.base; |
| import android.content.Context; |
| import android.content.pm.PackageManager; |
| +import android.view.InputDevice; |
| import org.chromium.base.CalledByNative; |
| import org.chromium.base.JNINamespace; |
| /** |
| * Simple proxy to let us query the touch device from C++ |
| + * |
| + * FIXME: This does more than just touches. Rename to InputDevice? Should do the |
|
jdduke (slow)
2014/11/26 16:57:04
Nit: Let's move this TODO to the touch_device.h he
mustaq
2014/11/26 18:41:44
Done.
|
| + * same for most of the C++ files here. |
| */ |
| @JNINamespace("ui") |
| public class TouchDevice { |
| @@ -22,8 +26,6 @@ public class TouchDevice { |
| private TouchDevice() { } |
| /** |
| - * Returns the number of supported touch points. |
| - * |
| * @return Maximum supported touch points. |
| */ |
| @CalledByNative |
| @@ -32,6 +34,7 @@ public class TouchDevice { |
| // which only guarantees a minimum number of touch points. Be |
| // conservative and return the minimum, checking membership from the |
| // highest class down. |
| + |
| if (context.getPackageManager().hasSystemFeature( |
| PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND)) { |
| return 5; |
| @@ -48,4 +51,72 @@ public class TouchDevice { |
| return 0; |
| } |
| } |
| + |
| + /** |
| + * @return Returns the pointer-types supported by the device, as the union |
| + * (bitwise OR) of PointerType bits. |
| + */ |
| + @CalledByNative |
| + private static int availablePointerTypes(Context context) { |
| + int pointerTypesVal = 0; |
| + |
| + for (int deviceId : InputDevice.getDeviceIds()) { |
| + int sources = InputDevice.getDevice(deviceId).getSources(); |
| + |
| + if (hasSource(sources, InputDevice.SOURCE_MOUSE) |
| + || hasSource(sources, InputDevice.SOURCE_STYLUS) |
| + || hasSource(sources, InputDevice.SOURCE_TOUCHPAD) |
| + || hasSource(sources, InputDevice.SOURCE_TRACKBALL)) { |
| + pointerTypesVal |= PointerType.FINE; |
| + |
|
jdduke (slow)
2014/11/26 16:57:04
Hmm, while I don't mind the line break here before
mustaq
2014/11/26 18:41:44
Done.
|
| + } else if (hasSource(sources, InputDevice.SOURCE_TOUCHSCREEN)) { |
| + pointerTypesVal |= PointerType.COARSE; |
| + |
| + } else { |
| + // The remaining InputDevice sources: |
| + // SOURCE_DPAD, SOURCE_GAMEPAD, SOURCE_JOYSTICK, |
| + // SOURCE_KEYBOARD, SOURCE_TOUCH_NAVIGATION, SOURCE_UNKNOWN |
| + pointerTypesVal |= PointerType.NONE; |
| + |
| + } |
| + } |
| + |
| + return pointerTypesVal; |
| + } |
| + |
| + /** |
| + * @return Returns the hover-types supported by the device, as the union |
| + * (bitwise OR) of HoverType bits. |
| + */ |
| + @CalledByNative |
| + private static int availableHoverTypes(Context context) { |
| + int hoverTypesVal = 0; |
| + |
| + for (int deviceId : InputDevice.getDeviceIds()) { |
| + int sources = InputDevice.getDevice(deviceId).getSources(); |
| + |
| + if (hasSource(sources, InputDevice.SOURCE_MOUSE) |
| + || hasSource(sources, InputDevice.SOURCE_TOUCHPAD) |
| + || hasSource(sources, InputDevice.SOURCE_TRACKBALL)) { |
| + hoverTypesVal |= HoverType.HOVER; |
| + |
| + } else if (hasSource(sources, InputDevice.SOURCE_STYLUS) |
| + || hasSource(sources, InputDevice.SOURCE_TOUCHSCREEN)) { |
| + hoverTypesVal |= HoverType.ON_DEMAND; |
| + |
| + } else { |
| + // The remaining InputDevice sources: |
| + // SOURCE_DPAD, SOURCE_GAMEPAD, SOURCE_JOYSTICK, |
| + // SOURCE_KEYBOARD, SOURCE_TOUCH_NAVIGATION, SOURCE_UNKNOWN |
| + hoverTypesVal |= HoverType.NONE; |
| + |
| + } |
| + } |
| + |
| + return hoverTypesVal; |
| + } |
| + |
| + private static boolean hasSource(int sources, int inputDeviceSource) { |
| + return (sources & inputDeviceSource) == inputDeviceSource; |
| + } |
| } |