VirtualTouchpadClient.cpp revision de1cdaebc9b8fdbc5348e6c07f849b74bacc485d
1#include "VirtualTouchpadClient.h"
2
3#include <android/dvr/IVirtualTouchpadService.h>
4#include <binder/IServiceManager.h>
5
6namespace android {
7namespace dvr {
8
9namespace {
10
11class VirtualTouchpadClientImpl : public VirtualTouchpadClient {
12 public:
13  VirtualTouchpadClientImpl() {}
14  ~VirtualTouchpadClientImpl() override {
15    if (service_ != nullptr) {
16      Detach();
17    }
18  }
19
20  status_t Attach() {
21    if (service_ != nullptr) {
22      return ALREADY_EXISTS;
23    }
24    sp<IServiceManager> sm = defaultServiceManager();
25    if (sm == nullptr) {
26      ALOGE("no service manager");
27      return NO_INIT;
28    }
29    sp<IVirtualTouchpadService> service =
30        interface_cast<IVirtualTouchpadService>(
31            sm->getService(IVirtualTouchpadService::SERVICE_NAME()));
32    if (service == nullptr) {
33      ALOGE("failed to get service");
34      return NAME_NOT_FOUND;
35    }
36    service_ = service;
37    return service_->attach().transactionError();
38  }
39
40  status_t Detach() {
41    if (service_ == nullptr) {
42      return NO_INIT;
43    }
44    status_t status = service_->detach().transactionError();
45    service_ = nullptr;
46    return status;
47  }
48
49  status_t Touch(int touchpad, float x, float y, float pressure) override {
50    if (service_ == nullptr) {
51      return NO_INIT;
52    }
53    return service_->touch(touchpad, x, y, pressure).transactionError();
54  }
55
56  status_t ButtonState(int touchpad, int buttons) override {
57    if (service_ == nullptr) {
58      return NO_INIT;
59    }
60    return service_->buttonState(touchpad, buttons).transactionError();
61  }
62
63  void dumpInternal(String8& result) override {
64    result.append("[virtual touchpad]\n");
65    result.appendFormat("connected = %s\n\n",
66                        service_ != nullptr ? "true" : "false");
67  }
68
69 private:
70  sp<IVirtualTouchpadService> service_;
71};
72
73}  // anonymous namespace
74
75std::unique_ptr<VirtualTouchpad> VirtualTouchpadClient::Create() {
76  return std::unique_ptr<VirtualTouchpad>(new VirtualTouchpadClientImpl());
77}
78
79}  // namespace dvr
80}  // namespace android
81