VirtualTouchpadClient.cpp revision 3002b8a74431dd7c005269cf9306443a4b4963f1
189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#include "VirtualTouchpadClient.h"
289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel
389af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#include <android/dvr/IVirtualTouchpadService.h>
489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel#include <binder/IServiceManager.h>
589af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel
689af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedelnamespace android {
789af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedelnamespace dvr {
889af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel
989af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedelnamespace {
1089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel
1189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedelclass VirtualTouchpadClientImpl : public VirtualTouchpadClient {
1289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel public:
134b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  VirtualTouchpadClientImpl(sp<IVirtualTouchpadService> service)
144b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel      : service_(service) {}
154b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  ~VirtualTouchpadClientImpl() override {}
164b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel
174b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  status_t Touch(int touchpad,
184b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel                 float x, float y, float pressure) override {
194b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    if (service_ == nullptr) {
204b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel      return NO_INIT;
214b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    }
224b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    return service_->touch(touchpad, x, y, pressure).transactionError();
234b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  }
244b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  status_t ButtonState(int touchpad, int buttons) override {
254b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    if (service_ == nullptr) {
264b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel      return NO_INIT;
274b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    }
284b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    return service_->buttonState(touchpad, buttons).transactionError();
294b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  }
304b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel
314b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel private:
324b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  sp<IVirtualTouchpadService> service_;
334b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel};
344b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel
354b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel}  // anonymous namespace
364b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel
374b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedelsp<VirtualTouchpad> VirtualTouchpadClient::Create() {
384b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  sp<IServiceManager> sm = defaultServiceManager();
394b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  if (sm == nullptr) {
404b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    ALOGE("no service manager");
414b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    return sp<VirtualTouchpad>();
424b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  }
434b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  sp<IVirtualTouchpadService> service = interface_cast<IVirtualTouchpadService>(
444b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel      sm->getService(IVirtualTouchpadService::SERVICE_NAME()));
454b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  if (service == nullptr) {
464b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    ALOGE("failed to get service");
474b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel    return sp<VirtualTouchpad>();
4889af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel  }
494b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel  return new VirtualTouchpadClientImpl(service);
5089af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel}
5189af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel
5289af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel}  // namespace dvr
533002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel}  // namespace android
5489af70bce420f011adfeb0f80984b3895c4d7d9bKevin Schoedel