#ifndef ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H #define ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H #include #include "VirtualTouchpad.h" namespace android { namespace dvr { // VirtualTouchpadService implements the service side of // the Binder interface defined in VirtualTouchpadService.aidl. // class VirtualTouchpadService : public BnVirtualTouchpadService { public: explicit VirtualTouchpadService(std::unique_ptr touchpad) : touchpad_(std::move(touchpad)), client_pid_(0) {} ~VirtualTouchpadService() override; protected: // Implements IVirtualTouchpadService. binder::Status attach() override; binder::Status detach() override; binder::Status touch(int touchpad, float x, float y, float pressure) override; binder::Status buttonState(int touchpad, int buttons) override; binder::Status scroll(int touchpad, float x, float y) override; // Implements BBinder::dump(). status_t dump(int fd, const Vector& args) override; private: bool CheckPermissions(); bool CheckTouchPermission(pid_t* out_pid); std::unique_ptr touchpad_; // Only one client at a time can use the virtual touchpad. pid_t client_pid_; VirtualTouchpadService(const VirtualTouchpadService&) = delete; void operator=(const VirtualTouchpadService&) = delete; }; } // namespace dvr } // namespace android #endif // ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H