diff options
-rw-r--r-- | data/etc/Android.bp | 6 | ||||
-rw-r--r-- | libs/binder/rust/Android.bp | 8 | ||||
-rw-r--r-- | libs/binder/rust/src/parcel/parcelable_holder.rs | 35 |
3 files changed, 34 insertions, 15 deletions
diff --git a/data/etc/Android.bp b/data/etc/Android.bp index 1be3a69a7d..31dee235e8 100644 --- a/data/etc/Android.bp +++ b/data/etc/Android.bp @@ -245,6 +245,12 @@ prebuilt_etc { } prebuilt_etc { + name: "go_handheld_core_hardware.prebuilt.xml", + src: "go_handheld_core_hardware.xml", + defaults: ["frameworks_native_data_etc_defaults"], +} + +prebuilt_etc { name: "handheld_core_hardware.prebuilt.xml", src: "handheld_core_hardware.xml", defaults: ["frameworks_native_data_etc_defaults"], diff --git a/libs/binder/rust/Android.bp b/libs/binder/rust/Android.bp index e4df98aa4f..90cbf9d45d 100644 --- a/libs/binder/rust/Android.bp +++ b/libs/binder/rust/Android.bp @@ -32,7 +32,7 @@ rust_library { "com.android.uwb", "com.android.virt", ], - min_sdk_version: "current", + min_sdk_version: "Tiramisu", } rust_library { @@ -79,7 +79,7 @@ rust_library { "com.android.uwb", "com.android.virt", ], - min_sdk_version: "current", + min_sdk_version: "Tiramisu", lints: "none", clippy_lints: "none", } @@ -137,7 +137,7 @@ rust_bindgen { "com.android.uwb", "com.android.virt", ], - min_sdk_version: "current", + min_sdk_version: "Tiramisu", } // TODO(b/184872979): remove once the Rust API is created. @@ -154,7 +154,7 @@ rust_bindgen { "com.android.uwb", "com.android.virt", ], - min_sdk_version: "current", + min_sdk_version: "Tiramisu", } rust_test { diff --git a/libs/binder/rust/src/parcel/parcelable_holder.rs b/libs/binder/rust/src/parcel/parcelable_holder.rs index bc70ea6c30..d58e839ad4 100644 --- a/libs/binder/rust/src/parcel/parcelable_holder.rs +++ b/libs/binder/rust/src/parcel/parcelable_holder.rs @@ -16,8 +16,10 @@ use crate::binder::Stability; use crate::error::StatusCode; -use crate::parcel::{BorrowedParcel, Parcel, Parcelable}; -use crate::{impl_deserialize_for_parcelable, impl_serialize_for_parcelable}; +use crate::parcel::{ + BorrowedParcel, Deserialize, Parcel, Parcelable, Serialize, NON_NULL_PARCELABLE_FLAG, + NULL_PARCELABLE_FLAG, +}; use downcast_rs::{impl_downcast, DowncastSync}; use std::any::Any; @@ -53,12 +55,6 @@ enum ParcelableHolderData { Parcel(Parcel), } -impl Default for ParcelableHolderData { - fn default() -> Self { - ParcelableHolderData::Empty - } -} - /// A container that can hold any arbitrary `Parcelable`. /// /// This type is currently used for AIDL parcelable fields. @@ -66,7 +62,7 @@ impl Default for ParcelableHolderData { /// `ParcelableHolder` is currently not thread-safe (neither /// `Send` nor `Sync`), mainly because it internally contains /// a `Parcel` which in turn is not thread-safe. -#[derive(Debug, Default)] +#[derive(Debug)] pub struct ParcelableHolder { // This is a `Mutex` because of `get_parcelable` // which takes `&self` for consistency with C++. @@ -176,8 +172,25 @@ impl ParcelableHolder { } } -impl_serialize_for_parcelable!(ParcelableHolder); -impl_deserialize_for_parcelable!(ParcelableHolder); +impl Serialize for ParcelableHolder { + fn serialize(&self, parcel: &mut BorrowedParcel<'_>) -> Result<(), StatusCode> { + parcel.write(&NON_NULL_PARCELABLE_FLAG)?; + self.write_to_parcel(parcel) + } +} + +impl Deserialize for ParcelableHolder { + fn deserialize(parcel: &BorrowedParcel<'_>) -> Result<Self, StatusCode> { + let status: i32 = parcel.read()?; + if status == NULL_PARCELABLE_FLAG { + Err(StatusCode::UNEXPECTED_NULL) + } else { + let mut parcelable = ParcelableHolder::new(Default::default()); + parcelable.read_from_parcel(parcel)?; + Ok(parcelable) + } + } +} impl Parcelable for ParcelableHolder { fn write_to_parcel(&self, parcel: &mut BorrowedParcel<'_>) -> Result<(), StatusCode> { |