diff options
-rw-r--r-- | libs/binder/ActivityManager.cpp | 9 | ||||
-rw-r--r-- | libs/binder/IActivityManager.cpp | 12 | ||||
-rw-r--r-- | libs/binder/include/binder/ActivityManager.h | 1 | ||||
-rw-r--r-- | libs/binder/include/binder/IActivityManager.h | 4 |
4 files changed, 25 insertions, 1 deletions
diff --git a/libs/binder/ActivityManager.cpp b/libs/binder/ActivityManager.cpp index 9adac26a31..2728f35408 100644 --- a/libs/binder/ActivityManager.cpp +++ b/libs/binder/ActivityManager.cpp @@ -80,6 +80,15 @@ void ActivityManager::unregisterUidObserver(const sp<IUidObserver>& observer) } } +bool ActivityManager::isUidActive(const uid_t uid, const String16& callingPackage) +{ + sp<IActivityManager> service = getService(); + if (service != NULL) { + return service->isUidActive(uid, callingPackage); + } + return false; +} + status_t ActivityManager::linkToDeath(const sp<IBinder::DeathRecipient>& recipient) { sp<IActivityManager> service = getService(); if (service != NULL) { diff --git a/libs/binder/IActivityManager.cpp b/libs/binder/IActivityManager.cpp index b7a5fd99f6..428db4d579 100644 --- a/libs/binder/IActivityManager.cpp +++ b/libs/binder/IActivityManager.cpp @@ -78,6 +78,18 @@ public: data.writeStrongBinder(IInterface::asBinder(observer)); remote()->transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, &reply); } + + virtual bool isUidActive(const uid_t uid, const String16& callingPackage) + { + Parcel data, reply; + data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor()); + data.writeInt32(uid); + data.writeString16(callingPackage); + remote()->transact(IS_UID_ACTIVE_TRANSACTION, data, &reply); + // fail on exception + if (reply.readExceptionCode() != 0) return false; + return reply.readInt32() == 1; + } }; // ------------------------------------------------------------------------------------ diff --git a/libs/binder/include/binder/ActivityManager.h b/libs/binder/include/binder/ActivityManager.h index 397382f825..3090cae12a 100644 --- a/libs/binder/include/binder/ActivityManager.h +++ b/libs/binder/include/binder/ActivityManager.h @@ -50,6 +50,7 @@ public: const int32_t cutpoint, const String16& callingPackage); void unregisterUidObserver(const sp<IUidObserver>& observer); + bool isUidActive(const uid_t uid, const String16& callingPackage); status_t linkToDeath(const sp<IBinder::DeathRecipient>& recipient); status_t unlinkToDeath(const sp<IBinder::DeathRecipient>& recipient); diff --git a/libs/binder/include/binder/IActivityManager.h b/libs/binder/include/binder/IActivityManager.h index bac2a99a8f..6607c0e8e6 100644 --- a/libs/binder/include/binder/IActivityManager.h +++ b/libs/binder/include/binder/IActivityManager.h @@ -35,11 +35,13 @@ public: const int32_t cutpoint, const String16& callingPackage) = 0; virtual void unregisterUidObserver(const sp<IUidObserver>& observer) = 0; + virtual bool isUidActive(const uid_t uid, const String16& callingPackage) = 0; enum { OPEN_CONTENT_URI_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, REGISTER_UID_OBSERVER_TRANSACTION, - UNREGISTER_UID_OBSERVER_TRANSACTION + UNREGISTER_UID_OBSERVER_TRANSACTION, + IS_UID_ACTIVE_TRANSACTION }; }; |