diff options
| -rw-r--r-- | libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h b/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h index f45aa7631b..c1f2620770 100644 --- a/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h +++ b/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h @@ -58,6 +58,9 @@ class AParcelableHolder { #endif AParcel_appendFrom(other.mParcel.get(), this->mParcel.get(), 0, AParcel_getDataSize(other.mParcel.get())); + } else { + syslog(LOG_ERR, + "sdk_version not compatible, AParcelableHolder need sdk_version >= 31!"); } } #endif @@ -192,6 +195,9 @@ class AParcelableHolder { if (__ANDROID_API__ >= 31) { #endif AParcel_reset(mParcel.get()); + } else { + syslog(LOG_ERR, + "sdk_version not compatible, AParcelableHolder need sdk_version >= 31!"); } } @@ -201,6 +207,29 @@ class AParcelableHolder { inline bool operator==(const AParcelableHolder& rhs) const { return this == &rhs; } inline bool operator>(const AParcelableHolder& rhs) const { return this > &rhs; } inline bool operator>=(const AParcelableHolder& rhs) const { return this >= &rhs; } +#if __ANDROID_API__ >= 31 + inline AParcelableHolder& operator=(const AParcelableHolder& rhs) { + // AParcelableHolder has been introduced in 31. +#ifdef __ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__ + if (__builtin_available(android 31, *)) { +#else + if (__ANDROID_API__ >= 31) { +#endif + this->reset(); + if (this->mStability != rhs.mStability) { + syslog(LOG_ERR, "AParcelableHolder stability mismatch: this %d rhs %d!", + this->mStability, rhs.mStability); + abort(); + } + AParcel_appendFrom(rhs.mParcel.get(), this->mParcel.get(), 0, + AParcel_getDataSize(rhs.mParcel.get())); + } else { + syslog(LOG_ERR, + "sdk_version not compatible, AParcelableHolder need sdk_version >= 31!"); + } + return *this; + } +#endif private: mutable ndk::ScopedAParcel mParcel; |