Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71b70a24 authored by Casey Dahlin's avatar Casey Dahlin Committed by Gerrit Code Review
Browse files

Merge "Add readStrongBinder that takes an interface"

parents 1f76049c f0c13772
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
#include <utils/Flattenable.h>
#include <linux/binder.h>

#include <binder/IInterface.h>

// ---------------------------------------------------------------------------
namespace android {

@@ -196,8 +198,12 @@ public:
    status_t            readString16(String16* pArg) const;
    const char16_t*     readString16Inplace(size_t* outLen) const;
    sp<IBinder>         readStrongBinder() const;
    status_t            readStrongBinder(sp<IBinder>* val) const;
    wp<IBinder>         readWeakBinder() const;

    template<typename T>
    status_t readStrongBinder(sp<T>* val) const;

    status_t            readByteVector(std::vector<int8_t>* val) const;
    status_t            readInt32Vector(std::vector<int32_t>* val) const;
    status_t            readInt64Vector(std::vector<int64_t>* val) const;
@@ -430,6 +436,22 @@ status_t Parcel::read(LightFlattenable<T>& val) const {
    return NO_ERROR;
}

template<typename T>
status_t Parcel::readStrongBinder(sp<T>* val) const {
    sp<IBinder> tmp;
    status_t ret = readStrongBinder(&tmp);

    if (ret == OK) {
        *val = interface_cast<T>(tmp);

        if (val->get() == nullptr) {
            return UNKNOWN_ERROR;
        }
    }

    return ret;
}

// ---------------------------------------------------------------------------

inline TextOutput& operator<<(TextOutput& to, const Parcel& parcel)
+6 −1
Original line number Diff line number Diff line
@@ -1781,10 +1781,15 @@ const char16_t* Parcel::readString16Inplace(size_t* outLen) const
    return NULL;
}

status_t Parcel::readStrongBinder(sp<IBinder>* val) const
{
    return unflatten_binder(ProcessState::self(), *this, val);
}

sp<IBinder> Parcel::readStrongBinder() const
{
    sp<IBinder> val;
    unflatten_binder(ProcessState::self(), *this, &val);
    readStrongBinder(&val);
    return val;
}