189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#ifndef ANDROID_DVR_VIRTUAL_TOUCHPAD_INTERFACE_H 289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#define ANDROID_DVR_VIRTUAL_TOUCHPAD_INTERFACE_H 389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 4de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel#include "dvr/virtual_touchpad_client.h" 5de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel 6de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel#include <memory> 789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#include <utils/Errors.h> 84b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel#include <utils/String8.h> 989af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 1089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedelnamespace android { 1189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedelnamespace dvr { 1289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 1389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel// Provides a virtual touchpad for injecting events into the input system. 1489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel// 15de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedelclass VirtualTouchpad { 1689af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel public: 173002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel enum : int { 18de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel PRIMARY = DVR_VIRTUAL_TOUCHPAD_PRIMARY, 19de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel VIRTUAL = DVR_VIRTUAL_TOUCHPAD_VIRTUAL, 203002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel }; 213002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel 22de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel virtual ~VirtualTouchpad() {} 23de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel 2489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Create a virtual touchpad. 2589af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Implementations should provide this, and hide their constructors. 2689af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // For the user, switching implementations should be as simple as changing 2789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // the class whose |Create()| is called. 284b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // Implementations should be minimial; major resource allocation should 294b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // be performed in Attach(). 30de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel static std::unique_ptr<VirtualTouchpad> Create() { 31de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel return nullptr; 3289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel } 3389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 344b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // Initialize a virtual touchpad. 354b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel virtual status_t Attach() = 0; 364b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel 374b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // Shut down a virtual touchpad. 384b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel virtual status_t Detach() = 0; 394b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel 4089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Generate a simulated touch event. 4189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // 423002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel // @param touchpad Touchpad selector index. 4389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // @param x Horizontal touch position. 4489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // @param y Vertical touch position. 4589af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Values must be in the range [0.0, 1.0). 4689af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // @param pressure Touch pressure. 4789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Positive values represent contact; use 1.0f if contact 4889af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // is binary. Use 0.0f for no contact. 4989af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // @returns OK on success. 5089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // 513002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel virtual status_t Touch(int touchpad, float x, float y, float pressure) = 0; 5289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 5389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Generate a simulated touchpad button state. 5489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // 553002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel // @param touchpad Touchpad selector index. 5689af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // @param buttons A union of MotionEvent BUTTON_* values. 5789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // @returns OK on success. 5889af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // 5989af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // Currently only BUTTON_BACK is supported, as the implementation 6089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // restricts itself to operations actually required by VrWindowManager. 6189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel // 623002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel virtual status_t ButtonState(int touchpad, int buttons) = 0; 6389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 644b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // Report state for 'dumpsys'. 654b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel virtual void dumpInternal(String8& result) = 0; 664b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel 6789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel protected: 6889af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel VirtualTouchpad() {} 6989af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 7089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel private: 7189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel VirtualTouchpad(const VirtualTouchpad&) = delete; 7289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel void operator=(const VirtualTouchpad&) = delete; 7389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel}; 7489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 7589af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel} // namespace dvr 7689af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel} // namespace android 7789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel 7889af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#endif // ANDROID_DVR_VIRTUAL_TOUCHPAD_INTERFACE_H 79