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;
53390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log;
54a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display;
55390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
56390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference;
57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList;
58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.HashMap;
59390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.Iterator;
60390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List;
61390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
62390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*package*/
63390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickfinal class ApplicationPackageManager extends PackageManager {
64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final String TAG = "ApplicationPackageManager";
65390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG = false;
66390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG_ICONS = false;
67390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
68390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
69390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PackageInfo getPackageInfo(String packageName, int flags)
70390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
71390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
72ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            PackageInfo pi = mPM.getPackageInfo(packageName, flags, mContext.getUserId());
73390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
74390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
75390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
76390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
77390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
79390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
80390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
81390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
82390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
83390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
84390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] currentToCanonicalPackageNames(String[] names) {
85390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
86390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.currentToCanonicalPackageNames(names);
87390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
88390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
89390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
90390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
91390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
92390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
93390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] canonicalToCurrentPackageNames(String[] names) {
94390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
95390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.canonicalToCurrentPackageNames(names);
96390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
97390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
98390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
99390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Intent getLaunchIntentForPackage(String packageName) {
103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // First see if the package has an INFO activity; the existence of
104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // such an activity is implied to be the desired front-door for the
105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // overall package (such as if it has multiple launcher entries).
106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.addCategory(Intent.CATEGORY_INFO);
108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.setPackage(packageName);
109194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0);
110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // Otherwise, try to find a main launcher activity.
112194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // reuse the intent instance
114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.removeCategory(Intent.CATEGORY_INFO);
115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER);
116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.setPackage(packageName);
117194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn            ris = queryIntentActivities(intentToResolve, 0);
118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
119194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return null;
121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intent = new Intent(intentToResolve);
123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
124194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        intent.setClassName(ris.get(0).activityInfo.packageName,
125194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn                ris.get(0).activityInfo.name);
126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return intent;
127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int[] getPackageGids(String packageName)
131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int[] gids = mPM.getPackageGids(packageName);
134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (gids == null || gids.length > 0) {
135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return gids;
136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionInfo getPermissionInfo(String name, int flags)
146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionInfo pi = mPM.getPermissionInfo(name, flags);
149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionInfo> queryPermissionsByGroup(String group, int flags)
161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags);
164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(group);
172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionGroupInfo getPermissionGroupInfo(String name,
176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                      int flags) throws NameNotFoundException {
177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags);
179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pgi != null) {
180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pgi;
181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getAllPermissionGroups(flags);
193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ApplicationInfo getApplicationInfo(String packageName, int flags)
200390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
201390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
202ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, mContext.getUserId());
203390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getActivityInfo(ComponentName className, int flags)
215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
217ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ActivityInfo ai = mPM.getActivityInfo(className, flags, mContext.getUserId());
218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getReceiverInfo(ComponentName className, int flags)
230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
232ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ActivityInfo ai = mPM.getReceiverInfo(className, flags, mContext.getUserId());
233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ServiceInfo getServiceInfo(ComponentName className, int flags)
245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
247ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ServiceInfo si = mPM.getServiceInfo(className, flags, mContext.getUserId());
248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (si != null) {
249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return si;
250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo getProviderInfo(ComponentName className, int flags)
260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
262ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ProviderInfo pi = mPM.getProviderInfo(className, flags, mContext.getUserId());
263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getSystemSharedLibraryNames() {
275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemSharedLibraryNames();
277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
279390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public FeatureInfo[] getSystemAvailableFeatures() {
284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemAvailableFeatures();
286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
288390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
292390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean hasSystemFeature(String name) {
293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.hasSystemFeature(name);
295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
297390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
298390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkPermission(String permName, String pkgName) {
302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkPermission(permName, pkgName);
304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermission(PermissionInfo info) {
311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermission(info);
313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermissionAsync(PermissionInfo info) {
320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
321390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermissionAsync(info);
322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePermission(String name) {
329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePermission(name);
331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
335390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
336390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
337e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void grantPermission(String packageName, String permissionName) {
338e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
339e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.grantPermission(packageName, permissionName);
340e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
341e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
342e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
343e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
344e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
345e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
346e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void revokePermission(String packageName, String permissionName) {
347e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
348e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.revokePermission(packageName, permissionName);
349e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
350e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
351e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
352e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
353e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
354e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
355390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(String pkg1, String pkg2) {
356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkSignatures(pkg1, pkg2);
358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
361390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
362390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
364390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(int uid1, int uid2) {
365390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
366390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkUidSignatures(uid1, uid2);
367390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
368390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
369390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
370390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
371390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getPackagesForUid(int uid) {
374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPackagesForUid(uid);
376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getNameForUid(int uid) {
383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getNameForUid(uid);
385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
388390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getUidForSharedUser(String sharedUserName)
392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int uid = mPM.getUidForSharedUser(sharedUserName);
395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if(uid != -1) {
396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return uid;
397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("No shared userid for user:"+sharedUserName);
402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
404e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getInstalledPackages(int flags) {
407ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return getInstalledPackages(flags, mContext.getUserId());
408151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    }
409151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani
410151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    /** @hide */
411151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    @Override
412151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    public List<PackageInfo> getInstalledPackages(int flags, int userId) {
413390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
414e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            final List<PackageInfo> packageInfos = new ArrayList<PackageInfo>();
415e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            PackageInfo lastItem = null;
416e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ParceledListSlice<PackageInfo> slice;
417e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
418e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            do {
419e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                final String lastKey = lastItem != null ? lastItem.packageName : null;
420151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                slice = mPM.getInstalledPackages(flags, lastKey, userId);
421e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                lastItem = slice.populateList(packageInfos, PackageInfo.CREATOR);
422e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            } while (!slice.isLastSlice());
423e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
424e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            return packageInfos;
425390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
426390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
427390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
428390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
429390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
430e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
431390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
432390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ApplicationInfo> getInstalledApplications(int flags) {
433ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        final int userId = mContext.getUserId();
434390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
435e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            final List<ApplicationInfo> applicationInfos = new ArrayList<ApplicationInfo>();
436e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ApplicationInfo lastItem = null;
437e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ParceledListSlice<ApplicationInfo> slice;
438e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
439e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            do {
440e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                final String lastKey = lastItem != null ? lastItem.packageName : null;
441483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                slice = mPM.getInstalledApplications(flags, lastKey, userId);
442e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                lastItem = slice.populateList(applicationInfos, ApplicationInfo.CREATOR);
443e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            } while (!slice.isLastSlice());
444e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
445e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            return applicationInfos;
446390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
448390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
449390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
451390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveActivity(Intent intent, int flags) {
453ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return resolveActivityAsUser(intent, flags, mContext.getUserId());
45458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    }
45558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov
45658d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    @Override
45758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId) {
458390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveIntent(
460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
46258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                flags,
46358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                userId);
464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivities(Intent intent,
471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                   int flags) {
472ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return queryIntentActivitiesAsUser(intent, flags, mContext.getUserId());
473151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    }
474151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani
475151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    /** @hide Same as above but for a specific user */
476151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    @Override
47758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
478151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                                                   int flags, int userId) {
479390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivities(
481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
483483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
484151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                userId);
485390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivityOptions(
492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName caller, Intent[] specifics, Intent intent,
493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        int flags) {
494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final ContentResolver resolver = mContext.getContentResolver();
495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
496390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String[] specificTypes = null;
497390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (specifics != null) {
498390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            final int N = specifics.length;
499390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (int i=0; i<N; i++) {
500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Intent sp = specifics[i];
501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (sp != null) {
502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    String t = sp.resolveTypeIfNeeded(resolver);
503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (t != null) {
504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        if (specificTypes == null) {
505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            specificTypes = new String[N];
506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        specificTypes[i] = t;
508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
510390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivityOptions(caller, specifics,
515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                  specificTypes, intent, intent.resolveTypeIfNeeded(resolver),
516ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey                                                  flags, mContext.getUserId());
517390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
519390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
522f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    /**
523f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani     * @hide
524f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani     */
525390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
526f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags, int userId) {
527390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentReceivers(
529390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
530390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
531483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
532f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani                userId);
533390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
535390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
536390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
537390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
538390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
539f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) {
540ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return queryBroadcastReceivers(intent, flags, mContext.getUserId());
541f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    }
542f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani
543f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    @Override
544390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveService(Intent intent, int flags) {
545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveService(
547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
548390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
549483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
550ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey                mContext.getUserId());
551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
552390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
55758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId) {
558390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentServices(
560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
561390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
562483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
56358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                userId);
564390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
565390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
566390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
567390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
568390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
569390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
57058d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentServices(Intent intent, int flags) {
571ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return queryIntentServicesAsUser(intent, flags, mContext.getUserId());
57258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    }
57358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov
57458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    @Override
575390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo resolveContentProvider(String name,
576390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                               int flags) {
577390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
578ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mPM.resolveContentProvider(name, flags, mContext.getUserId());
579390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
580390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
581390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
582390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
583390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
584390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
585390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ProviderInfo> queryContentProviders(String processName,
586390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                    int uid, int flags) {
587390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
588390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryContentProviders(processName, uid, flags);
589390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
590390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
591390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
592390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
593390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
594390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
595390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public InstrumentationInfo getInstrumentationInfo(
596390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName className, int flags)
597390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
598390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
599390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            InstrumentationInfo ii = mPM.getInstrumentationInfo(
600390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                className, flags);
601390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ii != null) {
602390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ii;
603390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
604390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
605390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
606390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
607390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
608390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
609390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
610390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
611390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
612390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<InstrumentationInfo> queryInstrumentation(
613390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String targetPackage, int flags) {
614390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
615390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryInstrumentation(targetPackage, flags);
616390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
617390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
620390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDrawable(String packageName, int resid,
622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                          ApplicationInfo appInfo) {
623390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
624390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Drawable dr = getCachedIcon(name);
625390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (dr != null) {
626390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
627390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
628390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
629390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
634390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
635390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            dr = r.getDrawable(resid);
638390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (false) {
639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                RuntimeException e = new RuntimeException("here");
640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                e.fillInStackTrace();
641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resid)
642390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + " from package " + packageName
643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ": app scale=" + r.getCompatibilityInfo().applicationScale
644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ", caller scale=" + mContext.getResources().getCompatibilityInfo().applicationScale,
645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      e);
646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
647390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Getting drawable 0x"
648390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + Integer.toHexString(resid) + " from " + r
649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + ": " + dr);
650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedIcon(name, dr);
651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
653390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
65508f16544176a04a958d403409f98cd0502bb8da3Joe Onorato        } catch (Resources.NotFoundException e) {
65608f16544176a04a958d403409f98cd0502bb8da3Joe Onorato            Log.w("PackageManager", "Failure retrieving resources for"
65708f16544176a04a958d403409f98cd0502bb8da3Joe Onorato                  + appInfo.packageName + ": " + e.getMessage());
658390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
659390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
660390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
661390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving icon 0x"
662390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
663390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
664390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
665390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
666390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
667390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
668390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(ComponentName activityName)
669390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
670390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadIcon(this);
671390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
672390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
673390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(Intent intent)
674390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
675390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
676390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityIcon(intent.getComponent());
677390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
678390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
679390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
680390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
681390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
682390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadIcon(this);
683390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
684390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
68539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy        throw new NameNotFoundException(intent.toUri(0));
686390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
687390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDefaultActivityIcon() {
689390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return Resources.getSystem().getDrawable(
690390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            com.android.internal.R.drawable.sym_def_app_icon);
691390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
692390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
693390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(ApplicationInfo info) {
694390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadIcon(this);
695390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
696390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
697390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(String packageName)
698390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
699390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationIcon(getApplicationInfo(packageName, 0));
700390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
701390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
702390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
703390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(ComponentName activityName)
704390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
705390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadLogo(this);
706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
707390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
709390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(Intent intent)
710390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
711390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
712390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityLogo(intent.getComponent());
713390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
714390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
716390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadLogo(this);
719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
720390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
721390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(intent.toUri(0));
722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
723390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
725390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(ApplicationInfo info) {
726390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLogo(this);
727390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
728390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
729390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
730390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(String packageName)
731390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
732390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationLogo(getApplicationInfo(packageName, 0));
733390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
734390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
735390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForActivity(
736390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName activityName) throws NameNotFoundException {
737390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
738390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getActivityInfo(activityName, 0).applicationInfo);
739390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
740390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
741390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
742390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ApplicationInfo app) throws NameNotFoundException {
743390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (app.packageName.equals("system")) {
744390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mContext.mMainThread.getSystemContext().getResources();
745390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
746390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Resources r = mContext.mMainThread.getTopLevelResources(
747a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown                app.uid == Process.myUid() ? app.sourceDir : app.publicSourceDir,
748a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown                        Display.DEFAULT_DISPLAY, null, mContext.mPackageInfo);
749390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (r != null) {
750390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r;
751390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
752390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("Unable to open " + app.publicSourceDir);
753390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
754390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
755390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
756390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String appPackageName) throws NameNotFoundException {
757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getApplicationInfo(appPackageName, 0));
759390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
760390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
76198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    /** @hide */
76298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    @Override
76398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    public Resources getResourcesForApplicationAsUser(String appPackageName, int userId)
76498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            throws NameNotFoundException {
765ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        if (userId < 0) {
766ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            throw new IllegalArgumentException(
767ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey                    "Call does not support special user #" + userId);
768ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        }
769ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        if ("system".equals(appPackageName)) {
770ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mContext.mMainThread.getSystemContext().getResources();
771ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        }
77298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        try {
77398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, 0, userId);
77498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            if (ai != null) {
77598edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani                return getResourcesForApplication(ai);
77698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            }
77798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        } catch (RemoteException e) {
77898edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            throw new RuntimeException("Package manager has died", e);
77998edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        }
78098edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        throw new NameNotFoundException("Package " + appPackageName + " doesn't exist");
78198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    }
78298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani
783390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    int mCachedSafeMode = -1;
784390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public boolean isSafeMode() {
785390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
786390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (mCachedSafeMode < 0) {
787390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                mCachedSafeMode = mPM.isSafeMode() ? 1 : 0;
788390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
789390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mCachedSafeMode != 0;
790390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
791390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
792390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
793390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
794390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
795390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    static void configurationChanged() {
796390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
797390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sIconCache.clear();
798390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.clear();
799390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
800390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
801390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
802390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    ApplicationPackageManager(ContextImpl context,
803390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                              IPackageManager pm) {
804390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mContext = context;
805390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mPM = pm;
806390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
807390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
808390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private Drawable getCachedIcon(ResourceName name) {
809390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
81039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            WeakReference<Drawable.ConstantState> wr = sIconCache.get(name);
811390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for "
812390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + name + ": " + wr);
813390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
81439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                Drawable.ConstantState state = wr.get();
81539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                if (state != null) {
81639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    if (DEBUG_ICONS) {
81739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                        Log.v(TAG, "Get cached drawable state for " + name + ": " + state);
81839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    }
81939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    // Note: It's okay here to not use the newDrawable(Resources) variant
82039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       of the API. The ConstantState comes from a drawable that was
82139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       originally created by passing the proper app Resources instance
82239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       which means the state should already contain the proper
82339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       resources specific information (like density.) See
82439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       BitmapDrawable.BitmapState for instance.
82539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    return state.newDrawable();
826390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
827390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
828390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sIconCache.remove(name);
829390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
830390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
831390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
832390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
833390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
834390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedIcon(ResourceName name, Drawable dr) {
835390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
83639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            sIconCache.put(name, new WeakReference<Drawable.ConstantState>(dr.getConstantState()));
83739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable state for " + name + ": " + dr);
838390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
839390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
840390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
84139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    static void handlePackageBroadcast(int cmd, String[] pkgList, boolean hasPkgInfo) {
842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        boolean immediateGc = false;
843390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) {
844390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            immediateGc = true;
845390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
846390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (pkgList != null && (pkgList.length > 0)) {
847390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            boolean needCleanup = false;
848390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (String ssp : pkgList) {
849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                synchronized (sSync) {
850390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (sIconCache.size() > 0) {
851390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        Iterator<ResourceName> it = sIconCache.keySet().iterator();
852390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        while (it.hasNext()) {
853390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            ResourceName nm = it.next();
854390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            if (nm.packageName.equals(ssp)) {
855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                //Log.i(TAG, "Removing cached drawable for " + nm);
856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                it.remove();
857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                needCleanup = true;
858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            }
859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
861390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (sStringCache.size() > 0) {
862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        Iterator<ResourceName> it = sStringCache.keySet().iterator();
863390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        while (it.hasNext()) {
864390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            ResourceName nm = it.next();
865390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            if (nm.packageName.equals(ssp)) {
866390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                //Log.i(TAG, "Removing cached string for " + nm);
867390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                it.remove();
868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                needCleanup = true;
869390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            }
870390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
871390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
873390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
874390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (needCleanup || hasPkgInfo) {
875390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (immediateGc) {
876390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    // Schedule an immediate gc.
877390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    Runtime.getRuntime().gc();
878390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                } else {
879390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    ActivityThread.currentActivityThread().scheduleGcIdler();
880390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
881390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
882390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
883390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
884390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
885390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final class ResourceName {
886390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final String packageName;
887390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final int iconId;
888390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
889390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(String _packageName, int _iconId) {
890390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            packageName = _packageName;
891390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            iconId = _iconId;
892390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
893390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
894390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ApplicationInfo aInfo, int _iconId) {
895390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(aInfo.packageName, _iconId);
896390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
897390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
898390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ComponentInfo cInfo, int _iconId) {
899390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(cInfo.applicationInfo.packageName, _iconId);
900390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
901390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
902390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ResolveInfo rInfo, int _iconId) {
903390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(rInfo.activityInfo.applicationInfo.packageName, _iconId);
904390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
905390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
907390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public boolean equals(Object o) {
908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (this == o) return true;
909390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (o == null || getClass() != o.getClass()) return false;
910390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
911390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            ResourceName that = (ResourceName) o;
912390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
913390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (iconId != that.iconId) return false;
914390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return !(packageName != null ?
915390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                     !packageName.equals(that.packageName) : that.packageName != null);
916390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
917390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
918390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
919390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
920390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public int hashCode() {
921390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int result;
922390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = packageName.hashCode();
923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = 31 * result + iconId;
924390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return result;
925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
926390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
928390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public String toString() {
929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return "{ResourceName " + packageName + " / " + iconId + "}";
930390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
931390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
932390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
933390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private CharSequence getCachedString(ResourceName name) {
934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            WeakReference<CharSequence> wr = sStringCache.get(name);
936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
937390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                CharSequence cs = wr.get();
938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (cs != null) {
939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    return cs;
940390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
942390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sStringCache.remove(name);
943390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
944390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
945390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
946390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
947390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
948390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedString(ResourceName name, CharSequence cs) {
949390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
950390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.put(name, new WeakReference<CharSequence>(cs));
951390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
952390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
953390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
954390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
955390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getText(String packageName, int resid,
956390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                ApplicationInfo appInfo) {
957390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
958390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        CharSequence text = getCachedString(name);
959390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (text != null) {
960390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
961390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
962390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
963390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
964390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
965390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
966390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
967390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            text = r.getText(resid);
972390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedString(name, text);
973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
974390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
975390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
976390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
977390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
978390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
979390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
980390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving text 0x"
981390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
982390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
983390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
984390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
985390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
986390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
987390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
988390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public XmlResourceParser getXml(String packageName, int resid,
989390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                    ApplicationInfo appInfo) {
990390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
991390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
993390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
995390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
998390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
999390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r.getXml(resid);
1000390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
1001390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
1002390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
1003390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving xml 0x"
1004390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
1005390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
1006390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
10073fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert            Log.w("PackageManager", "Failure retrieving resources for "
1008390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
1009390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1010390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1011390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getApplicationLabel(ApplicationInfo info) {
1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLabel(this);
1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1019390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,
1020390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                               String installerPackageName) {
1021390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1022390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.installPackage(packageURI, observer, flags, installerPackageName);
1023390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1024390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1025390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1026390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1027390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1028390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
10295ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
10305ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            int flags, String installerPackageName, Uri verificationURI,
1031e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
10325ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
10335ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
1034e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings                    verificationURI, manifestDigest, encryptionParams);
10355ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
10365ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
10375ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
10385ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
10395ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
10405ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
1041706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings	  public void installPackageWithVerificationAndEncryption(Uri packageURI,
1042706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            IPackageInstallObserver observer, int flags, String installerPackageName,
1043706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
1044706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        try {
1045706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            mPM.installPackageWithVerificationAndEncryption(packageURI, observer, flags,
1046706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings                    installerPackageName, verificationParams, encryptionParams);
1047706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        } catch (RemoteException e) {
1048706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            // Should never happen!
1049706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        }
1050706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings    }
1051706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings
1052706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings    @Override
10537767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public int installExistingPackage(String packageName)
10547767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            throws NameNotFoundException {
10557767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        try {
10567767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            int res = mPM.installExistingPackage(packageName);
10577767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            if (res == INSTALL_FAILED_INVALID_URI) {
10587767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn                throw new NameNotFoundException("Package " + packageName + " doesn't exist");
10597767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            }
10607767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            return res;
10617767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        } catch (RemoteException e) {
10627767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            // Should never happen!
10637767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            throw new NameNotFoundException("Package " + packageName + " doesn't exist");
10647767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        }
10657767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    }
10667767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
10677767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    @Override
10683a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root    public void verifyPendingInstall(int id, int response) {
10695ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
10703a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root            mPM.verifyPendingInstall(id, response);
10715ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
10725ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
10735ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
10745ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
10755ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
10765ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
1077d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    public void extendVerificationTimeout(int id, int verificationCodeAtTimeout,
1078d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            long millisecondsToDelay) {
1079d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        try {
1080d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            mPM.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay);
1081d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        } catch (RemoteException e) {
1082d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            // Should never happen!
1083d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        }
1084d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    }
1085d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings
1086d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    @Override
1087880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    public void setInstallerPackageName(String targetPackage,
1088880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            String installerPackageName) {
1089880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        try {
1090880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            mPM.setInstallerPackageName(targetPackage, installerPackageName);
1091880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        } catch (RemoteException e) {
1092880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            // Should never happen!
1093880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        }
1094880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    }
1095880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn
1096880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    @Override
1097390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void movePackage(String packageName, IPackageMoveObserver observer, int flags) {
1098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1099390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.movePackage(packageName, observer, flags);
1100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getInstallerPackageName(String packageName) {
1107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getInstallerPackageName(packageName);
1109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
1117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deletePackage(packageName, observer, flags);
1119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearApplicationUserData(String packageName,
1125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         IPackageDataObserver observer) {
1126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1127ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.clearApplicationUserData(packageName, observer, mContext.getUserId());
1128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deleteApplicationCacheFiles(String packageName,
1134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                            IPackageDataObserver observer) {
1135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deleteApplicationCacheFiles(packageName, observer);
1137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorageAndNotify(long idealStorageSize, IPackageDataObserver observer) {
1143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorageAndNotify(idealStorageSize, observer);
1145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorage(long freeStorageSize, IntentSender pi) {
1152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorage(freeStorageSize, pi);
1154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
11600c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn    public void getPackageSizeInfo(String packageName, int userHandle,
11610c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            IPackageStatsObserver observer) {
1162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
11630c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            mPM.getPackageSizeInfo(packageName, userHandle, observer);
1164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPackageToPreferred(String packageName) {
1170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.addPackageToPreferred(packageName);
1172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePackageFromPreferred(String packageName) {
1179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePackageFromPreferred(packageName);
1181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getPreferredPackages(int flags) {
1188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredPackages(flags);
1190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return new ArrayList<PackageInfo>();
1194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPreferredActivity(IntentFilter filter,
1198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                     int match, ComponentName[] set, ComponentName activity) {
1199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1200ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.addPreferredActivity(filter, match, set, activity, mContext.getUserId());
1201a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        } catch (RemoteException e) {
1202a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            // Should never happen!
1203a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        }
1204a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    }
1205a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani
1206a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    @Override
1207a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    public void addPreferredActivity(IntentFilter filter, int match,
1208a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            ComponentName[] set, ComponentName activity, int userId) {
1209a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        try {
1210a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            mPM.addPreferredActivity(filter, match, set, activity, userId);
1211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void replacePreferredActivity(IntentFilter filter,
1218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         int match, ComponentName[] set, ComponentName activity) {
1219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.replacePreferredActivity(filter, match, set, activity);
1221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearPackagePreferredActivities(String packageName) {
1228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.clearPackagePreferredActivities(packageName);
1230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getPreferredActivities(List<IntentFilter> outFilters,
1237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                      List<ComponentName> outActivities, String packageName) {
1238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredActivities(outFilters, outActivities, packageName);
1240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return 0;
1244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setComponentEnabledSetting(ComponentName componentName,
1248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                           int newState, int flags) {
1249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1250ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.setComponentEnabledSetting(componentName, newState, flags, mContext.getUserId());
1251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getComponentEnabledSetting(ComponentName componentName) {
1258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1259ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mPM.getComponentEnabledSetting(componentName, mContext.getUserId());
1260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setApplicationEnabledSetting(String packageName,
1268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                             int newState, int flags) {
1269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1270ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.setApplicationEnabledSetting(packageName, newState, flags, mContext.getUserId());
1271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getApplicationEnabledSetting(String packageName) {
1278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1279ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mPM.getApplicationEnabledSetting(packageName, mContext.getUserId());
1280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
12860aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    /**
12870aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     * @hide
12880aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     */
12890aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    @Override
12900aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public VerifierDeviceIdentity getVerifierDeviceIdentity() {
12910aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
12920aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            return mPM.getVerifierDeviceIdentity();
12930aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (RemoteException e) {
12940aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // Should never happen!
12950aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
12960aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        return null;
12970aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
12980aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final ContextImpl mContext;
1300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final IPackageManager mPM;
1301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final Object sSync = new Object();
130339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    private static HashMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache
130439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            = new HashMap<ResourceName, WeakReference<Drawable.ConstantState>>();
130539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    private static HashMap<ResourceName, WeakReference<CharSequence>> sStringCache
130639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            = new HashMap<ResourceName, WeakReference<CharSequence>>();
1307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick}
1308