1 /* 2 ** 3 ** Copyright 2017, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 package android.content.pm; 19 20 /** 21 * Parallel implementation of certain {@link PackageManager} APIs that need to 22 * be exposed to native code. 23 * <p>These APIs are a parallel definition to the APIs in PackageManager, so, 24 * they can technically diverge. However, it's good practice to keep these 25 * APIs in sync with each other. 26 * <p>Because these APIs are exposed to native code, it's possible they will 27 * be exposed to privileged components [such as UID 0]. Care should be taken 28 * to avoid exposing potential security holes for methods where permission 29 * checks are bypassed based upon UID alone. 30 * 31 * @hide 32 */ 33 interface IPackageManagerNative { 34 /** 35 * Returns a set of names for the given UIDs. 36 * IMPORTANT: Unlike the Java version of this API, unknown UIDs are 37 * not represented by 'null's. Instead, they are represented by empty 38 * strings. 39 */ getNamesForUids(in int[] uids)40 @utf8InCpp String[] getNamesForUids(in int[] uids); 41 42 /** 43 * Returns the name of the installer (a package) which installed the named 44 * package. Preloaded packages return the string "preload". Sideloaded packages 45 * return an empty string. Unknown or unknowable are returned as empty strings. 46 */ 47 getInstallerForPackage(in String packageName)48 @utf8InCpp String getInstallerForPackage(in String packageName); 49 50 /** 51 * Returns the version code of the named package. 52 * Unknown or unknowable versions are returned as 0. 53 */ 54 getVersionCodeForPackage(in String packageName)55 long getVersionCodeForPackage(in String packageName); 56 57 /** 58 * Return if each app, identified by its package name allows its audio to be recorded. 59 * Unknown packages are mapped to false. 60 */ isAudioPlaybackCaptureAllowed(in @tf8InCpp String[] packageNames)61 boolean[] isAudioPlaybackCaptureAllowed(in @utf8InCpp String[] packageNames); 62 63 /* ApplicationInfo.isSystemApp() == true */ 64 const int LOCATION_SYSTEM = 0x1; 65 /* ApplicationInfo.isVendor() == true */ 66 const int LOCATION_VENDOR = 0x2; 67 /* ApplicationInfo.isProduct() == true */ 68 const int LOCATION_PRODUCT = 0x4; 69 70 /** 71 * Returns a set of bitflags about package location. 72 * LOCATION_SYSTEM: getApplicationInfo(packageName).isSystemApp() 73 * LOCATION_VENDOR: getApplicationInfo(packageName).isVendor() 74 * LOCATION_PRODUCT: getApplicationInfo(packageName).isProduct() 75 */ getLocationFlags(in @tf8InCpp String packageName)76 int getLocationFlags(in @utf8InCpp String packageName); 77 78 /** 79 * Returns the target SDK version for the given package. 80 * Unknown packages will cause the call to fail. The caller must check the 81 * returned Status before using the result of this function. 82 */ getTargetSdkVersionForPackage(in String packageName)83 int getTargetSdkVersionForPackage(in String packageName); 84 85 /** 86 * Returns the name of module metadata package, or empty string if device doesn't have such 87 * package. 88 */ getModuleMetadataPackageName()89 @utf8InCpp String getModuleMetadataPackageName(); 90 } 91