OSDN Git Service

Fixes to native app ops services
authorEino-Ville Talvala <etalvala@google.com>
Tue, 19 Feb 2013 20:54:57 +0000 (12:54 -0800)
committerEino-Ville Talvala <etalvala@google.com>
Wed, 20 Feb 2013 02:10:05 +0000 (18:10 -0800)
Bug: 8181262
Change-Id: I3d3f20453f6c6f2756c988363c5b5453ef309cb6

include/binder/AppOpsManager.h
include/binder/IAppOpsService.h
libs/binder/AppOpsManager.cpp
libs/binder/IAppOpsService.cpp

index f64d5da..256cb94 100644 (file)
@@ -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 {
index 2883e38..7cb55e5 100644 (file)
@@ -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
-
index 5d36dd2..7ac1b11 100644 (file)
@@ -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();
index d8922c9..282b30f 100644 (file)
@@ -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) {