Add APermissionManager_checkPermission to libandroid

And allow IActivityManager#checkPermission to be used by native code.

bug: 172283477
bug: 159172726
Change-Id: I582fb918ac3ddc2289ef0040a4391db407673692
diff --git a/native/android/Android.bp b/native/android/Android.bp
index 02e1ebe..7793d6c 100644
--- a/native/android/Android.bp
+++ b/native/android/Android.bp
@@ -46,6 +46,7 @@
         "native_window_jni.cpp",
         "net.c",
         "obb.cpp",
+        "permission_manager.cpp",
         "sensor.cpp",
         "sharedmem.cpp",
         "storage_manager.cpp",
diff --git a/native/android/TEST_MAPPING b/native/android/TEST_MAPPING
new file mode 100644
index 0000000..6a5d2c0
--- /dev/null
+++ b/native/android/TEST_MAPPING
@@ -0,0 +1,17 @@
+{
+  "presubmit": [
+    {
+       "name": "CtsPermissionManagerNativeTestCases",
+       "file_patterns": ["permission_manager.cpp"]
+    },
+    {
+       "name": "CtsPermissionTestCases",
+       "options": [
+           {
+              "include-filter": "android.permission.cts.PermissionManagerNativeJniTest"
+           }
+       ],
+       "file_patterns": ["permission_manager.cpp"]
+    }
+  ]
+}
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index 0414930..3027eac 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -176,6 +176,7 @@
     AObbInfo_getPackageName;
     AObbInfo_getVersion;
     AObbScanner_getObbInfo;
+    APermissionManager_checkPermission; # introduced=31
     ASensorEventQueue_disableSensor;
     ASensorEventQueue_enableSensor;
     ASensorEventQueue_getEvents;
diff --git a/native/android/permission_manager.cpp b/native/android/permission_manager.cpp
new file mode 100644
index 0000000..166e00e
--- /dev/null
+++ b/native/android/permission_manager.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <android/permission_manager.h>
+#include <binder/ActivityManager.h>
+
+namespace android {
+namespace permissionmananger {
+
+// Global instance of ActivityManager, service is obtained only on first use.
+static ActivityManager gAm;
+
+} // permissionmanager
+} // android
+
+using namespace android;
+using namespace permissionmananger;
+
+int32_t APermissionManager_checkPermission(const char* permission,
+                                           pid_t pid,
+                                           uid_t uid,
+                                           int32_t* outResult) {
+    status_t result = gAm.checkPermission(String16(permission), pid, uid, outResult);
+    if (result == DEAD_OBJECT) {
+        return PERMISSION_MANAGER_STATUS_SERVICE_UNAVAILABLE;
+    } else if (result != NO_ERROR) {
+        return PERMISSION_MANAGER_STATUS_ERROR_UNKNOWN;
+    }
+    return PERMISSION_MANAGER_STATUS_OK;
+}