summaryrefslogtreecommitdiff
path: root/libs/permission/AppOpsManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/permission/AppOpsManager.cpp')
-rw-r--r--libs/permission/AppOpsManager.cpp63
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,