diff options
-rw-r--r-- | include/binder/AppOpsManager.h | 6 | ||||
-rw-r--r-- | include/binder/IAppOpsService.h | 7 | ||||
-rw-r--r-- | libs/binder/AppOpsManager.cpp | 30 | ||||
-rw-r--r-- | libs/binder/IAppOpsService.cpp | 12 |
4 files changed, 29 insertions, 26 deletions
diff --git a/include/binder/AppOpsManager.h b/include/binder/AppOpsManager.h index f64d5da..256cb94 100644 --- a/include/binder/AppOpsManager.h +++ b/include/binder/AppOpsManager.h @@ -28,9 +28,9 @@ class AppOpsManager { public: enum { - MODE_ALLOWED = 0, - MODE_IGNORED = 1, - MODE_ERRORED = 2 + MODE_ALLOWED = IAppOpsService::MODE_ALLOWED, + MODE_IGNORED = IAppOpsService::MODE_IGNORED, + MODE_ERRORED = IAppOpsService::MODE_ERRORED }; enum { diff --git a/include/binder/IAppOpsService.h b/include/binder/IAppOpsService.h index 2883e38..7cb55e5 100644 --- a/include/binder/IAppOpsService.h +++ b/include/binder/IAppOpsService.h @@ -46,6 +46,12 @@ public: START_WATCHING_MODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+4, STOP_WATCHING_MODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+5 }; + + enum { + MODE_ALLOWED = 0, + MODE_IGNORED = 1, + MODE_ERRORED = 2 + }; }; // ---------------------------------------------------------------------- @@ -64,4 +70,3 @@ public: }; // namespace android #endif // ANDROID_IAPP_OPS_SERVICE_H - diff --git a/libs/binder/AppOpsManager.cpp b/libs/binder/AppOpsManager.cpp index 5d36dd2..7ac1b11 100644 --- a/libs/binder/AppOpsManager.cpp +++ b/libs/binder/AppOpsManager.cpp @@ -32,23 +32,21 @@ sp<IAppOpsService> AppOpsManager::getService() int64_t startTime = 0; mLock.lock(); sp<IAppOpsService> service = mService; - while (true) { - if (service == NULL || !service->asBinder()->isBinderAlive()) { - sp<IBinder> binder = defaultServiceManager()->checkService(_appops); - if (binder == NULL) { - // Wait for the app ops service to come back... - if (startTime == 0) { - startTime = uptimeMillis(); - ALOGI("Waiting for app ops service"); - } else if ((uptimeMillis()-startTime) > 10000) { - ALOGW("Waiting too long for app ops service, giving up"); - return NULL; - } - sleep(1); - } else { - service = interface_cast<IAppOpsService>(binder); - mService = service; + while (service == NULL || !service->asBinder()->isBinderAlive()) { + sp<IBinder> binder = defaultServiceManager()->checkService(_appops); + if (binder == NULL) { + // Wait for the app ops service to come back... + if (startTime == 0) { + startTime = uptimeMillis(); + ALOGI("Waiting for app ops service"); + } else if ((uptimeMillis()-startTime) > 10000) { + ALOGW("Waiting too long for app ops service, giving up"); + return NULL; } + sleep(1); + } else { + service = interface_cast<IAppOpsService>(binder); + mService = service; } } mLock.unlock(); diff --git a/libs/binder/IAppOpsService.cpp b/libs/binder/IAppOpsService.cpp index d8922c9..282b30f 100644 --- a/libs/binder/IAppOpsService.cpp +++ b/libs/binder/IAppOpsService.cpp @@ -45,8 +45,8 @@ public: data.writeString16(packageName); remote()->transact(CHECK_OPERATION_TRANSACTION, data, &reply); // fail on exception - if (reply.readExceptionCode() != 0) return 0; - return reply.readInt32() != 0; + if (reply.readExceptionCode() != 0) return MODE_ERRORED; + return reply.readInt32(); } virtual int32_t noteOperation(int32_t code, int32_t uid, const String16& packageName) { @@ -57,8 +57,8 @@ public: data.writeString16(packageName); remote()->transact(NOTE_OPERATION_TRANSACTION, data, &reply); // fail on exception - if (reply.readExceptionCode() != 0) return 0; - return reply.readInt32() != 0; + if (reply.readExceptionCode() != 0) return MODE_ERRORED; + return reply.readInt32(); } virtual int32_t startOperation(int32_t code, int32_t uid, const String16& packageName) { @@ -69,8 +69,8 @@ public: data.writeString16(packageName); remote()->transact(START_OPERATION_TRANSACTION, data, &reply); // fail on exception - if (reply.readExceptionCode() != 0) return 0; - return reply.readInt32() != 0; + if (reply.readExceptionCode() != 0) return MODE_ERRORED; + return reply.readInt32(); } virtual void finishOperation(int32_t code, int32_t uid, const String16& packageName) { |