From 14f7ae8fa66cf12bd6ef641635d9d0a73bf92993 Mon Sep 17 00:00:00 2001 From: Karishma Vakil Date: Mon, 21 Aug 2023 17:40:30 +0000 Subject: [DeviceAware] Use AttributionSourceState in native AppOpsService checkOp, noteOp, startOp, finishOp methods This allows us to reduce the number of parameters being passed around and also enables easy addition of new parameters such as device id. Note that this change is unflagged and is meant to be a pure refactor. This is preparatory CL and no new methods are being added to AppOpsManager yet, but will be needed to allow clients to pass in device id. Bug: 299160174 Test: atest CtsAppOpsTestCases CtsAppOps2TestCases Change-Id: Ic2fdb088b3a3913a510c8c73f24570147267efd0 --- libs/permission/AppOpsManager.cpp | 63 +++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 16 deletions(-) (limited to 'libs/permission/AppOpsManager.cpp') diff --git a/libs/permission/AppOpsManager.cpp b/libs/permission/AppOpsManager.cpp index 695927418d..b407d02087 100644 --- a/libs/permission/AppOpsManager.cpp +++ b/libs/permission/AppOpsManager.cpp @@ -31,6 +31,9 @@ namespace android { +using ::android::String16; +using ::android::String8; + static const sp& getClientId() { static pthread_mutex_t gClientIdMutex = PTHREAD_MUTEX_INITIALIZER; static sp gClientId; @@ -43,6 +46,11 @@ static const sp& getClientId() { return gClientId; } + +static std::string getString(const String16& stringToConvert) { + return std::string(String8(stringToConvert).c_str()); +} + AppOpsManager::AppOpsManager() { } @@ -78,9 +86,14 @@ sp AppOpsManager::getService() int32_t AppOpsManager::checkOp(int32_t op, int32_t uid, const String16& callingPackage) { sp service = getService(); - return service != nullptr - ? service->checkOperation(op, uid, callingPackage) - : AppOpsManager::MODE_IGNORED; + if (service == nullptr) { + return AppOpsManager::MODE_IGNORED; + } + AttributionSourceState attributionSourceState; + attributionSourceState.uid = uid; + attributionSourceState.packageName = getString(callingPackage); + + return service->checkOperationWithState(op, attributionSourceState); } int32_t AppOpsManager::checkAudioOpNoThrow(int32_t op, int32_t usage, int32_t uid, @@ -99,12 +112,18 @@ int32_t AppOpsManager::noteOp(int32_t op, int32_t uid, const String16& callingPa int32_t AppOpsManager::noteOp(int32_t op, int32_t uid, const String16& callingPackage, const std::optional& attributionTag, const String16& message) { sp service = getService(); - int32_t mode = service != nullptr - ? service->noteOperation(op, uid, callingPackage, attributionTag, - shouldCollectNotes(op), message, uid == AID_SYSTEM) - : AppOpsManager::MODE_IGNORED; + if (service == nullptr) { + return AppOpsManager::MODE_IGNORED; + } + AttributionSourceState attributionSourceState; + attributionSourceState.uid = uid; + attributionSourceState.packageName = getString(callingPackage); + if (attributionTag.has_value()) { + attributionSourceState.attributionTag = getString(attributionTag.value()); + } - return mode; + return service->noteOperationWithState(op, attributionSourceState, + shouldCollectNotes(op), message, uid == AID_SYSTEM); } int32_t AppOpsManager::startOpNoThrow(int32_t op, int32_t uid, const String16& callingPackage, @@ -117,13 +136,18 @@ int32_t AppOpsManager::startOpNoThrow(int32_t op, int32_t uid, const String16& c bool startIfModeDefault, const std::optional& attributionTag, const String16& message) { sp service = getService(); - int32_t mode = service != nullptr - ? service->startOperation(getClientId(), op, uid, callingPackage, - attributionTag, startIfModeDefault, shouldCollectNotes(op), message, - uid == AID_SYSTEM) - : AppOpsManager::MODE_IGNORED; + if (service == nullptr) { + return AppOpsManager::MODE_IGNORED; + } + AttributionSourceState attributionSourceState; + attributionSourceState.uid = uid; + attributionSourceState.packageName = getString(callingPackage); + if (attributionTag.has_value()) { + attributionSourceState.attributionTag = getString(attributionTag.value()); + } - return mode; + return service->startOperationWithState(getClientId(), op, attributionSourceState, + startIfModeDefault,shouldCollectNotes(op), message, uid == AID_SYSTEM); } void AppOpsManager::finishOp(int32_t op, int32_t uid, const String16& callingPackage) { @@ -133,9 +157,16 @@ void AppOpsManager::finishOp(int32_t op, int32_t uid, const String16& callingPac void AppOpsManager::finishOp(int32_t op, int32_t uid, const String16& callingPackage, const std::optional& attributionTag) { sp service = getService(); - if (service != nullptr) { - service->finishOperation(getClientId(), op, uid, callingPackage, attributionTag); + if (service == nullptr) { + return; + } + AttributionSourceState attributionSourceState; + attributionSourceState.uid = uid; + attributionSourceState.packageName = getString(callingPackage); + if (attributionTag.has_value()) { + attributionSourceState.attributionTag = getString(attributionTag.value()); } + service->finishOperationWithState(getClientId(), op, attributionSourceState); } void AppOpsManager::startWatchingMode(int32_t op, const String16& packageName, -- cgit v1.2.3-59-g8ed1b