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 import android.content.pm.IPackageChangeObserver;
21 
22 /**
23  * Parallel implementation of certain {@link PackageManager} APIs that need to
24  * be exposed to native code.
25  * <p>These APIs are a parallel definition to the APIs in PackageManager, so,
26  * they can technically diverge. However, it's good practice to keep these
27  * APIs in sync with each other.
28  * <p>Because these APIs are exposed to native code, it's possible they will
29  * be exposed to privileged components [such as UID 0]. Care should be taken
30  * to avoid exposing potential security holes for methods where permission
31  * checks are bypassed based upon UID alone.
32  *
33  * @hide
34  */
35 interface IPackageManagerNative {
36     /**
37      * Returns a set of names for the given UIDs.
38      * IMPORTANT: Unlike the Java version of this API, unknown UIDs are
39      * not represented by 'null's. Instead, they are represented by empty
40      * strings.
41      */
getNamesForUids(in int[] uids)42     @utf8InCpp String[] getNamesForUids(in int[] uids);
43 
44     /**
45      * Returns the name of the installer (a package) which installed the named
46      * package. Preloaded packages return the string "preload". Sideloaded packages
47      * return an empty string. Unknown or unknowable are returned as empty strings.
48      */
49 
getInstallerForPackage(in String packageName)50     @utf8InCpp String getInstallerForPackage(in String packageName);
51 
52     /**
53      * Returns the version code of the named package.
54      * Unknown or unknowable versions are returned as 0.
55      */
56 
getVersionCodeForPackage(in String packageName)57     long getVersionCodeForPackage(in String packageName);
58 
59     /**
60      * Return if each app, identified by its package name allows its audio to be recorded.
61      * Unknown packages are mapped to false.
62      */
isAudioPlaybackCaptureAllowed(in @tf8InCpp String[] packageNames)63     boolean[] isAudioPlaybackCaptureAllowed(in @utf8InCpp String[] packageNames);
64 
65     /*  ApplicationInfo.isSystemApp() == true */
66     const int LOCATION_SYSTEM = 0x1;
67     /*  ApplicationInfo.isVendor() == true */
68     const int LOCATION_VENDOR = 0x2;
69     /*  ApplicationInfo.isProduct() == true */
70     const int LOCATION_PRODUCT = 0x4;
71 
72     /**
73      * Returns a set of bitflags about package location.
74      * LOCATION_SYSTEM: getApplicationInfo(packageName).isSystemApp()
75      * LOCATION_VENDOR: getApplicationInfo(packageName).isVendor()
76      * LOCATION_PRODUCT: getApplicationInfo(packageName).isProduct()
77      */
getLocationFlags(in @tf8InCpp String packageName)78     int getLocationFlags(in @utf8InCpp String packageName);
79 
80     /**
81      * Returns the target SDK version for the given package.
82      * Unknown packages will cause the call to fail. The caller must check the
83      * returned Status before using the result of this function.
84      */
getTargetSdkVersionForPackage(in String packageName)85     int getTargetSdkVersionForPackage(in String packageName);
86 
87     /**
88      * Returns the name of module metadata package, or empty string if device doesn't have such
89      * package.
90      */
getModuleMetadataPackageName()91     @utf8InCpp String getModuleMetadataPackageName();
92 
93     /* Returns the names of all packages. */
getAllPackages()94     @utf8InCpp String[] getAllPackages();
95 
96     /** Register an extra package change observer to receive the multi-cast. */
registerPackageChangeObserver(in IPackageChangeObserver observer)97     void registerPackageChangeObserver(in IPackageChangeObserver observer);
98 
99     /**
100      * Unregister an existing package change observer.
101      * This does nothing if this observer was not already registered.
102      */
unregisterPackageChangeObserver(in IPackageChangeObserver observer)103     void unregisterPackageChangeObserver(in IPackageChangeObserver observer);
104 }
105