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