Add bind() function to the binder interface.

Update engine may have started and done some work before we call
applyPayload(). Add a new binder function bind() to register a
callback function that communicates with the update engine.

Bug: None
Test: 'mmma system/update_engine'.
Change-Id: Iafcdb250904b44f9526be15f0381690df50805a2
diff --git a/Android.mk b/Android.mk
index fa6c067..aa20b29 100644
--- a/Android.mk
+++ b/Android.mk
@@ -369,7 +369,7 @@
     libutils
 LOCAL_SRC_FILES := \
     binder_bindings/android/os/IUpdateEngine.aidl \
-    binder_bindings/android/os/IUpdateEnginePayloadApplicationCallback.aidl \
+    binder_bindings/android/os/IUpdateEngineCallback.aidl \
     binder_main.cc \
     binder_service.cc
 
diff --git a/binder_bindings/android/os/IUpdateEngine.aidl b/binder_bindings/android/os/IUpdateEngine.aidl
index ebc3ffb..1e8090e 100644
--- a/binder_bindings/android/os/IUpdateEngine.aidl
+++ b/binder_bindings/android/os/IUpdateEngine.aidl
@@ -16,12 +16,12 @@
 
 package android.os;
 
-import android.os.IUpdateEnginePayloadApplicationCallback;
+import android.os.IUpdateEngineCallback;
 
 interface IUpdateEngine {
-  int applyPayload(String url,
-                   in String[] headerKeyValuePairs,
-                   IUpdateEnginePayloadApplicationCallback callback);
+  void applyPayload(String url,
+                    in String[] headerKeyValuePairs);
+  boolean bind(IUpdateEngineCallback callback);
   void suspend();
   void resume();
   void cancel();
diff --git a/binder_bindings/android/os/IUpdateEnginePayloadApplicationCallback.aidl b/binder_bindings/android/os/IUpdateEngineCallback.aidl
similarity index 92%
rename from binder_bindings/android/os/IUpdateEnginePayloadApplicationCallback.aidl
rename to binder_bindings/android/os/IUpdateEngineCallback.aidl
index 871ef1d..729abdd 100644
--- a/binder_bindings/android/os/IUpdateEnginePayloadApplicationCallback.aidl
+++ b/binder_bindings/android/os/IUpdateEngineCallback.aidl
@@ -16,7 +16,7 @@
 
 package android.os;
 
-oneway interface IUpdateEnginePayloadApplicationCallback {
+oneway interface IUpdateEngineCallback {
   void onStatusUpdate(int status_code, float percentage);
   void onPayloadApplicationComplete(int error_code);
 }
diff --git a/binder_service.cc b/binder_service.cc
index 8029505..f412d42 100644
--- a/binder_service.cc
+++ b/binder_service.cc
@@ -18,19 +18,23 @@
 
 using android::OK;
 using android::String16;
-using android::os::IUpdateEnginePayloadApplicationCallback;
+using android::os::IUpdateEngineCallback;
 using android::sp;
 using android::binder::Status;
 using std::vector;
 
 namespace chromeos_update_engine {
 
+Status BinderService::bind(
+    const sp<IUpdateEngineCallback>& callback,
+    bool* return_value) {
+  *return_value = true;
+  return Status::ok();
+}
+
 Status BinderService::applyPayload(
     const String16& url,
-    const vector<String16>& header_kv_pairs,
-    const sp<IUpdateEnginePayloadApplicationCallback>& callback,
-    int32_t* return_value) {
-  *return_value = 0;
+    const vector<String16>& header_kv_pairs) {
   return Status::ok();
 }
 
diff --git a/binder_service.h b/binder_service.h
index bbbe5b6..71b9778 100644
--- a/binder_service.h
+++ b/binder_service.h
@@ -24,7 +24,7 @@
 #include <utils/StrongPointer.h>
 
 #include "android/os/BnUpdateEngine.h"
-#include "android/os/IUpdateEnginePayloadApplicationCallback.h"
+#include "android/os/IUpdateEngineCallback.h"
 
 namespace chromeos_update_engine {
 
@@ -35,10 +35,11 @@
 
   android::binder::Status applyPayload(
       const android::String16& url,
-      const std::vector<android::String16>& header_kv_pairs,
-      const android::sp<android::os::IUpdateEnginePayloadApplicationCallback>&
-          callback,
-      int32_t* return_value) override;
+      const std::vector<android::String16>& header_kv_pairs) override;
+
+  android::binder::Status bind(
+      const android::sp<android::os::IUpdateEngineCallback>& callback,
+      bool* return_value) override;
 
   android::binder::Status suspend() override;