/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_OS_HW_REMOTE_BINDER_H #define ANDROID_OS_HW_REMOTE_BINDER_H #include #include #include #include #include #include namespace android { // Per-IBinder death recipient bookkeeping. This is how we reconcile local jobject // death recipient references passed in through JNI with the permanent corresponding // HwBinderDeathRecipient objects. class HwBinderDeathRecipient; class HwBinderDeathRecipientList : public RefBase { std::vector> mList; Mutex mLock; protected: ~HwBinderDeathRecipientList() override; public: explicit HwBinderDeathRecipientList(); DISALLOW_COPY_AND_ASSIGN(HwBinderDeathRecipientList); void add(const sp& recipient); void remove(const sp& recipient); // finds the most recently added matching death recipient sp find(jobject recipient); Mutex& lock(); // Use with care; specifically for mutual exclusion during binder death }; struct JHwRemoteBinder : public RefBase { static void InitClass(JNIEnv *env); static sp SetNativeContext( JNIEnv *env, jobject thiz, const sp &context); static sp GetNativeContext(JNIEnv *env, jobject thiz); static jobject NewObject(JNIEnv *env, const sp &binder); JHwRemoteBinder( JNIEnv *env, jobject thiz, const sp &binder); sp getBinder() const; void setBinder(const sp &binder); sp getDeathRecipientList() const; private: sp mBinder; sp mDeathRecipientList; DISALLOW_COPY_AND_ASSIGN(JHwRemoteBinder); }; int register_android_os_HwRemoteBinder(JNIEnv *env); } // namespace android #endif // ANDROID_OS_HW_REMOTE_BINDER_H