From 4d85b8c0a38c14f854af8ff85391b7a8d1170d5b Mon Sep 17 00:00:00 2001 From: Ganesh Mahendran Date: Thu, 2 Nov 2017 14:43:38 +0000 Subject: Don't record audio if UID is idle - native framework If a UID is in an idle state we don't allow recording to protect user's privacy. If the UID is in an idle state we allow recording but report empty data (all zeros in the byte array) and once the process goes in an active state we report the real mic data. This avoids the race between the app being notified aboout its lifecycle and the audio system being notified about the state of a UID. Test: Added - AudioRecordTest#testRecordNoDataForIdleUids Passing - cts-tradefed run cts-dev -m CtsMediaTestCases -t android.media.cts.AudioRecordTest bug:63938985 Change-Id: I10db89c09498b487ce483d1868123fca95589b34 --- libs/binder/IActivityManager.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libs/binder/IActivityManager.cpp') diff --git a/libs/binder/IActivityManager.cpp b/libs/binder/IActivityManager.cpp index 50a8b28aae..b7a5fd99f6 100644 --- a/libs/binder/IActivityManager.cpp +++ b/libs/binder/IActivityManager.cpp @@ -56,6 +56,28 @@ public: } return fd; } + + virtual void registerUidObserver(const sp& observer, + const int32_t event, + const int32_t cutpoint, + const String16& callingPackage) + { + Parcel data, reply; + data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor()); + data.writeStrongBinder(IInterface::asBinder(observer)); + data.writeInt32(event); + data.writeInt32(cutpoint); + data.writeString16(callingPackage); + remote()->transact(REGISTER_UID_OBSERVER_TRANSACTION, data, &reply); + } + + virtual void unregisterUidObserver(const sp& observer) + { + Parcel data, reply; + data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor()); + data.writeStrongBinder(IInterface::asBinder(observer)); + remote()->transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, &reply); + } }; // ------------------------------------------------------------------------------------ -- cgit v1.2.3-59-g8ed1b 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(-) (limited to 'libs/binder/IActivityManager.cpp') 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