DynamicPartitionControl: support retrofit devices

On retrofit devices:

* The retrofit update includes block devices at source
  slot (for example, system_a, vendor_a, product_a).
  This is done automatically because the retrofit update
  does not look different from regular updates in OTA
  client's perspective.

* The first update after the retrofit update includes
  the rest of the block devices (in the above example,
  system_b, vendor_b and product_b).

In order to do the second,

* use NewForUpdate() API from liblp to automatically
  include block devices at the target slot when the metadata
  is loaded.

* Use FlashPartitionTable() API to flash metadata to system_b
  directly without reading existing metadata from it.

Test: manual OTA on retrofit devices
Bug: 118506262
Change-Id: Ib2c15b8a1a04271320bfef408813723a5b2a7bd7
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index 91c9f87..52d4f5b 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -43,7 +43,9 @@
   bool GetDmDevicePathByName(const std::string& name,
                              std::string* path) override;
   std::unique_ptr<android::fs_mgr::MetadataBuilder> LoadMetadataBuilder(
-      const std::string& super_device, uint32_t source_slot) override;
+      const std::string& super_device,
+      uint32_t source_slot,
+      uint32_t target_slot) override;
   bool StoreMetadata(const std::string& super_device,
                      android::fs_mgr::MetadataBuilder* builder,
                      uint32_t target_slot) override;