diff options
Diffstat (limited to 'libs/permission/AppOpsManager.cpp')
-rw-r--r-- | libs/permission/AppOpsManager.cpp | 63 |
1 files changed, 47 insertions, 16 deletions
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<IBinder>& getClientId() { static pthread_mutex_t gClientIdMutex = PTHREAD_MUTEX_INITIALIZER; static sp<IBinder> gClientId; @@ -43,6 +46,11 @@ static const sp<IBinder>& getClientId() { return gClientId; } + +static std::string getString(const String16& stringToConvert) { + return std::string(String8(stringToConvert).c_str()); +} + AppOpsManager::AppOpsManager() { } @@ -78,9 +86,14 @@ sp<IAppOpsService> AppOpsManager::getService() int32_t AppOpsManager::checkOp(int32_t op, int32_t uid, const String16& callingPackage) { sp<IAppOpsService> 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<String16>& attributionTag, const String16& message) { sp<IAppOpsService> 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<String16>& attributionTag, const String16& message) { sp<IAppOpsService> 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<String16>& attributionTag) { sp<IAppOpsService> 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, |