partitionmanager: Use boot HIDL to switch active slots

Change-Id: I7009380d7736f71e63d5558b6a447961cc1075c7
(cherry picked from commit b20dfaa26d35aa1be55ca96674975203b4a4e355)
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index e0bd005..8d1b6c4 100755
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -110,8 +110,9 @@
 #endif
 
 #ifdef AB_OTA_UPDATER
-#include <hardware/hardware.h>
-#include <hardware/boot_control.h>
+#include <android/hardware/boot/1.0/IBootControl.h>
+using android::hardware::boot::V1_0::CommandResult;
+using android::hardware::boot::V1_0::IBootControl;
 #endif
 
 using android::fs_mgr::DestroyLogicalPartition;
@@ -3128,19 +3129,17 @@
 	LOGINFO("Setting active slot %s\n", Slot.c_str());
 #ifdef AB_OTA_UPDATER
 	if (!Active_Slot_Display.empty()) {
-		const hw_module_t *hw_module;
-		boot_control_module_t *module;
-		int ret;
-		ret = hw_get_module("bootctrl", &hw_module);
-		if (ret != 0) {
+		android::sp<IBootControl> module = IBootControl::getService();
+		if (module == nullptr) {
 			LOGERR("Error getting bootctrl module.\n");
 		} else {
-			module = (boot_control_module_t*) hw_module;
-			module->init(module);
-			int slot_number = 0;
+			uint32_t slot_number = 0;
 			if (Slot == "B")
 				slot_number = 1;
-			if (module->setActiveBootSlot(module, slot_number))
+			CommandResult result;
+			auto ret = module->setActiveBootSlot(slot_number, [&result]
+					(const CommandResult &cb_result) { result = cb_result; });
+			if (!ret.isOk() || !result.success)
 				gui_msg(Msg(msg::kError, "unable_set_boot_slot=Error changing bootloader boot slot to {1}")(Slot));
 		}
 		DataManager::SetValue("tw_active_slot", Slot); // Doing this outside of this if block may result in a seg fault because the DataManager may not be ready yet