Note appOps with featureIds from native code
Test: atest CtsAppOpsTestCases
Bug: 136595429
Change-Id: I31cc35134035d19aa7b98567fd998ff7f406b271
diff --git a/libs/binder/AppOpsManager.cpp b/libs/binder/AppOpsManager.cpp
index 9da9c13..60f047f 100644
--- a/libs/binder/AppOpsManager.cpp
+++ b/libs/binder/AppOpsManager.cpp
@@ -115,18 +115,23 @@
}
int32_t AppOpsManager::noteOp(int32_t op, int32_t uid, const String16& callingPackage) {
- return noteOp(op, uid, callingPackage, String16("noteOp from native code"));
+ return noteOp(op, uid, callingPackage, String16(), String16());
}
int32_t AppOpsManager::noteOp(int32_t op, int32_t uid, const String16& callingPackage,
- const String16& message) {
+ const String16& featureId, const String16& message) {
sp<IAppOpsService> service = getService();
int32_t mode = service != nullptr
? service->noteOperation(op, uid, callingPackage)
: APP_OPS_MANAGER_UNAVAILABLE_MODE;
if (mode == AppOpsManager::MODE_ALLOWED) {
- markAppOpNoted(uid, callingPackage, op, message);
+ if (message.size() == 0) {
+ markAppOpNoted(uid, callingPackage, op, featureId,
+ String16("noteOp from native code"));
+ } else {
+ markAppOpNoted(uid, callingPackage, op, featureId, message);
+ }
}
return mode;
@@ -134,19 +139,23 @@
int32_t AppOpsManager::startOpNoThrow(int32_t op, int32_t uid, const String16& callingPackage,
bool startIfModeDefault) {
- return startOpNoThrow(op, uid, callingPackage, startIfModeDefault,
- String16("startOpNoThrow from native code"));
+ return startOpNoThrow(op, uid, callingPackage, startIfModeDefault, String16(), String16());
}
int32_t AppOpsManager::startOpNoThrow(int32_t op, int32_t uid, const String16& callingPackage,
- bool startIfModeDefault, const String16& message) {
+ bool startIfModeDefault, const String16& featureId, const String16& message) {
sp<IAppOpsService> service = getService();
int32_t mode = service != nullptr
? service->startOperation(getToken(service), op, uid, callingPackage,
startIfModeDefault) : APP_OPS_MANAGER_UNAVAILABLE_MODE;
if (mode == AppOpsManager::MODE_ALLOWED) {
- markAppOpNoted(uid, callingPackage, op, message);
+ if (message.size() == 0) {
+ markAppOpNoted(uid, callingPackage, op, featureId,
+ String16("startOp from native code"));
+ } else {
+ markAppOpNoted(uid, callingPackage, op, featureId, message);
+ }
}
return mode;
@@ -198,7 +207,7 @@
}
void AppOpsManager::markAppOpNoted(int32_t uid, const String16& packageName, int32_t opCode,
- const String16& message) {
+ const String16& featureId, const String16& message) {
// check it the appops needs to be collected and cache result
if (appOpsToNote[opCode] == 0) {
if (shouldCollectNotes(opCode)) {
@@ -212,14 +221,16 @@
return;
}
- noteAsyncOp(String16(), uid, packageName, opCode, message);
+ noteAsyncOp(String16(), uid, packageName, opCode, featureId, message);
}
void AppOpsManager::noteAsyncOp(const String16& callingPackageName, int32_t uid,
- const String16& packageName, int32_t opCode, const String16& message) {
+ const String16& packageName, int32_t opCode, const String16& featureId,
+ const String16& message) {
sp<IAppOpsService> service = getService();
if (service != nullptr) {
- return service->noteAsyncOp(callingPackageName, uid, packageName, opCode, message);
+ return service->noteAsyncOp(callingPackageName, uid, packageName, opCode, featureId,
+ message);
}
}