Loading api/current.xml +55 −0 Original line number Diff line number Diff line Loading @@ -178278,6 +178278,17 @@ visibility="public" > </method> <method name="getKeyboardType" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="getMotionRange" return="android.view.InputDevice.MotionRange" abstract="false" Loading Loading @@ -178326,6 +178337,39 @@ <parameter name="keyCode" type="int"> </parameter> </method> <field name="KEYBOARD_TYPE_ALPHABETIC" type="int" transient="false" volatile="false" value="2" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="KEYBOARD_TYPE_NONE" type="int" transient="false" volatile="false" value="0" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="KEYBOARD_TYPE_NON_ALPHABETIC" type="int" transient="false" volatile="false" value="1" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="MOTION_RANGE_ORIENTATION" type="int" transient="false" Loading Loading @@ -178425,6 +178469,17 @@ visibility="public" > </field> <field name="SOURCE_ANY" type="int" transient="false" volatile="false" value="-256" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="SOURCE_CLASS_BUTTON" type="int" transient="false" core/java/android/view/InputDevice.java +32 −0 Original line number Diff line number Diff line Loading @@ -30,11 +30,13 @@ package android.view; * As a further wrinkle, different kinds of input sources uses different coordinate systems * to describe motion events. Refer to the comments on the input source constants for * the appropriate interpretation. * </p> */ public final class InputDevice { private int mId; private String mName; private int mSources; private int mKeyboardType; /** * A mask for input source classes. Loading Loading @@ -174,6 +176,12 @@ public final class InputDevice { */ public static final int SOURCE_JOYSTICK_RIGHT = 0x02000000 | SOURCE_CLASS_JOYSTICK; /** * A special input source constant that is used when filtering input devices * to match devices that provide any type of input source. */ public static final int SOURCE_ANY = 0xffffff00; /** * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#x}. * Loading Loading @@ -238,6 +246,22 @@ public final class InputDevice { */ public static final int MOTION_RANGE_ORIENTATION = 8; /** * There is no keyboard. */ public static final int KEYBOARD_TYPE_NONE = 0; /** * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment * of buttons that are not mapped as alphabetic keys suitable for text input. */ public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; /** * The keyboard supports a complement of alphabetic keys. */ public static final int KEYBOARD_TYPE_ALPHABETIC = 2; /** * Gets information about the input device with the specified id. * @param id The device id. Loading @@ -264,6 +288,14 @@ public final class InputDevice { return mSources; } /** * Gets the keyboard type. * @return The keyboard type. */ public int getKeyboardType() { return mKeyboardType; } /** * Gets the key character map associated with this input device. * @return The key character map. Loading core/java/android/view/MotionEvent.java +17 −17 Original line number Diff line number Diff line Loading @@ -181,61 +181,61 @@ public final class MotionEvent extends InputEvent implements Parcelable { * Offset for the sample's X coordinate. * @hide */ static public final int SAMPLE_X = 0; static private final int SAMPLE_X = 0; /** * Offset for the sample's Y coordinate. * @hide */ static public final int SAMPLE_Y = 1; static private final int SAMPLE_Y = 1; /** * Offset for the sample's pressure. * @hide */ static public final int SAMPLE_PRESSURE = 2; static private final int SAMPLE_PRESSURE = 2; /** * Offset for the sample's size * @hide */ static public final int SAMPLE_SIZE = 3; static private final int SAMPLE_SIZE = 3; /** * Offset for the sample's touch major axis length. * @hide */ static public final int SAMPLE_TOUCH_MAJOR = 4; static private final int SAMPLE_TOUCH_MAJOR = 4; /** * Offset for the sample's touch minor axis length. * @hide */ static public final int SAMPLE_TOUCH_MINOR = 5; static private final int SAMPLE_TOUCH_MINOR = 5; /** * Offset for the sample's tool major axis length. * @hide */ static public final int SAMPLE_TOOL_MAJOR = 6; static private final int SAMPLE_TOOL_MAJOR = 6; /** * Offset for the sample's tool minor axis length. * @hide */ static public final int SAMPLE_TOOL_MINOR = 7; static private final int SAMPLE_TOOL_MINOR = 7; /** * Offset for the sample's orientation. * @hide */ static public final int SAMPLE_ORIENTATION = 8; static private final int SAMPLE_ORIENTATION = 8; /** * Number of data items for each sample. * @hide */ static public final int NUM_SAMPLE_DATA = 9; static private final int NUM_SAMPLE_DATA = 9; /** * Number of possible pointers. Loading Loading @@ -918,7 +918,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { * upwards, is perfectly circular or is of unknown orientation. A positive angle * indicates that the major axis of contact is oriented to the right. A negative angle * indicates that the major axis of contact is oriented to the left. * The full range is from -PI/4 radians (finger pointing fully left) to PI/4 radians * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians * (finger pointing fully right). * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 * (the first pointer that is down) to {@link #getPointerCount()}-1. Loading Loading @@ -1614,28 +1614,28 @@ public final class MotionEvent extends InputEvent implements Parcelable { * upwards, is perfectly circular or is of unknown orientation. A positive angle * indicates that the major axis of contact is oriented to the right. A negative angle * indicates that the major axis of contact is oriented to the left. * The full range is from -PI/4 radians (finger pointing fully left) to PI/4 radians * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians * (finger pointing fully right). */ public float orientation; /* private static final float PI_8 = (float) (Math.PI / 8); private static final float PI_4 = (float) (Math.PI / 4); public float getTouchWidth() { return Math.abs(orientation) > PI_8 ? touchMajor : touchMinor; return Math.abs(orientation) > PI_4 ? touchMajor : touchMinor; } public float getTouchHeight() { return Math.abs(orientation) > PI_8 ? touchMinor : touchMajor; return Math.abs(orientation) > PI_4 ? touchMinor : touchMajor; } public float getToolWidth() { return Math.abs(orientation) > PI_8 ? toolMajor : toolMinor; return Math.abs(orientation) > PI_4 ? toolMajor : toolMinor; } public float getToolHeight() { return Math.abs(orientation) > PI_8 ? toolMinor : toolMajor; return Math.abs(orientation) > PI_4 ? toolMinor : toolMajor; } */ } Loading include/ui/EventHub.h +47 −29 Original line number Diff line number Diff line Loading @@ -59,6 +59,31 @@ namespace android { class KeyLayoutMap; /* * A raw event as retrieved from the EventHub. */ struct RawEvent { nsecs_t when; int32_t deviceId; int32_t type; int32_t scanCode; int32_t keyCode; int32_t value; uint32_t flags; }; /* Describes an absolute axis. */ struct RawAbsoluteAxisInfo { bool valid; // true if the information is valid, false otherwise int32_t minValue; // minimum value int32_t maxValue; // maximum value int32_t flat; // center flat position, eg. flat == 8 means center is between -8 and 8 int32_t fuzz; // error tolerance, eg. fuzz == 4 means value is +/- 4 due to noise inline int32_t getRange() { return maxValue - minValue; } }; /* * Input device classes. */ Loading @@ -82,7 +107,10 @@ enum { INPUT_DEVICE_CLASS_DPAD = 0x00000020, /* The input device is a gamepad (implies keyboard). */ INPUT_DEVICE_CLASS_GAMEPAD = 0x00000040 INPUT_DEVICE_CLASS_GAMEPAD = 0x00000040, /* The input device has switches. */ INPUT_DEVICE_CLASS_SWITCH = 0x00000080, }; /* Loading Loading @@ -114,8 +142,8 @@ public: virtual String8 getDeviceName(int32_t deviceId) const = 0; virtual int getAbsoluteInfo(int32_t deviceId, int axis, int *outMinValue, int* outMaxValue, int* outFlat, int* outFuzz) const = 0; virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis, RawAbsoluteAxisInfo* outAxisInfo) const = 0; virtual status_t scancodeToKeycode(int32_t deviceId, int scancode, int32_t* outKeycode, uint32_t* outFlags) const = 0; Loading @@ -131,26 +159,19 @@ public: * If the device needs to remain awake longer than that, then the caller is responsible * for taking care of it (say, by poking the power manager user activity timer). */ virtual bool getEvent(int32_t* outDeviceId, int32_t* outType, int32_t* outScancode, int32_t* outKeycode, uint32_t *outFlags, int32_t* outValue, nsecs_t* outWhen) = 0; virtual bool getEvent(RawEvent* outEvent) = 0; /* * Query current input state. * deviceId may be -1 to search for the device automatically, filtered by class. * deviceClasses may be -1 to ignore device class while searching. */ virtual int32_t getScanCodeState(int32_t deviceId, int32_t deviceClasses, int32_t scanCode) const = 0; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t deviceClasses, int32_t keyCode) const = 0; virtual int32_t getSwitchState(int32_t deviceId, int32_t deviceClasses, int32_t sw) const = 0; virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const = 0; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const = 0; virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const = 0; /* * Examine key input devices for specific framework keycode support */ virtual bool hasKeys(size_t numCodes, const int32_t* keyCodes, virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const = 0; }; Loading @@ -165,33 +186,28 @@ public: virtual String8 getDeviceName(int32_t deviceId) const; virtual int getAbsoluteInfo(int32_t deviceId, int axis, int *outMinValue, int* outMaxValue, int* outFlat, int* outFuzz) const; virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis, RawAbsoluteAxisInfo* outAxisInfo) const; virtual status_t scancodeToKeycode(int32_t deviceId, int scancode, int32_t* outKeycode, uint32_t* outFlags) const; virtual void addExcludedDevice(const char* deviceName); virtual int32_t getScanCodeState(int32_t deviceId, int32_t deviceClasses, int32_t scanCode) const; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t deviceClasses, int32_t keyCode) const; virtual int32_t getSwitchState(int32_t deviceId, int32_t deviceClasses, int32_t sw) const; virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const; virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const; virtual bool hasKeys(size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const; virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const; virtual bool getEvent(int32_t* outDeviceId, int32_t* outType, int32_t* outScancode, int32_t* outKeycode, uint32_t *outFlags, int32_t* outValue, nsecs_t* outWhen); virtual bool getEvent(RawEvent* outEvent); protected: virtual ~EventHub(); private: bool openPlatformInput(void); int32_t convertDeviceKey_TI_P2(int code); int open_device(const char *device); int close_device(const char *device); Loading Loading @@ -220,6 +236,8 @@ private: int32_t getScanCodeStateLocked(device_t* device, int32_t scanCode) const; int32_t getKeyCodeStateLocked(device_t* device, int32_t keyCode) const; int32_t getSwitchStateLocked(device_t* device, int32_t sw) const; bool markSupportedKeyCodesLocked(device_t* device, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const; // Protect all internal state. mutable Mutex mLock; Loading include/ui/Input.h +72 −11 Original line number Diff line number Diff line Loading @@ -23,7 +23,10 @@ #include <android/input.h> #include <utils/Vector.h> #include <utils/KeyedVector.h> #include <utils/Timers.h> #include <utils/RefBase.h> #include <utils/String8.h> /* * Additional private constants not defined in ndk/ui/input.h. Loading @@ -47,21 +50,16 @@ struct AInputEvent { virtual ~AInputEvent() { } }; namespace android { /* * A raw event as retrieved from the EventHub. * Declare a concrete type for the NDK's input device forward declaration. */ struct RawEvent { nsecs_t when; int32_t deviceId; int32_t type; int32_t scanCode; int32_t keyCode; int32_t value; uint32_t flags; struct AInputDevice { virtual ~AInputDevice() { } }; namespace android { /* * Flags that flow alongside events in the input dispatch system to help with certain * policy decisions such as waking from device sleep. Loading Loading @@ -424,6 +422,69 @@ private: MotionEvent mMotionEvent; }; /* * Describes the characteristics and capabilities of an input device. */ class InputDeviceInfo { public: InputDeviceInfo(); InputDeviceInfo(const InputDeviceInfo& other); ~InputDeviceInfo(); struct MotionRange { float min; float max; float flat; float fuzz; }; void initialize(int32_t id, const String8& name); inline int32_t getId() const { return mId; } inline const String8 getName() const { return mName; } inline uint32_t getSources() const { return mSources; } const MotionRange* getMotionRange(int32_t rangeType) const; void addSource(uint32_t source); void addMotionRange(int32_t rangeType, float min, float max, float flat, float fuzz); void addMotionRange(int32_t rangeType, const MotionRange& range); inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } private: int32_t mId; String8 mName; uint32_t mSources; int32_t mKeyboardType; KeyedVector<int32_t, MotionRange> mMotionRanges; }; /* * Provides remote access to information about an input device. * * Note: This is essentially a wrapper for Binder calls into the Window Manager Service. */ class InputDeviceProxy : public RefBase, public AInputDevice { protected: InputDeviceProxy(); virtual ~InputDeviceProxy(); public: static void getDeviceIds(Vector<int32_t>& outIds); static sp<InputDeviceProxy> getDevice(int32_t id); inline const InputDeviceInfo* getInfo() { return & mInfo; } // TODO add hasKeys, keymap, etc... private: InputDeviceInfo mInfo; }; } // namespace android Loading Loading
api/current.xml +55 −0 Original line number Diff line number Diff line Loading @@ -178278,6 +178278,17 @@ visibility="public" > </method> <method name="getKeyboardType" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="getMotionRange" return="android.view.InputDevice.MotionRange" abstract="false" Loading Loading @@ -178326,6 +178337,39 @@ <parameter name="keyCode" type="int"> </parameter> </method> <field name="KEYBOARD_TYPE_ALPHABETIC" type="int" transient="false" volatile="false" value="2" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="KEYBOARD_TYPE_NONE" type="int" transient="false" volatile="false" value="0" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="KEYBOARD_TYPE_NON_ALPHABETIC" type="int" transient="false" volatile="false" value="1" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="MOTION_RANGE_ORIENTATION" type="int" transient="false" Loading Loading @@ -178425,6 +178469,17 @@ visibility="public" > </field> <field name="SOURCE_ANY" type="int" transient="false" volatile="false" value="-256" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="SOURCE_CLASS_BUTTON" type="int" transient="false"
core/java/android/view/InputDevice.java +32 −0 Original line number Diff line number Diff line Loading @@ -30,11 +30,13 @@ package android.view; * As a further wrinkle, different kinds of input sources uses different coordinate systems * to describe motion events. Refer to the comments on the input source constants for * the appropriate interpretation. * </p> */ public final class InputDevice { private int mId; private String mName; private int mSources; private int mKeyboardType; /** * A mask for input source classes. Loading Loading @@ -174,6 +176,12 @@ public final class InputDevice { */ public static final int SOURCE_JOYSTICK_RIGHT = 0x02000000 | SOURCE_CLASS_JOYSTICK; /** * A special input source constant that is used when filtering input devices * to match devices that provide any type of input source. */ public static final int SOURCE_ANY = 0xffffff00; /** * Constant for retrieving the range of values for {@link MotionEvent.PointerCoords#x}. * Loading Loading @@ -238,6 +246,22 @@ public final class InputDevice { */ public static final int MOTION_RANGE_ORIENTATION = 8; /** * There is no keyboard. */ public static final int KEYBOARD_TYPE_NONE = 0; /** * The keyboard is not fully alphabetic. It may be a numeric keypad or an assortment * of buttons that are not mapped as alphabetic keys suitable for text input. */ public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; /** * The keyboard supports a complement of alphabetic keys. */ public static final int KEYBOARD_TYPE_ALPHABETIC = 2; /** * Gets information about the input device with the specified id. * @param id The device id. Loading @@ -264,6 +288,14 @@ public final class InputDevice { return mSources; } /** * Gets the keyboard type. * @return The keyboard type. */ public int getKeyboardType() { return mKeyboardType; } /** * Gets the key character map associated with this input device. * @return The key character map. Loading
core/java/android/view/MotionEvent.java +17 −17 Original line number Diff line number Diff line Loading @@ -181,61 +181,61 @@ public final class MotionEvent extends InputEvent implements Parcelable { * Offset for the sample's X coordinate. * @hide */ static public final int SAMPLE_X = 0; static private final int SAMPLE_X = 0; /** * Offset for the sample's Y coordinate. * @hide */ static public final int SAMPLE_Y = 1; static private final int SAMPLE_Y = 1; /** * Offset for the sample's pressure. * @hide */ static public final int SAMPLE_PRESSURE = 2; static private final int SAMPLE_PRESSURE = 2; /** * Offset for the sample's size * @hide */ static public final int SAMPLE_SIZE = 3; static private final int SAMPLE_SIZE = 3; /** * Offset for the sample's touch major axis length. * @hide */ static public final int SAMPLE_TOUCH_MAJOR = 4; static private final int SAMPLE_TOUCH_MAJOR = 4; /** * Offset for the sample's touch minor axis length. * @hide */ static public final int SAMPLE_TOUCH_MINOR = 5; static private final int SAMPLE_TOUCH_MINOR = 5; /** * Offset for the sample's tool major axis length. * @hide */ static public final int SAMPLE_TOOL_MAJOR = 6; static private final int SAMPLE_TOOL_MAJOR = 6; /** * Offset for the sample's tool minor axis length. * @hide */ static public final int SAMPLE_TOOL_MINOR = 7; static private final int SAMPLE_TOOL_MINOR = 7; /** * Offset for the sample's orientation. * @hide */ static public final int SAMPLE_ORIENTATION = 8; static private final int SAMPLE_ORIENTATION = 8; /** * Number of data items for each sample. * @hide */ static public final int NUM_SAMPLE_DATA = 9; static private final int NUM_SAMPLE_DATA = 9; /** * Number of possible pointers. Loading Loading @@ -918,7 +918,7 @@ public final class MotionEvent extends InputEvent implements Parcelable { * upwards, is perfectly circular or is of unknown orientation. A positive angle * indicates that the major axis of contact is oriented to the right. A negative angle * indicates that the major axis of contact is oriented to the left. * The full range is from -PI/4 radians (finger pointing fully left) to PI/4 radians * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians * (finger pointing fully right). * @param pointerIndex Raw index of pointer to retrieve. Value may be from 0 * (the first pointer that is down) to {@link #getPointerCount()}-1. Loading Loading @@ -1614,28 +1614,28 @@ public final class MotionEvent extends InputEvent implements Parcelable { * upwards, is perfectly circular or is of unknown orientation. A positive angle * indicates that the major axis of contact is oriented to the right. A negative angle * indicates that the major axis of contact is oriented to the left. * The full range is from -PI/4 radians (finger pointing fully left) to PI/4 radians * The full range is from -PI/2 radians (finger pointing fully left) to PI/2 radians * (finger pointing fully right). */ public float orientation; /* private static final float PI_8 = (float) (Math.PI / 8); private static final float PI_4 = (float) (Math.PI / 4); public float getTouchWidth() { return Math.abs(orientation) > PI_8 ? touchMajor : touchMinor; return Math.abs(orientation) > PI_4 ? touchMajor : touchMinor; } public float getTouchHeight() { return Math.abs(orientation) > PI_8 ? touchMinor : touchMajor; return Math.abs(orientation) > PI_4 ? touchMinor : touchMajor; } public float getToolWidth() { return Math.abs(orientation) > PI_8 ? toolMajor : toolMinor; return Math.abs(orientation) > PI_4 ? toolMajor : toolMinor; } public float getToolHeight() { return Math.abs(orientation) > PI_8 ? toolMinor : toolMajor; return Math.abs(orientation) > PI_4 ? toolMinor : toolMajor; } */ } Loading
include/ui/EventHub.h +47 −29 Original line number Diff line number Diff line Loading @@ -59,6 +59,31 @@ namespace android { class KeyLayoutMap; /* * A raw event as retrieved from the EventHub. */ struct RawEvent { nsecs_t when; int32_t deviceId; int32_t type; int32_t scanCode; int32_t keyCode; int32_t value; uint32_t flags; }; /* Describes an absolute axis. */ struct RawAbsoluteAxisInfo { bool valid; // true if the information is valid, false otherwise int32_t minValue; // minimum value int32_t maxValue; // maximum value int32_t flat; // center flat position, eg. flat == 8 means center is between -8 and 8 int32_t fuzz; // error tolerance, eg. fuzz == 4 means value is +/- 4 due to noise inline int32_t getRange() { return maxValue - minValue; } }; /* * Input device classes. */ Loading @@ -82,7 +107,10 @@ enum { INPUT_DEVICE_CLASS_DPAD = 0x00000020, /* The input device is a gamepad (implies keyboard). */ INPUT_DEVICE_CLASS_GAMEPAD = 0x00000040 INPUT_DEVICE_CLASS_GAMEPAD = 0x00000040, /* The input device has switches. */ INPUT_DEVICE_CLASS_SWITCH = 0x00000080, }; /* Loading Loading @@ -114,8 +142,8 @@ public: virtual String8 getDeviceName(int32_t deviceId) const = 0; virtual int getAbsoluteInfo(int32_t deviceId, int axis, int *outMinValue, int* outMaxValue, int* outFlat, int* outFuzz) const = 0; virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis, RawAbsoluteAxisInfo* outAxisInfo) const = 0; virtual status_t scancodeToKeycode(int32_t deviceId, int scancode, int32_t* outKeycode, uint32_t* outFlags) const = 0; Loading @@ -131,26 +159,19 @@ public: * If the device needs to remain awake longer than that, then the caller is responsible * for taking care of it (say, by poking the power manager user activity timer). */ virtual bool getEvent(int32_t* outDeviceId, int32_t* outType, int32_t* outScancode, int32_t* outKeycode, uint32_t *outFlags, int32_t* outValue, nsecs_t* outWhen) = 0; virtual bool getEvent(RawEvent* outEvent) = 0; /* * Query current input state. * deviceId may be -1 to search for the device automatically, filtered by class. * deviceClasses may be -1 to ignore device class while searching. */ virtual int32_t getScanCodeState(int32_t deviceId, int32_t deviceClasses, int32_t scanCode) const = 0; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t deviceClasses, int32_t keyCode) const = 0; virtual int32_t getSwitchState(int32_t deviceId, int32_t deviceClasses, int32_t sw) const = 0; virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const = 0; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const = 0; virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const = 0; /* * Examine key input devices for specific framework keycode support */ virtual bool hasKeys(size_t numCodes, const int32_t* keyCodes, virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const = 0; }; Loading @@ -165,33 +186,28 @@ public: virtual String8 getDeviceName(int32_t deviceId) const; virtual int getAbsoluteInfo(int32_t deviceId, int axis, int *outMinValue, int* outMaxValue, int* outFlat, int* outFuzz) const; virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis, RawAbsoluteAxisInfo* outAxisInfo) const; virtual status_t scancodeToKeycode(int32_t deviceId, int scancode, int32_t* outKeycode, uint32_t* outFlags) const; virtual void addExcludedDevice(const char* deviceName); virtual int32_t getScanCodeState(int32_t deviceId, int32_t deviceClasses, int32_t scanCode) const; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t deviceClasses, int32_t keyCode) const; virtual int32_t getSwitchState(int32_t deviceId, int32_t deviceClasses, int32_t sw) const; virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const; virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const; virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const; virtual bool hasKeys(size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const; virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const; virtual bool getEvent(int32_t* outDeviceId, int32_t* outType, int32_t* outScancode, int32_t* outKeycode, uint32_t *outFlags, int32_t* outValue, nsecs_t* outWhen); virtual bool getEvent(RawEvent* outEvent); protected: virtual ~EventHub(); private: bool openPlatformInput(void); int32_t convertDeviceKey_TI_P2(int code); int open_device(const char *device); int close_device(const char *device); Loading Loading @@ -220,6 +236,8 @@ private: int32_t getScanCodeStateLocked(device_t* device, int32_t scanCode) const; int32_t getKeyCodeStateLocked(device_t* device, int32_t keyCode) const; int32_t getSwitchStateLocked(device_t* device, int32_t sw) const; bool markSupportedKeyCodesLocked(device_t* device, size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) const; // Protect all internal state. mutable Mutex mLock; Loading
include/ui/Input.h +72 −11 Original line number Diff line number Diff line Loading @@ -23,7 +23,10 @@ #include <android/input.h> #include <utils/Vector.h> #include <utils/KeyedVector.h> #include <utils/Timers.h> #include <utils/RefBase.h> #include <utils/String8.h> /* * Additional private constants not defined in ndk/ui/input.h. Loading @@ -47,21 +50,16 @@ struct AInputEvent { virtual ~AInputEvent() { } }; namespace android { /* * A raw event as retrieved from the EventHub. * Declare a concrete type for the NDK's input device forward declaration. */ struct RawEvent { nsecs_t when; int32_t deviceId; int32_t type; int32_t scanCode; int32_t keyCode; int32_t value; uint32_t flags; struct AInputDevice { virtual ~AInputDevice() { } }; namespace android { /* * Flags that flow alongside events in the input dispatch system to help with certain * policy decisions such as waking from device sleep. Loading Loading @@ -424,6 +422,69 @@ private: MotionEvent mMotionEvent; }; /* * Describes the characteristics and capabilities of an input device. */ class InputDeviceInfo { public: InputDeviceInfo(); InputDeviceInfo(const InputDeviceInfo& other); ~InputDeviceInfo(); struct MotionRange { float min; float max; float flat; float fuzz; }; void initialize(int32_t id, const String8& name); inline int32_t getId() const { return mId; } inline const String8 getName() const { return mName; } inline uint32_t getSources() const { return mSources; } const MotionRange* getMotionRange(int32_t rangeType) const; void addSource(uint32_t source); void addMotionRange(int32_t rangeType, float min, float max, float flat, float fuzz); void addMotionRange(int32_t rangeType, const MotionRange& range); inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } private: int32_t mId; String8 mName; uint32_t mSources; int32_t mKeyboardType; KeyedVector<int32_t, MotionRange> mMotionRanges; }; /* * Provides remote access to information about an input device. * * Note: This is essentially a wrapper for Binder calls into the Window Manager Service. */ class InputDeviceProxy : public RefBase, public AInputDevice { protected: InputDeviceProxy(); virtual ~InputDeviceProxy(); public: static void getDeviceIds(Vector<int32_t>& outIds); static sp<InputDeviceProxy> getDevice(int32_t id); inline const InputDeviceInfo* getInfo() { return & mInfo; } // TODO add hasKeys, keymap, etc... private: InputDeviceInfo mInfo; }; } // namespace android Loading