Loading include/binder/AppOpsManager.h +25 −1 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,31 @@ public: OP_ACCESS_NOTIFICATIONS = 25, OP_ACCESS_NOTIFICATIONS = 25, OP_CAMERA = 26, OP_CAMERA = 26, OP_RECORD_AUDIO = 27, OP_RECORD_AUDIO = 27, OP_PLAY_AUDIO = 28 OP_PLAY_AUDIO = 28, OP_READ_CLIPBOARD = 29, OP_WRITE_CLIPBOARD = 30, OP_TAKE_MEDIA_BUTTONS = 31, OP_TAKE_AUDIO_FOCUS = 32, OP_AUDIO_MASTER_VOLUME = 33, OP_AUDIO_VOICE_VOLUME = 34, OP_AUDIO_RING_VOLUME = 35, OP_AUDIO_MEDIA_VOLUME = 36, OP_AUDIO_ALARM_VOLUME = 37, OP_AUDIO_NOTIFICATION_VOLUME = 38, OP_AUDIO_BLUETOOTH_VOLUME = 39, OP_WAKE_LOCK = 40, OP_MONITOR_LOCATION = 41, OP_MONITOR_HIGH_POWER_LOCATION = 42, OP_GET_USAGE_STATS = 43, OP_MUTE_MICROPHONE = 44, OP_TOAST_WINDOW = 45, OP_PROJECT_MEDIA = 46, OP_ACTIVATE_VPN = 47, OP_WRITE_WALLPAPER = 48, OP_ASSIST_STRUCTURE = 49, OP_ASSIST_SCREENSHOT = 50, OP_READ_PHONE_STATE = 51, OP_ADD_VOICEMAIL = 52 }; }; AppOpsManager(); AppOpsManager(); Loading include/binder/IPermissionController.h +7 −4 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #define ANDROID_IPERMISSION_CONTROLLER_H #define ANDROID_IPERMISSION_CONTROLLER_H #include <binder/IInterface.h> #include <binder/IInterface.h> #include <stdlib.h> namespace android { namespace android { Loading @@ -29,11 +30,13 @@ class IPermissionController : public IInterface public: public: DECLARE_META_INTERFACE(PermissionController); DECLARE_META_INTERFACE(PermissionController); virtual bool checkPermission(const String16& permission, virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) = 0; int32_t pid, int32_t uid) = 0; virtual void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0; enum { enum { CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, GET_PACKAGES_FOR_UID_TRANSACTION = CHECK_PERMISSION_TRANSACTION + 1 }; }; }; }; Loading libs/binder/IPermissionController.cpp +34 −1 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,25 @@ public: if (reply.readExceptionCode() != 0) return 0; if (reply.readExceptionCode() != 0) return 0; return reply.readInt32() != 0; return reply.readInt32() != 0; } } virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages) { Parcel data, reply; data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor()); data.writeInt32(uid); remote()->transact(GET_PACKAGES_FOR_UID_TRANSACTION, data, &reply); // fail on exception if (reply.readExceptionCode() != 0) { return; } const int32_t size = reply.readInt32(); if (size <= 0) { return; } for (int i = 0; i < size; i++) { packages.push(reply.readString16()); } } }; }; IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController"); IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController"); Loading @@ -57,7 +76,6 @@ IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController status_t BnPermissionController::onTransact( status_t BnPermissionController::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { { //printf("PermissionController received: "); data.print(); switch(code) { switch(code) { case CHECK_PERMISSION_TRANSACTION: { case CHECK_PERMISSION_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); CHECK_INTERFACE(IPermissionController, data, reply); Loading @@ -69,6 +87,21 @@ status_t BnPermissionController::onTransact( reply->writeInt32(res ? 1 : 0); reply->writeInt32(res ? 1 : 0); return NO_ERROR; return NO_ERROR; } break; } break; case GET_PACKAGES_FOR_UID_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); int32_t uid = data.readInt32(); Vector<String16> packages; getPackagesForUid(uid, packages); reply->writeNoException(); size_t size = packages.size(); reply->writeInt32(size); for (size_t i = 0; i < size; i++) { reply->writeString16(packages[i]); } return NO_ERROR; } break; default: default: return BBinder::onTransact(code, data, reply, flags); return BBinder::onTransact(code, data, reply, flags); } } Loading Loading
include/binder/AppOpsManager.h +25 −1 Original line number Original line Diff line number Diff line Loading @@ -63,7 +63,31 @@ public: OP_ACCESS_NOTIFICATIONS = 25, OP_ACCESS_NOTIFICATIONS = 25, OP_CAMERA = 26, OP_CAMERA = 26, OP_RECORD_AUDIO = 27, OP_RECORD_AUDIO = 27, OP_PLAY_AUDIO = 28 OP_PLAY_AUDIO = 28, OP_READ_CLIPBOARD = 29, OP_WRITE_CLIPBOARD = 30, OP_TAKE_MEDIA_BUTTONS = 31, OP_TAKE_AUDIO_FOCUS = 32, OP_AUDIO_MASTER_VOLUME = 33, OP_AUDIO_VOICE_VOLUME = 34, OP_AUDIO_RING_VOLUME = 35, OP_AUDIO_MEDIA_VOLUME = 36, OP_AUDIO_ALARM_VOLUME = 37, OP_AUDIO_NOTIFICATION_VOLUME = 38, OP_AUDIO_BLUETOOTH_VOLUME = 39, OP_WAKE_LOCK = 40, OP_MONITOR_LOCATION = 41, OP_MONITOR_HIGH_POWER_LOCATION = 42, OP_GET_USAGE_STATS = 43, OP_MUTE_MICROPHONE = 44, OP_TOAST_WINDOW = 45, OP_PROJECT_MEDIA = 46, OP_ACTIVATE_VPN = 47, OP_WRITE_WALLPAPER = 48, OP_ASSIST_STRUCTURE = 49, OP_ASSIST_SCREENSHOT = 50, OP_READ_PHONE_STATE = 51, OP_ADD_VOICEMAIL = 52 }; }; AppOpsManager(); AppOpsManager(); Loading
include/binder/IPermissionController.h +7 −4 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #define ANDROID_IPERMISSION_CONTROLLER_H #define ANDROID_IPERMISSION_CONTROLLER_H #include <binder/IInterface.h> #include <binder/IInterface.h> #include <stdlib.h> namespace android { namespace android { Loading @@ -29,11 +30,13 @@ class IPermissionController : public IInterface public: public: DECLARE_META_INTERFACE(PermissionController); DECLARE_META_INTERFACE(PermissionController); virtual bool checkPermission(const String16& permission, virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) = 0; int32_t pid, int32_t uid) = 0; virtual void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0; enum { enum { CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, GET_PACKAGES_FOR_UID_TRANSACTION = CHECK_PERMISSION_TRANSACTION + 1 }; }; }; }; Loading
libs/binder/IPermissionController.cpp +34 −1 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,25 @@ public: if (reply.readExceptionCode() != 0) return 0; if (reply.readExceptionCode() != 0) return 0; return reply.readInt32() != 0; return reply.readInt32() != 0; } } virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages) { Parcel data, reply; data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor()); data.writeInt32(uid); remote()->transact(GET_PACKAGES_FOR_UID_TRANSACTION, data, &reply); // fail on exception if (reply.readExceptionCode() != 0) { return; } const int32_t size = reply.readInt32(); if (size <= 0) { return; } for (int i = 0; i < size; i++) { packages.push(reply.readString16()); } } }; }; IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController"); IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController"); Loading @@ -57,7 +76,6 @@ IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController status_t BnPermissionController::onTransact( status_t BnPermissionController::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { { //printf("PermissionController received: "); data.print(); switch(code) { switch(code) { case CHECK_PERMISSION_TRANSACTION: { case CHECK_PERMISSION_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); CHECK_INTERFACE(IPermissionController, data, reply); Loading @@ -69,6 +87,21 @@ status_t BnPermissionController::onTransact( reply->writeInt32(res ? 1 : 0); reply->writeInt32(res ? 1 : 0); return NO_ERROR; return NO_ERROR; } break; } break; case GET_PACKAGES_FOR_UID_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); int32_t uid = data.readInt32(); Vector<String16> packages; getPackagesForUid(uid, packages); reply->writeNoException(); size_t size = packages.size(); reply->writeInt32(size); for (size_t i = 0; i < size; i++) { reply->writeString16(packages[i]); } return NO_ERROR; } break; default: default: return BBinder::onTransact(code, data, reply, flags); return BBinder::onTransact(code, data, reply, flags); } } Loading