ApplicationPackageManager.java revision 98edc951712823dbf5db2b7e9c203a0e98fc616b
1390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*
2390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Copyright (C) 2010 The Android Open Source Project
3390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick *
4390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Licensed under the Apache License, Version 2.0 (the "License");
5390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * you may not use this file except in compliance with the License.
6390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * You may obtain a copy of the License at
7390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick *
8390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick *      http://www.apache.org/licenses/LICENSE-2.0
9390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick *
10390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Unless required by applicable law or agreed to in writing, software
11390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * distributed under the License is distributed on an "AS IS" BASIS,
12390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * See the License for the specific language governing permissions and
14390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * limitations under the License.
15390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick */
16390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
17390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickpackage android.app;
18390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
19390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ComponentName;
20390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ContentResolver;
21390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.Intent;
22390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentFilter;
23390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentSender;
24390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ActivityInfo;
25390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ApplicationInfo;
26390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ComponentInfo;
27ceb1b0bfaea56251796b08c07b963de7403d84ebAnonymous Cowardimport android.content.pm.ContainerEncryptionParams;
28390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.FeatureInfo;
29390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDataObserver;
30390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDeleteObserver;
31390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageInstallObserver;
32390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageManager;
33390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageMoveObserver;
34390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageStatsObserver;
35390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.InstrumentationInfo;
36390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageInfo;
37390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageManager;
38e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Rootimport android.content.pm.ParceledListSlice;
39390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionGroupInfo;
40390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionInfo;
41390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ProviderInfo;
42390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ResolveInfo;
43390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ServiceInfo;
445ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Rootimport android.content.pm.ManifestDigest;
45706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningsimport android.content.pm.VerificationParams;
460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport android.content.pm.VerifierDeviceIdentity;
47390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.Resources;
48390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.XmlResourceParser;
49390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.graphics.drawable.Drawable;
50390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.net.Uri;
51390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.Process;
52390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.RemoteException;
53f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle;
54390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log;
55a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display;
56390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference;
58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList;
59390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.HashMap;
60390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.Iterator;
61390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List;
62390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
63390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*package*/
64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickfinal class ApplicationPackageManager extends PackageManager {
65390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final String TAG = "ApplicationPackageManager";
66390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG = false;
67390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG_ICONS = false;
68390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
69390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
70390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PackageInfo getPackageInfo(String packageName, int flags)
71390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
72390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
73f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            PackageInfo pi = mPM.getPackageInfo(packageName, flags, UserHandle.myUserId());
74390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
75390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
76390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
77390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
79390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
80390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
81390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
82390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
83390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
84390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
85390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] currentToCanonicalPackageNames(String[] names) {
86390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
87390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.currentToCanonicalPackageNames(names);
88390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
89390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
90390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
91390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
92390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
93390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
94390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] canonicalToCurrentPackageNames(String[] names) {
95390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
96390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.canonicalToCurrentPackageNames(names);
97390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
98390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
99390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Intent getLaunchIntentForPackage(String packageName) {
104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // First see if the package has an INFO activity; the existence of
105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // such an activity is implied to be the desired front-door for the
106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // overall package (such as if it has multiple launcher entries).
107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.addCategory(Intent.CATEGORY_INFO);
109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.setPackage(packageName);
110194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0);
111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // Otherwise, try to find a main launcher activity.
113194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // reuse the intent instance
115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.removeCategory(Intent.CATEGORY_INFO);
116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER);
117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.setPackage(packageName);
118194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn            ris = queryIntentActivities(intentToResolve, 0);
119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
120194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return null;
122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intent = new Intent(intentToResolve);
124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
125194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        intent.setClassName(ris.get(0).activityInfo.packageName,
126194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn                ris.get(0).activityInfo.name);
127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return intent;
128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int[] getPackageGids(String packageName)
132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int[] gids = mPM.getPackageGids(packageName);
135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (gids == null || gids.length > 0) {
136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return gids;
137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionInfo getPermissionInfo(String name, int flags)
147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionInfo pi = mPM.getPermissionInfo(name, flags);
150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionInfo> queryPermissionsByGroup(String group, int flags)
162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags);
165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(group);
173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionGroupInfo getPermissionGroupInfo(String name,
177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                      int flags) throws NameNotFoundException {
178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags);
180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pgi != null) {
181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pgi;
182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getAllPermissionGroups(flags);
194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
200390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ApplicationInfo getApplicationInfo(String packageName, int flags)
201390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
202390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
203f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, UserHandle.myUserId());
204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getActivityInfo(ComponentName className, int flags)
216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
218f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ActivityInfo ai = mPM.getActivityInfo(className, flags, UserHandle.myUserId());
219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getReceiverInfo(ComponentName className, int flags)
231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
233f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ActivityInfo ai = mPM.getReceiverInfo(className, flags, UserHandle.myUserId());
234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ServiceInfo getServiceInfo(ComponentName className, int flags)
246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
248f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ServiceInfo si = mPM.getServiceInfo(className, flags, UserHandle.myUserId());
249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (si != null) {
250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return si;
251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo getProviderInfo(ComponentName className, int flags)
261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
263f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ProviderInfo pi = mPM.getProviderInfo(className, flags, UserHandle.myUserId());
264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getSystemSharedLibraryNames() {
276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemSharedLibraryNames();
278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
279390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public FeatureInfo[] getSystemAvailableFeatures() {
285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemAvailableFeatures();
287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
288390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
292390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean hasSystemFeature(String name) {
294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.hasSystemFeature(name);
296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
297390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
298390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkPermission(String permName, String pkgName) {
303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkPermission(permName, pkgName);
305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermission(PermissionInfo info) {
312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermission(info);
314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermissionAsync(PermissionInfo info) {
321390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermissionAsync(info);
323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePermission(String name) {
330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePermission(name);
332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
335390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
336390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
337390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
338e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void grantPermission(String packageName, String permissionName) {
339e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
340e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.grantPermission(packageName, permissionName);
341e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
342e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
343e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
344e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
345e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
346e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
347e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void revokePermission(String packageName, String permissionName) {
348e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
349e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.revokePermission(packageName, permissionName);
350e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
351e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
352e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
353e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
354e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
355e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(String pkg1, String pkg2) {
357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkSignatures(pkg1, pkg2);
359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
361390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
362390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
364390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
365390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(int uid1, int uid2) {
366390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
367390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkUidSignatures(uid1, uid2);
368390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
369390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
370390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
371390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getPackagesForUid(int uid) {
375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPackagesForUid(uid);
377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getNameForUid(int uid) {
384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getNameForUid(uid);
386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
388390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getUidForSharedUser(String sharedUserName)
393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int uid = mPM.getUidForSharedUser(sharedUserName);
396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if(uid != -1) {
397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return uid;
398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("No shared userid for user:"+sharedUserName);
403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
405e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getInstalledPackages(int flags) {
408151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani        return getInstalledPackages(flags, UserHandle.myUserId());
409151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    }
410151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani
411151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    /** @hide */
412151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    @Override
413151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    public List<PackageInfo> getInstalledPackages(int flags, int userId) {
414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
415e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            final List<PackageInfo> packageInfos = new ArrayList<PackageInfo>();
416e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            PackageInfo lastItem = null;
417e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ParceledListSlice<PackageInfo> slice;
418e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
419e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            do {
420e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                final String lastKey = lastItem != null ? lastItem.packageName : null;
421151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                slice = mPM.getInstalledPackages(flags, lastKey, userId);
422e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                lastItem = slice.populateList(packageInfos, PackageInfo.CREATOR);
423e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            } while (!slice.isLastSlice());
424e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
425e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            return packageInfos;
426390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
427390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
428390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
429390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
430390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
431e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
432390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
433390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ApplicationInfo> getInstalledApplications(int flags) {
434f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn        int userId = UserHandle.getUserId(Process.myUid());
435390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
436e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            final List<ApplicationInfo> applicationInfos = new ArrayList<ApplicationInfo>();
437e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ApplicationInfo lastItem = null;
438e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ParceledListSlice<ApplicationInfo> slice;
439e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
440e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            do {
441e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                final String lastKey = lastItem != null ? lastItem.packageName : null;
442483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                slice = mPM.getInstalledApplications(flags, lastKey, userId);
443e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                lastItem = slice.populateList(applicationInfos, ApplicationInfo.CREATOR);
444e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            } while (!slice.isLastSlice());
445e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
446e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            return applicationInfos;
447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
448390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
449390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
451390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
453390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveActivity(Intent intent, int flags) {
45458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov        return resolveActivityAsUser(intent, flags, UserHandle.myUserId());
45558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    }
45658d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov
45758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    @Override
45858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId) {
459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveIntent(
461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
46358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                flags,
46458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                userId);
465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivities(Intent intent,
472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                   int flags) {
47358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov        return queryIntentActivitiesAsUser(intent, flags, UserHandle.myUserId());
474151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    }
475151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani
476151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    /** @hide Same as above but for a specific user */
477151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    @Override
47858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
479151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                                                   int flags, int userId) {
480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivities(
482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
483390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
484483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
485151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                userId);
486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivityOptions(
493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName caller, Intent[] specifics, Intent intent,
494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        int flags) {
495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final ContentResolver resolver = mContext.getContentResolver();
496390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
497390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String[] specificTypes = null;
498390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (specifics != null) {
499390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            final int N = specifics.length;
500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (int i=0; i<N; i++) {
501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Intent sp = specifics[i];
502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (sp != null) {
503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    String t = sp.resolveTypeIfNeeded(resolver);
504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (t != null) {
505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        if (specificTypes == null) {
506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            specificTypes = new String[N];
507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        specificTypes[i] = t;
509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
510390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivityOptions(caller, specifics,
516390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                  specificTypes, intent, intent.resolveTypeIfNeeded(resolver),
517f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                                                  flags, UserHandle.myUserId());
518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
519390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
522390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
523f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    /**
524f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani     * @hide
525f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani     */
526390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
527f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags, int userId) {
528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
529390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentReceivers(
530390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
531390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
532483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
533f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani                userId);
534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
535390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
536390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
537390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
538390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
539390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
540f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) {
541f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani        return queryBroadcastReceivers(intent, flags, UserHandle.myUserId());
542f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    }
543f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani
544f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    @Override
545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveService(Intent intent, int flags) {
546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveService(
548390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
550483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
551f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                UserHandle.myUserId());
552390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
557390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
55858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId) {
559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentServices(
561390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
562390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
563483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
56458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                userId);
565390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
566390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
567390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
568390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
569390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
570390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
57158d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentServices(Intent intent, int flags) {
57258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov        return queryIntentServicesAsUser(intent, flags, UserHandle.myUserId());
57358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    }
57458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov
57558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    @Override
576390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo resolveContentProvider(String name,
577390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                               int flags) {
578390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
579f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            return mPM.resolveContentProvider(name, flags, UserHandle.myUserId());
580390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
581390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
582390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
583390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
584390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
585390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
586390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ProviderInfo> queryContentProviders(String processName,
587390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                    int uid, int flags) {
588390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
589390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryContentProviders(processName, uid, flags);
590390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
591390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
592390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
593390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
594390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
595390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
596390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public InstrumentationInfo getInstrumentationInfo(
597390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName className, int flags)
598390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
599390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
600390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            InstrumentationInfo ii = mPM.getInstrumentationInfo(
601390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                className, flags);
602390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ii != null) {
603390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ii;
604390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
605390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
606390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
607390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
608390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
609390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
610390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
611390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
612390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
613390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<InstrumentationInfo> queryInstrumentation(
614390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String targetPackage, int flags) {
615390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
616390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryInstrumentation(targetPackage, flags);
617390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
620390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDrawable(String packageName, int resid,
623390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                          ApplicationInfo appInfo) {
624390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
625390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Drawable dr = getCachedIcon(name);
626390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (dr != null) {
627390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
628390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
629390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
634390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
635390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
638390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            dr = r.getDrawable(resid);
639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (false) {
640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                RuntimeException e = new RuntimeException("here");
641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                e.fillInStackTrace();
642390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resid)
643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + " from package " + packageName
644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ": app scale=" + r.getCompatibilityInfo().applicationScale
645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ", caller scale=" + mContext.getResources().getCompatibilityInfo().applicationScale,
646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      e);
647390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
648390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Getting drawable 0x"
649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + Integer.toHexString(resid) + " from " + r
650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + ": " + dr);
651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedIcon(name, dr);
652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
653390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
655390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
65608f16544176a04a958d403409f98cd0502bb8da3Joe Onorato        } catch (Resources.NotFoundException e) {
65708f16544176a04a958d403409f98cd0502bb8da3Joe Onorato            Log.w("PackageManager", "Failure retrieving resources for"
65808f16544176a04a958d403409f98cd0502bb8da3Joe Onorato                  + appInfo.packageName + ": " + e.getMessage());
659390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
660390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
661390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
662390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving icon 0x"
663390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
664390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
665390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
666390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
667390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
668390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
669390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(ComponentName activityName)
670390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
671390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadIcon(this);
672390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
673390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
674390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(Intent intent)
675390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
676390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
677390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityIcon(intent.getComponent());
678390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
679390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
680390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
681390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
682390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
683390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadIcon(this);
684390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
685390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
68639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy        throw new NameNotFoundException(intent.toUri(0));
687390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
689390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDefaultActivityIcon() {
690390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return Resources.getSystem().getDrawable(
691390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            com.android.internal.R.drawable.sym_def_app_icon);
692390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
693390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
694390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(ApplicationInfo info) {
695390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadIcon(this);
696390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
697390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
698390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(String packageName)
699390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
700390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationIcon(getApplicationInfo(packageName, 0));
701390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
702390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
703390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
704390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(ComponentName activityName)
705390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadLogo(this);
707390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
709390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
710390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(Intent intent)
711390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
712390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
713390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityLogo(intent.getComponent());
714390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
716390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadLogo(this);
720390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
721390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(intent.toUri(0));
723390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
725390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
726390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(ApplicationInfo info) {
727390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLogo(this);
728390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
729390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
730390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
731390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(String packageName)
732390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
733390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationLogo(getApplicationInfo(packageName, 0));
734390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
735390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
736390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForActivity(
737390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName activityName) throws NameNotFoundException {
738390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
739390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getActivityInfo(activityName, 0).applicationInfo);
740390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
741390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
742390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
743390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ApplicationInfo app) throws NameNotFoundException {
744390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (app.packageName.equals("system")) {
745390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mContext.mMainThread.getSystemContext().getResources();
746390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
747390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Resources r = mContext.mMainThread.getTopLevelResources(
748a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown                app.uid == Process.myUid() ? app.sourceDir : app.publicSourceDir,
749a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown                        Display.DEFAULT_DISPLAY, null, mContext.mPackageInfo);
750390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (r != null) {
751390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r;
752390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
753390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("Unable to open " + app.publicSourceDir);
754390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
755390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
756390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String appPackageName) throws NameNotFoundException {
758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
759390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getApplicationInfo(appPackageName, 0));
760390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
761390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
76298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    /** @hide */
76398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    @Override
76498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    public Resources getResourcesForApplicationAsUser(String appPackageName, int userId)
76598edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            throws NameNotFoundException {
76698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        try {
76798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, 0, userId);
76898edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            if (ai != null) {
76998edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani                return getResourcesForApplication(ai);
77098edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            }
77198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        } catch (RemoteException e) {
77298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            throw new RuntimeException("Package manager has died", e);
77398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        }
77498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        throw new NameNotFoundException("Package " + appPackageName + " doesn't exist");
77598edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    }
77698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani
777390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    int mCachedSafeMode = -1;
778390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public boolean isSafeMode() {
779390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
780390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (mCachedSafeMode < 0) {
781390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                mCachedSafeMode = mPM.isSafeMode() ? 1 : 0;
782390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
783390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mCachedSafeMode != 0;
784390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
785390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
786390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
787390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
788390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
789390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    static void configurationChanged() {
790390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
791390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sIconCache.clear();
792390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.clear();
793390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
794390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
795390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
796390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    ApplicationPackageManager(ContextImpl context,
797390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                              IPackageManager pm) {
798390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mContext = context;
799390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mPM = pm;
800390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
801390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
802390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private Drawable getCachedIcon(ResourceName name) {
803390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
80439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            WeakReference<Drawable.ConstantState> wr = sIconCache.get(name);
805390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for "
806390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + name + ": " + wr);
807390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
80839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                Drawable.ConstantState state = wr.get();
80939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                if (state != null) {
81039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    if (DEBUG_ICONS) {
81139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                        Log.v(TAG, "Get cached drawable state for " + name + ": " + state);
81239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    }
81339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    // Note: It's okay here to not use the newDrawable(Resources) variant
81439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       of the API. The ConstantState comes from a drawable that was
81539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       originally created by passing the proper app Resources instance
81639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       which means the state should already contain the proper
81739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       resources specific information (like density.) See
81839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       BitmapDrawable.BitmapState for instance.
81939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    return state.newDrawable();
820390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
821390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
822390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sIconCache.remove(name);
823390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
824390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
825390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
826390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
827390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
828390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedIcon(ResourceName name, Drawable dr) {
829390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
83039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            sIconCache.put(name, new WeakReference<Drawable.ConstantState>(dr.getConstantState()));
83139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable state for " + name + ": " + dr);
832390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
833390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
834390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
83539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    static void handlePackageBroadcast(int cmd, String[] pkgList, boolean hasPkgInfo) {
836390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        boolean immediateGc = false;
837390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) {
838390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            immediateGc = true;
839390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
840390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (pkgList != null && (pkgList.length > 0)) {
841390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            boolean needCleanup = false;
842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (String ssp : pkgList) {
843390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                synchronized (sSync) {
844390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (sIconCache.size() > 0) {
845390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        Iterator<ResourceName> it = sIconCache.keySet().iterator();
846390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        while (it.hasNext()) {
847390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            ResourceName nm = it.next();
848390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            if (nm.packageName.equals(ssp)) {
849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                //Log.i(TAG, "Removing cached drawable for " + nm);
850390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                it.remove();
851390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                needCleanup = true;
852390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            }
853390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
854390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (sStringCache.size() > 0) {
856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        Iterator<ResourceName> it = sStringCache.keySet().iterator();
857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        while (it.hasNext()) {
858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            ResourceName nm = it.next();
859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            if (nm.packageName.equals(ssp)) {
860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                //Log.i(TAG, "Removing cached string for " + nm);
861390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                it.remove();
862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                needCleanup = true;
863390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            }
864390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
865390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
866390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
867390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (needCleanup || hasPkgInfo) {
869390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (immediateGc) {
870390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    // Schedule an immediate gc.
871390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    Runtime.getRuntime().gc();
872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                } else {
873390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    ActivityThread.currentActivityThread().scheduleGcIdler();
874390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
875390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
876390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
877390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
878390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
879390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final class ResourceName {
880390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final String packageName;
881390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final int iconId;
882390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
883390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(String _packageName, int _iconId) {
884390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            packageName = _packageName;
885390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            iconId = _iconId;
886390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
887390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
888390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ApplicationInfo aInfo, int _iconId) {
889390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(aInfo.packageName, _iconId);
890390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
891390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
892390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ComponentInfo cInfo, int _iconId) {
893390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(cInfo.applicationInfo.packageName, _iconId);
894390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
895390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
896390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ResolveInfo rInfo, int _iconId) {
897390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(rInfo.activityInfo.applicationInfo.packageName, _iconId);
898390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
899390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
900390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
901390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public boolean equals(Object o) {
902390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (this == o) return true;
903390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (o == null || getClass() != o.getClass()) return false;
904390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
905390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            ResourceName that = (ResourceName) o;
906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
907390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (iconId != that.iconId) return false;
908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return !(packageName != null ?
909390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                     !packageName.equals(that.packageName) : that.packageName != null);
910390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
911390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
912390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
913390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
914390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public int hashCode() {
915390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int result;
916390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = packageName.hashCode();
917390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = 31 * result + iconId;
918390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return result;
919390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
920390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
921390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
922390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public String toString() {
923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return "{ResourceName " + packageName + " / " + iconId + "}";
924390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
926390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private CharSequence getCachedString(ResourceName name) {
928390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            WeakReference<CharSequence> wr = sStringCache.get(name);
930390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
931390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                CharSequence cs = wr.get();
932390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (cs != null) {
933390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    return cs;
934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sStringCache.remove(name);
937390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
940390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
942390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedString(ResourceName name, CharSequence cs) {
943390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
944390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.put(name, new WeakReference<CharSequence>(cs));
945390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
946390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
947390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
948390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
949390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getText(String packageName, int resid,
950390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                ApplicationInfo appInfo) {
951390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
952390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        CharSequence text = getCachedString(name);
953390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (text != null) {
954390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
955390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
956390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
957390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
958390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
959390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
960390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
961390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
962390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
963390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
964390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
965390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            text = r.getText(resid);
966390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedString(name, text);
967390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
972390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
974390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving text 0x"
975390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
976390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
977390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
978390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
979390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
980390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
981390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
982390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public XmlResourceParser getXml(String packageName, int resid,
983390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                    ApplicationInfo appInfo) {
984390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
985390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
986390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
987390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
988390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
989390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
990390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
991390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
993390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r.getXml(resid);
994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
995390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving xml 0x"
998390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
999390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
1000390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
10013fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert            Log.w("PackageManager", "Failure retrieving resources for "
1002390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
1003390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1004390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1005390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1006390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1007390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1008390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getApplicationLabel(ApplicationInfo info) {
1009390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLabel(this);
1010390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1011390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,
1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                               String installerPackageName) {
1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.installPackage(packageURI, observer, flags, installerPackageName);
1017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1019390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1020390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1021390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1022390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
10235ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
10245ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            int flags, String installerPackageName, Uri verificationURI,
1025e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
10265ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
10275ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
1028e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings                    verificationURI, manifestDigest, encryptionParams);
10295ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
10305ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
10315ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
10325ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
10335ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
10345ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
1035706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings	  public void installPackageWithVerificationAndEncryption(Uri packageURI,
1036706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            IPackageInstallObserver observer, int flags, String installerPackageName,
1037706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
1038706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        try {
1039706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            mPM.installPackageWithVerificationAndEncryption(packageURI, observer, flags,
1040706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings                    installerPackageName, verificationParams, encryptionParams);
1041706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        } catch (RemoteException e) {
1042706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            // Should never happen!
1043706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        }
1044706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings    }
1045706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings
1046706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings    @Override
10477767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public int installExistingPackage(String packageName)
10487767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            throws NameNotFoundException {
10497767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        try {
10507767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            int res = mPM.installExistingPackage(packageName);
10517767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            if (res == INSTALL_FAILED_INVALID_URI) {
10527767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn                throw new NameNotFoundException("Package " + packageName + " doesn't exist");
10537767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            }
10547767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            return res;
10557767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        } catch (RemoteException e) {
10567767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            // Should never happen!
10577767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            throw new NameNotFoundException("Package " + packageName + " doesn't exist");
10587767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        }
10597767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    }
10607767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
10617767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    @Override
10623a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root    public void verifyPendingInstall(int id, int response) {
10635ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
10643a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root            mPM.verifyPendingInstall(id, response);
10655ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
10665ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
10675ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
10685ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
10695ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
10705ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
1071d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    public void extendVerificationTimeout(int id, int verificationCodeAtTimeout,
1072d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            long millisecondsToDelay) {
1073d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        try {
1074d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            mPM.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay);
1075d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        } catch (RemoteException e) {
1076d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            // Should never happen!
1077d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        }
1078d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    }
1079d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings
1080d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    @Override
1081880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    public void setInstallerPackageName(String targetPackage,
1082880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            String installerPackageName) {
1083880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        try {
1084880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            mPM.setInstallerPackageName(targetPackage, installerPackageName);
1085880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        } catch (RemoteException e) {
1086880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            // Should never happen!
1087880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        }
1088880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    }
1089880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn
1090880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    @Override
1091390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void movePackage(String packageName, IPackageMoveObserver observer, int flags) {
1092390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1093390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.movePackage(packageName, observer, flags);
1094390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1095390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1096390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1097390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1099390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getInstallerPackageName(String packageName) {
1101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getInstallerPackageName(packageName);
1103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
1111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deletePackage(packageName, observer, flags);
1113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearApplicationUserData(String packageName,
1119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         IPackageDataObserver observer) {
1120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1121f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            mPM.clearApplicationUserData(packageName, observer, UserHandle.myUserId());
1122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deleteApplicationCacheFiles(String packageName,
1128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                            IPackageDataObserver observer) {
1129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deleteApplicationCacheFiles(packageName, observer);
1131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorageAndNotify(long idealStorageSize, IPackageDataObserver observer) {
1137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorageAndNotify(idealStorageSize, observer);
1139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorage(long freeStorageSize, IntentSender pi) {
1146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorage(freeStorageSize, pi);
1148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
11540c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn    public void getPackageSizeInfo(String packageName, int userHandle,
11550c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            IPackageStatsObserver observer) {
1156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
11570c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            mPM.getPackageSizeInfo(packageName, userHandle, observer);
1158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPackageToPreferred(String packageName) {
1164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.addPackageToPreferred(packageName);
1166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePackageFromPreferred(String packageName) {
1173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePackageFromPreferred(packageName);
1175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getPreferredPackages(int flags) {
1182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredPackages(flags);
1184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return new ArrayList<PackageInfo>();
1188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPreferredActivity(IntentFilter filter,
1192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                     int match, ComponentName[] set, ComponentName activity) {
1193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1194a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            mPM.addPreferredActivity(filter, match, set, activity, UserHandle.myUserId());
1195a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        } catch (RemoteException e) {
1196a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            // Should never happen!
1197a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        }
1198a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    }
1199a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani
1200a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    @Override
1201a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    public void addPreferredActivity(IntentFilter filter, int match,
1202a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            ComponentName[] set, ComponentName activity, int userId) {
1203a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        try {
1204a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            mPM.addPreferredActivity(filter, match, set, activity, userId);
1205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void replacePreferredActivity(IntentFilter filter,
1212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         int match, ComponentName[] set, ComponentName activity) {
1213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.replacePreferredActivity(filter, match, set, activity);
1215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearPackagePreferredActivities(String packageName) {
1222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.clearPackagePreferredActivities(packageName);
1224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getPreferredActivities(List<IntentFilter> outFilters,
1231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                      List<ComponentName> outActivities, String packageName) {
1232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredActivities(outFilters, outActivities, packageName);
1234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return 0;
1238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setComponentEnabledSetting(ComponentName componentName,
1242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                           int newState, int flags) {
1243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1244f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            mPM.setComponentEnabledSetting(componentName, newState, flags, UserHandle.myUserId());
1245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getComponentEnabledSetting(ComponentName componentName) {
1252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1253f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            return mPM.getComponentEnabledSetting(componentName, UserHandle.myUserId());
1254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setApplicationEnabledSetting(String packageName,
1262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                             int newState, int flags) {
1263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1264f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            mPM.setApplicationEnabledSetting(packageName, newState, flags, UserHandle.myUserId());
1265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getApplicationEnabledSetting(String packageName) {
1272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1273f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            return mPM.getApplicationEnabledSetting(packageName, UserHandle.myUserId());
1274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1279390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
12800aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    /**
12810aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     * @hide
12820aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     */
12830aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    @Override
12840aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public VerifierDeviceIdentity getVerifierDeviceIdentity() {
12850aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
12860aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            return mPM.getVerifierDeviceIdentity();
12870aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (RemoteException e) {
12880aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // Should never happen!
12890aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
12900aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        return null;
12910aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
12920aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final ContextImpl mContext;
1294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final IPackageManager mPM;
1295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final Object sSync = new Object();
129739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    private static HashMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache
129839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            = new HashMap<ResourceName, WeakReference<Drawable.ConstantState>>();
129939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    private static HashMap<ResourceName, WeakReference<CharSequence>> sStringCache
130039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            = new HashMap<ResourceName, WeakReference<CharSequence>>();
1301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick}
1302