diff options
author | 2016-01-06 12:09:11 -0800 | |
---|---|---|
committer | 2016-03-01 17:16:44 -0800 | |
commit | 88612912ac8406f2be0eeff97892274f98509017 (patch) | |
tree | 20371d2545a833a19328512a85b4487335d30b49 /libs/gui/Surface.cpp | |
parent | 86e8a79a15849725e4964515a85fb9b34225f551 (diff) |
GUI: Move Surface.aidl here and implement for native
- Move android/view/Surface.aidl parcelable definition from frameworks/base
- Implement matching native behavior to android.view.Surface parceling,
to enable use of android.view.Surface in generated native AIDL interfaces
Bug: 25091611
Change-Id: I87ffbb9a19c27a99ce0749d0ca1f17aaa6b3fe74
Diffstat (limited to 'libs/gui/Surface.cpp')
-rw-r--r-- | libs/gui/Surface.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index c2956841fd..8025ca58b5 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -1259,4 +1259,57 @@ status_t Surface::unlockAndPost() return err; } +namespace view { + +status_t Surface::writeToParcel(Parcel* parcel) const { + return writeToParcel(parcel, false); +} + +status_t Surface::writeToParcel(Parcel* parcel, bool nameAlreadyWritten) const { + if (parcel == nullptr) return BAD_VALUE; + + status_t res = OK; + + if (!nameAlreadyWritten) res = parcel->writeString16(name); + + if (res == OK) { + res = parcel->writeStrongBinder( + IGraphicBufferProducer::asBinder(graphicBufferProducer)); + } + return res; +} + +status_t Surface::readFromParcel(const Parcel* parcel) { + return readFromParcel(parcel, false); +} + +status_t Surface::readFromParcel(const Parcel* parcel, bool nameAlreadyRead) { + if (parcel == nullptr) return BAD_VALUE; + + if (!nameAlreadyRead) { + name = readMaybeEmptyString16(parcel); + } + + sp<IBinder> binder; + + status_t res = parcel->readStrongBinder(&binder); + if (res != OK) return res; + + graphicBufferProducer = interface_cast<IGraphicBufferProducer>(binder); + + return OK; +} + +String16 Surface::readMaybeEmptyString16(const Parcel* parcel) { + size_t len; + const char16_t* str = parcel->readString16Inplace(&len); + if (str != nullptr) { + return String16(str, len); + } else { + return String16(); + } +} + +} // namespace view + }; // namespace android |