Don't list dynamic if a slot doesn't support DAP

If a slot doesn't support dynamic partitions, it's impossible to list
dynamic partitions on that slot. And we should just fall back to the
regular A/B in this case.

Bug: 180025432
Test: apply a retrofit package
Change-Id: I16c457b591e8c1d0cf1077a7be50dd9d8f61b8eb
diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc
index c4d6935..a1d5e91 100644
--- a/aosp/dynamic_partition_control_android.cc
+++ b/aosp/dynamic_partition_control_android.cc
@@ -1200,22 +1200,32 @@
 }
 
 bool DynamicPartitionControlAndroid::ListDynamicPartitionsForSlot(
-    uint32_t current_slot, std::vector<std::string>* partitions) {
-  if (!GetDynamicPartitionsFeatureFlag().IsEnabled()) {
-    LOG(ERROR) << "Dynamic partition is not enabled";
-    return false;
+    uint32_t slot,
+    uint32_t current_slot,
+    std::vector<std::string>* partitions) {
+  bool slot_enables_dynamic_partitions =
+      GetDynamicPartitionsFeatureFlag().IsEnabled();
+  // Check if the target slot has dynamic partitions, this may happen when
+  // applying a retrofit package.
+  if (slot != current_slot) {
+    slot_enables_dynamic_partitions =
+        slot_enables_dynamic_partitions && is_target_dynamic_;
+  }
+
+  if (!slot_enables_dynamic_partitions) {
+    LOG(INFO) << "Dynamic partition is not enabled for slot " << slot;
+    return true;
   }
 
   std::string device_dir_str;
   TEST_AND_RETURN_FALSE(GetDeviceDir(&device_dir_str));
   base::FilePath device_dir(device_dir_str);
-  auto super_device =
-      device_dir.Append(GetSuperPartitionName(current_slot)).value();
-  auto builder = LoadMetadataBuilder(super_device, current_slot);
+  auto super_device = device_dir.Append(GetSuperPartitionName(slot)).value();
+  auto builder = LoadMetadataBuilder(super_device, slot);
   TEST_AND_RETURN_FALSE(builder != nullptr);
 
   std::vector<std::string> result;
-  auto suffix = SlotSuffixForSlotNumber(current_slot);
+  auto suffix = SlotSuffixForSlotNumber(slot);
   for (const auto& group : builder->ListGroups()) {
     for (const auto& partition : builder->ListPartitionsInGroup(group)) {
       std::string_view partition_name = partition->name();
@@ -1332,7 +1342,9 @@
     const std::string& partition_name) {
   if (dynamic_partition_list_.empty() &&
       GetDynamicPartitionsFeatureFlag().IsEnabled()) {
-    CHECK(ListDynamicPartitionsForSlot(source_slot_, &dynamic_partition_list_));
+    // Use the DAP config of the target slot.
+    CHECK(ListDynamicPartitionsForSlot(
+        target_slot_, source_slot_, &dynamic_partition_list_));
   }
   return std::find(dynamic_partition_list_.begin(),
                    dynamic_partition_list_.end(),