Make client use binder interface on brillo

TEST=Verified status and update commands
Bug: 25908638

Change-Id: I7994de41001b4e116bffa539f23f1344ab1deae9
diff --git a/client_library/client_binder.h b/client_library/client_binder.h
index 22d1cf0..744b238 100644
--- a/client_library/client_binder.h
+++ b/client_library/client_binder.h
@@ -20,11 +20,17 @@
 #include <cstdint>
 #include <memory>
 #include <string>
+#include <vector>
 
 #include <base/macros.h>
 #include <utils/StrongPointer.h>
+#include <utils/String16.h>
+
+#include <brillo/binder_watcher.h>
 
 #include "android/brillo/IUpdateEngine.h"
+#include "android/brillo/BnUpdateEngineStatusCallback.h"
+
 
 #include "update_engine/client_library/include/update_engine/client.h"
 
@@ -71,10 +77,29 @@
 
   bool GetChannel(std::string* out_channel) const override;
 
-  void RegisterStatusUpdateHandler(StatusUpdateHandler* handler) override;
+  bool RegisterStatusUpdateHandler(StatusUpdateHandler* handler) override;
 
  private:
+  class StatusUpdateCallback :
+      public android::brillo::BnUpdateEngineStatusCallback {
+   public:
+    StatusUpdateCallback(BinderUpdateEngineClient* client) : client_(client) {}
+
+    android::binder::Status HandleStatusUpdate(
+        int64_t last_checked_time,
+        double progress,
+        const android::String16& current_operation,
+        const android::String16& new_version,
+        int64_t new_size) override;
+
+   private:
+    BinderUpdateEngineClient* client_;
+  };
+
   android::sp<android::brillo::IUpdateEngine> service_;
+  android::sp<android::brillo::IUpdateEngineStatusCallback> status_callback_;
+  std::vector<update_engine::StatusUpdateHandler*> handlers_;
+  brillo::BinderWatcher binder_watcher_;
 
   DISALLOW_COPY_AND_ASSIGN(BinderUpdateEngineClient);
 };  // class BinderUpdateEngineClient