[REFACTOR] DynamicPartitionControl: minimize API

- Move UpdatePartitionMetadata in boot_control_android.cc to
  DynamicPartitionControlAndroid::PreparePartitionsForUpdate to
  reflect code ownership better.
- Minimize the API by removing unused functions now that we have
  PreparePartitionsForUpdate
- Fix tests: replace MockDynamicPartitionControl to
  MockDynamicPartitionControlAndroid because it tests
  DynamicPartitionControlAndroid.

Test: unit test
Test: manually apply full OTA
Change-Id: I2959270bd89c4f8ddaa45cf45ba93acdec850f67
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index 334f9bd..e0859ed 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -36,21 +36,48 @@
                                   uint32_t slot,
                                   bool force_writable,
                                   std::string* path) override;
-  bool UnmapPartitionOnDeviceMapper(
-      const std::string& target_partition_name) override;
   void Cleanup() override;
   bool DeviceExists(const std::string& path) override;
   android::dm::DmDeviceState GetState(const std::string& name) override;
   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;
+
+  bool PreparePartitionsForUpdate(uint32_t source_slot,
+                                  uint32_t target_slot,
+                                  const BootControlInterface::PartitionMetadata&
+                                      partition_metadata) override;
+  bool GetDeviceDir(std::string* path) override;
+
+ protected:
+  // These functions are exposed for testing.
+
+  // Unmap logical partition on device mapper. This is the reverse operation
+  // of MapPartitionOnDeviceMapper.
+  // Returns true if unmapped successfully.
+  virtual bool UnmapPartitionOnDeviceMapper(
+      const std::string& target_partition_name);
+
+  // Retrieve metadata from |super_device| at slot |source_slot|.
+  //
+  // If |target_slot| != kInvalidSlot, before returning the metadata, this
+  // function modifies the metadata so that during updates, the metadata can be
+  // written to |target_slot|. In particular, on retrofit devices, the returned
+  // metadata automatically includes block devices at |target_slot|.
+  //
+  // If |target_slot| == kInvalidSlot, this function returns metadata at
+  // |source_slot| without modifying it. This is the same as
+  // LoadMetadataBuilder(const std::string&, uint32_t).
+  virtual std::unique_ptr<android::fs_mgr::MetadataBuilder> LoadMetadataBuilder(
       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;
-  bool GetDeviceDir(std::string* path) override;
+      uint32_t target_slot);
+
+  // Write metadata |builder| to |super_device| at slot |target_slot|.
+  virtual bool StoreMetadata(const std::string& super_device,
+                             android::fs_mgr::MetadataBuilder* builder,
+                             uint32_t target_slot);
 
  private:
   std::set<std::string> mapped_devices_;
@@ -62,6 +89,13 @@
                             bool force_writable,
                             std::string* path);
 
+  // Update |builder| according to |partition_metadata|, assuming the device
+  // does not have Virtual A/B.
+  bool UpdatePartitionMetadata(
+      android::fs_mgr::MetadataBuilder* builder,
+      uint32_t target_slot,
+      const BootControlInterface::PartitionMetadata& partition_metadata);
+
   DISALLOW_COPY_AND_ASSIGN(DynamicPartitionControlAndroid);
 };