Make client use binder interface on brillo
TEST=Verified status and update commands
Bug: 25908638
Change-Id: I7994de41001b4e116bffa539f23f1344ab1deae9
diff --git a/binder_service.cc b/binder_service.cc
index 19acf6e..07ff22d 100644
--- a/binder_service.cc
+++ b/binder_service.cc
@@ -16,6 +16,10 @@
#include "update_engine/binder_service.h"
+#include <base/bind.h>
+
+#include <binderwrapper/binder_wrapper.h>
+
#include <utils/String16.h>
#include <utils/StrongPointer.h>
@@ -166,7 +170,43 @@
Status BinderUpdateEngineService::RegisterStatusCallback(
const sp<IUpdateEngineStatusCallback>& callback) {
+ callbacks_.emplace_back(callback);
+
+ auto binder_wrapper = android::BinderWrapper::Get();
+
+ binder_wrapper->RegisterForDeathNotifications(
+ IUpdateEngineStatusCallback::asBinder(callback),
+ base::Bind(&BinderUpdateEngineService::UnregisterStatusCallback,
+ base::Unretained(this), base::Unretained(callback.get())));
+
return Status::ok();
}
+void BinderUpdateEngineService::UnregisterStatusCallback(
+ IUpdateEngineStatusCallback* callback) {
+ auto it = callbacks_.begin();
+
+ for (; it != callbacks_.end() && it->get() != callback; it++)
+ ;
+
+ if (it == callbacks_.end()) {
+ LOG(ERROR) << "Got death notification for unknown callback.";
+ return;
+ }
+
+ LOG(INFO) << "Erasing orphan callback";
+ callbacks_.erase(it);
+}
+
+void BinderUpdateEngineService::SendStatusUpdate(
+ int64_t in_last_checked_time, double in_progress,
+ const std::string& in_current_operation, const std::string& in_new_version,
+ int64_t in_new_size) {
+ for (auto& callback : callbacks_) {
+ callback->HandleStatusUpdate(in_last_checked_time, in_progress,
+ String16{in_current_operation.c_str()},
+ String16{in_new_version.c_str()}, in_new_size);
+ }
+}
+
} // namespace chromeos_update_engine