1#ifndef ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H 2#define ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H 3 4#include <android/dvr/BnVirtualTouchpadService.h> 5 6#include "VirtualTouchpad.h" 7 8namespace android { 9namespace dvr { 10 11// VirtualTouchpadService implements the service side of 12// the Binder interface defined in VirtualTouchpadService.aidl. 13// 14class VirtualTouchpadService : public BnVirtualTouchpadService { 15 public: 16 VirtualTouchpadService(std::unique_ptr<VirtualTouchpad> touchpad) 17 : touchpad_(std::move(touchpad)), client_pid_(0) {} 18 ~VirtualTouchpadService() override; 19 20 protected: 21 // Implements IVirtualTouchpadService. 22 binder::Status attach() override; 23 binder::Status detach() override; 24 binder::Status touch(int touchpad, float x, float y, float pressure) override; 25 binder::Status buttonState(int touchpad, int buttons) override; 26 binder::Status scroll(int touchpad, float x, float y) override; 27 28 // Implements BBinder::dump(). 29 status_t dump(int fd, const Vector<String16>& args) override; 30 31 private: 32 bool CheckPermissions(); 33 bool CheckTouchPermission(pid_t* out_pid); 34 35 std::unique_ptr<VirtualTouchpad> touchpad_; 36 37 // Only one client at a time can use the virtual touchpad. 38 pid_t client_pid_; 39 40 VirtualTouchpadService(const VirtualTouchpadService&) = delete; 41 void operator=(const VirtualTouchpadService&) = delete; 42}; 43 44} // namespace dvr 45} // namespace android 46 47#endif // ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H 48