transcoding: use NDK methods for permission and binder
- Change permission checks to use NDK
- Replace MediaProvider uid check with permission check of
MANAGE_EXTERNAL_STORAGE (which is replacing the deprecated
WRITE_MEDIA_STORAGE).
- Use ABinderProcess_* for thread pool.
bug: 159172726
bug: 171393067
test: MediaTranscodingService unit tests; dumpsys to check if
MediaProvider can still regiserClient successfully.
Change-Id: I4fed7bb23a2d68c92e5cd1aecd5a6ef340dc2b61
diff --git a/services/mediatranscoding/Android.bp b/services/mediatranscoding/Android.bp
index 2dbcf5a..3d6821b 100644
--- a/services/mediatranscoding/Android.bp
+++ b/services/mediatranscoding/Android.bp
@@ -8,8 +8,8 @@
],
shared_libs: [
+ "libandroid",
"libbase",
- "libbinder",
"libbinder_ndk",
"libcutils",
"liblog",
@@ -40,8 +40,7 @@
shared_libs: [
"libbase",
- // TODO(hkuang): Use libbinder_ndk
- "libbinder",
+ "libbinder_ndk",
"libutils",
"liblog",
"libbase",
diff --git a/services/mediatranscoding/MediaTranscodingService.cpp b/services/mediatranscoding/MediaTranscodingService.cpp
index 56f327e..64def5e 100644
--- a/services/mediatranscoding/MediaTranscodingService.cpp
+++ b/services/mediatranscoding/MediaTranscodingService.cpp
@@ -20,7 +20,7 @@
#include <android/binder_manager.h>
#include <android/binder_process.h>
-#include <binder/IServiceManager.h>
+#include <android/permission_manager.h>
#include <cutils/properties.h>
#include <media/TranscoderWrapper.h>
#include <media/TranscodingClientManager.h>
@@ -60,8 +60,12 @@
binder_status_t MediaTranscodingService::dump(int fd, const char** /*args*/, uint32_t /*numArgs*/) {
String8 result;
- // TODO(b/161549994): Remove libbinder dependencies for mainline.
- if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
+ uid_t callingUid = AIBinder_getCallingUid();
+ pid_t callingPid = AIBinder_getCallingPid();
+ int32_t permissionResult;
+ if (APermissionManager_checkPermission("android.permission.DUMP", callingPid, callingUid,
+ &permissionResult) != PERMISSION_MANAGER_STATUS_OK ||
+ permissionResult != PERMISSION_MANAGER_PERMISSION_GRANTED) {
result.format(
"Permission Denial: "
"can't dump MediaTranscodingService from pid=%d, uid=%d\n",
diff --git a/services/mediatranscoding/main_mediatranscodingservice.cpp b/services/mediatranscoding/main_mediatranscodingservice.cpp
index 7d862e6..14c568e 100644
--- a/services/mediatranscoding/main_mediatranscodingservice.cpp
+++ b/services/mediatranscoding/main_mediatranscodingservice.cpp
@@ -15,8 +15,7 @@
*/
#include <android-base/logging.h>
-#include <binder/IPCThreadState.h>
-#include <binder/ProcessState.h>
+#include <android/binder_process.h>
#include "MediaTranscodingService.h"
@@ -25,12 +24,9 @@
int main(int argc __unused, char** argv) {
LOG(INFO) << "media transcoding service starting";
- // TODO(hkuang): Start the service with libbinder_ndk.
strcpy(argv[0], "media.transcoding");
- sp<ProcessState> proc(ProcessState::self());
- sp<IServiceManager> sm = defaultServiceManager();
android::MediaTranscodingService::instantiate();
- ProcessState::self()->startThreadPool();
- IPCThreadState::self()->joinThreadPool();
+ ABinderProcess_startThreadPool();
+ ABinderProcess_joinThreadPool();
}