diff options
| -rw-r--r-- | dynamic_partition_control_android.cc | 7 | ||||
| -rw-r--r-- | dynamic_partition_control_interface.h | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc index 0c1f0d30..e194670f 100644 --- a/dynamic_partition_control_android.cc +++ b/dynamic_partition_control_android.cc @@ -369,6 +369,13 @@ bool DynamicPartitionControlAndroid::PreparePartitionsForUpdate( return PrepareSnapshotPartitionsForUpdate( source_slot, target_slot, manifest); } + + if (GetVirtualAbFeatureFlag().IsLaunch() && !target_supports_snapshot_) { + LOG(ERROR) << "Cannot downgrade to a build that does not support " + << "snapshots because this device launches with Virtual A/B."; + return false; + } + if (!snapshot_->CancelUpdate()) { LOG(ERROR) << "Cannot cancel previous update."; return false; diff --git a/dynamic_partition_control_interface.h b/dynamic_partition_control_interface.h index 9c4c2e82..9c18973f 100644 --- a/dynamic_partition_control_interface.h +++ b/dynamic_partition_control_interface.h @@ -36,6 +36,7 @@ struct FeatureFlag { constexpr explicit FeatureFlag(Value value) : value_(value) {} constexpr bool IsEnabled() const { return value_ != Value::NONE; } constexpr bool IsRetrofit() const { return value_ == Value::RETROFIT; } + constexpr bool IsLaunch() const { return value_ == Value::LAUNCH; } private: Value value_; |
