|  | /* | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * Structures and functions related to permission checks in native code. | 
|  | * | 
|  | * @addtogroup Permission | 
|  | * @{ | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * @file permission_manager.h | 
|  | */ | 
|  |  | 
|  | #ifndef ANDROID_PERMISSION_MANAGER_H | 
|  | #define ANDROID_PERMISSION_MANAGER_H | 
|  |  | 
|  | #include <sys/cdefs.h> | 
|  | #include <sys/types.h> | 
|  |  | 
|  | __BEGIN_DECLS | 
|  |  | 
|  | /** | 
|  | * Permission check results. | 
|  | * | 
|  | * Introduced in API 31. | 
|  | */ | 
|  | enum { | 
|  | /** | 
|  | * This is returned by APermissionManager_checkPermission() | 
|  | * if the permission has been granted to the given package. | 
|  | */ | 
|  | PERMISSION_MANAGER_PERMISSION_GRANTED = 0, | 
|  | /** | 
|  | * This is returned by APermissionManager_checkPermission() | 
|  | * if the permission has not been granted to the given package. | 
|  | */ | 
|  | PERMISSION_MANAGER_PERMISSION_DENIED = -1, | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * Permission check return status values. | 
|  | * | 
|  | * Introduced in API 31. | 
|  | */ | 
|  | enum { | 
|  | /** | 
|  | * This is returned if the permission check completed without errors. | 
|  | * The output result is valid and contains one of {::PERMISSION_MANAGER_PERMISSION_GRANTED, | 
|  | * ::PERMISSION_MANAGER_PERMISSION_DENIED}. | 
|  | */ | 
|  | PERMISSION_MANAGER_STATUS_OK = 0, | 
|  | /** | 
|  | * This is returned if the permission check encountered an unspecified error. | 
|  | * The output result is unmodified. | 
|  | */ | 
|  | PERMISSION_MANAGER_STATUS_ERROR_UNKNOWN = -1, | 
|  | /** | 
|  | * This is returned if the permission check failed because the service is | 
|  | * unavailable. The output result is unmodified. | 
|  | */ | 
|  | PERMISSION_MANAGER_STATUS_SERVICE_UNAVAILABLE = -2, | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * Checks whether the package with the given pid/uid has been granted a permission. | 
|  | * | 
|  | * Note that the Java API of Context#checkPermission() is usually faster due to caching, | 
|  | * thus is preferred over this API wherever possible. | 
|  | * | 
|  | * @param permission the permission to be checked. | 
|  | * @param pid the process id of the package to be checked. | 
|  | * @param uid the uid of the package to be checked. | 
|  | * @param outResult output of the permission check result. | 
|  | * | 
|  | * @return error codes if any error happened during the check. | 
|  | */ | 
|  | int32_t APermissionManager_checkPermission(const char* permission, | 
|  | pid_t pid, | 
|  | uid_t uid, | 
|  | int32_t* outResult) __INTRODUCED_IN(31); | 
|  |  | 
|  | __END_DECLS | 
|  |  | 
|  | #endif  // ANDROID_PERMISSION_MANAGER_H | 
|  |  | 
|  | /** @} */ |