From fa851800cf97d1a3d30a7a147877005dc48721ff Mon Sep 17 00:00:00 2001 From: Svet Ganov Date: Tue, 27 Mar 2018 17:17:46 -0700 Subject: Add API to query if a UID is active Test: cts-tradefed run cts-dev -m CtsCameraTestCases Bug: 72863398 Change-Id: I8e5021f2ef4cd77fc89ae3b47cc32ad6913da0d6 --- libs/binder/ActivityManager.cpp | 9 +++++++++ libs/binder/IActivityManager.cpp | 12 ++++++++++++ libs/binder/include/binder/ActivityManager.h | 1 + libs/binder/include/binder/IActivityManager.h | 4 +++- 4 files changed, 25 insertions(+), 1 deletion(-) 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& observer) } } +bool ActivityManager::isUidActive(const uid_t uid, const String16& callingPackage) +{ + sp service = getService(); + if (service != NULL) { + return service->isUidActive(uid, callingPackage); + } + return false; +} + status_t ActivityManager::linkToDeath(const sp& recipient) { sp 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& observer); + bool isUidActive(const uid_t uid, const String16& callingPackage); status_t linkToDeath(const sp& recipient); status_t unlinkToDeath(const sp& 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& 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 }; }; -- cgit v1.2.3-59-g8ed1b