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;
5367df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasaniimport android.os.UserHandle;
54add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackbornimport android.util.ArrayMap;
55390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log;
56a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display;
57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference;
59390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList;
60390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.HashMap;
61390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.Iterator;
62390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List;
63390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*package*/
65390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickfinal class ApplicationPackageManager extends PackageManager {
66390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final String TAG = "ApplicationPackageManager";
67390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG = false;
68390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG_ICONS = false;
69390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
70390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
71390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PackageInfo getPackageInfo(String packageName, int flags)
72390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
73390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
74ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            PackageInfo pi = mPM.getPackageInfo(packageName, flags, mContext.getUserId());
75390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
76390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
77390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
79390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
80390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
81390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
82390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
83390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
84390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
85390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
86390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] currentToCanonicalPackageNames(String[] names) {
87390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
88390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.currentToCanonicalPackageNames(names);
89390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
90390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
91390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
92390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
93390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
94390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
95390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] canonicalToCurrentPackageNames(String[] names) {
96390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
97390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.canonicalToCurrentPackageNames(names);
98390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
99390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Intent getLaunchIntentForPackage(String packageName) {
105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // First see if the package has an INFO activity; the existence of
106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // such an activity is implied to be the desired front-door for the
107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // overall package (such as if it has multiple launcher entries).
108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.addCategory(Intent.CATEGORY_INFO);
110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.setPackage(packageName);
111194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0);
112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // Otherwise, try to find a main launcher activity.
114194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // reuse the intent instance
116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.removeCategory(Intent.CATEGORY_INFO);
117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER);
118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.setPackage(packageName);
119194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn            ris = queryIntentActivities(intentToResolve, 0);
120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
121194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return null;
123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intent = new Intent(intentToResolve);
125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
126194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        intent.setClassName(ris.get(0).activityInfo.packageName,
127194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn                ris.get(0).activityInfo.name);
128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return intent;
129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int[] getPackageGids(String packageName)
133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int[] gids = mPM.getPackageGids(packageName);
136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (gids == null || gids.length > 0) {
137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return gids;
138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
147a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn    public int getPackageUid(String packageName, int userHandle)
148a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn            throws NameNotFoundException {
149a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn        try {
150a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn            int uid = mPM.getPackageUid(packageName, userHandle);
151a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn            if (uid >= 0) {
152a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn                return uid;
153a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn            }
154a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn        } catch (RemoteException e) {
155a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
156a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn        }
157a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn
158a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn        throw new NameNotFoundException(packageName);
159a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn    }
160a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn
161a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn    @Override
162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionInfo getPermissionInfo(String name, int flags)
163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionInfo pi = mPM.getPermissionInfo(name, flags);
166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionInfo> queryPermissionsByGroup(String group, int flags)
178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags);
181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(group);
189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionGroupInfo getPermissionGroupInfo(String name,
193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                      int flags) throws NameNotFoundException {
194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags);
196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pgi != null) {
197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pgi;
198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
200390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
201390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
202390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
203390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getAllPermissionGroups(flags);
210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ApplicationInfo getApplicationInfo(String packageName, int flags)
217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
219ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, mContext.getUserId());
220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getActivityInfo(ComponentName className, int flags)
232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
234ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ActivityInfo ai = mPM.getActivityInfo(className, flags, mContext.getUserId());
235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getReceiverInfo(ComponentName className, int flags)
247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
249ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ActivityInfo ai = mPM.getReceiverInfo(className, flags, mContext.getUserId());
250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ServiceInfo getServiceInfo(ComponentName className, int flags)
262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
264ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ServiceInfo si = mPM.getServiceInfo(className, flags, mContext.getUserId());
265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (si != null) {
266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return si;
267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo getProviderInfo(ComponentName className, int flags)
277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
279ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            ProviderInfo pi = mPM.getProviderInfo(className, flags, mContext.getUserId());
280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
288390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getSystemSharedLibraryNames() {
292390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemSharedLibraryNames();
294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
297390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
298390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public FeatureInfo[] getSystemAvailableFeatures() {
301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemAvailableFeatures();
303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean hasSystemFeature(String name) {
310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.hasSystemFeature(name);
312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkPermission(String permName, String pkgName) {
319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkPermission(permName, pkgName);
321390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermission(PermissionInfo info) {
328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermission(info);
330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
335390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
336390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermissionAsync(PermissionInfo info) {
337390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
338390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermissionAsync(info);
339390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
340390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
341390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
342390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
343390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
344390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
345390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePermission(String name) {
346390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
347390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePermission(name);
348390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
349390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
350390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
351390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
352390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
353390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
354e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void grantPermission(String packageName, String permissionName) {
355e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
356e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.grantPermission(packageName, permissionName);
357e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
358e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
359e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
360e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
361e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
362e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
363e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void revokePermission(String packageName, String permissionName) {
364e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
365e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.revokePermission(packageName, permissionName);
366e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
367e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
368e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
369e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
370e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
371e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(String pkg1, String pkg2) {
373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkSignatures(pkg1, pkg2);
375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(int uid1, int uid2) {
382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkUidSignatures(uid1, uid2);
384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
388390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getPackagesForUid(int uid) {
391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPackagesForUid(uid);
393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getNameForUid(int uid) {
400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getNameForUid(uid);
402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
408390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getUidForSharedUser(String sharedUserName)
409390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
410390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
411390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int uid = mPM.getUidForSharedUser(sharedUserName);
412390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if(uid != -1) {
413390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return uid;
414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
415390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
416390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
417390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
418390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("No shared userid for user:"+sharedUserName);
419390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
420390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
421e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getInstalledPackages(int flags) {
424ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return getInstalledPackages(flags, mContext.getUserId());
425151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    }
426151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani
427151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    /** @hide */
428151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    @Override
429151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    public List<PackageInfo> getInstalledPackages(int flags, int userId) {
430390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
431d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn            ParceledListSlice<PackageInfo> slice = mPM.getInstalledPackages(flags, userId);
432d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn            return slice.getList();
433390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
434390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
435390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
436390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
437390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
438e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
439390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
440e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn    public List<PackageInfo> getPackagesHoldingPermissions(
441e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn            String[] permissions, int flags) {
442e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn        final int userId = mContext.getUserId();
443e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn        try {
444d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn            ParceledListSlice<PackageInfo> slice = mPM.getPackagesHoldingPermissions(
445d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn                    permissions, flags, userId);
446d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn            return slice.getList();
447e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn        } catch (RemoteException e) {
448e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
449e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn        }
450e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn    }
451e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn
452e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn    @SuppressWarnings("unchecked")
453e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn    @Override
454390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ApplicationInfo> getInstalledApplications(int flags) {
455ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        final int userId = mContext.getUserId();
456390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
457d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn            ParceledListSlice<ApplicationInfo> slice = mPM.getInstalledApplications(flags, userId);
458d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn            return slice.getList();
459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
463390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveActivity(Intent intent, int flags) {
466ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return resolveActivityAsUser(intent, flags, mContext.getUserId());
46758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    }
46858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov
46958d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    @Override
47058d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId) {
471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveIntent(
473390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
474390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
47558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                flags,
47658d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                userId);
477390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
478390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
479390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
483390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivities(Intent intent,
484390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                   int flags) {
485ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return queryIntentActivitiesAsUser(intent, flags, mContext.getUserId());
486151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    }
487151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani
488151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    /** @hide Same as above but for a specific user */
489151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani    @Override
49058d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
491151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                                                   int flags, int userId) {
492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivities(
494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
496483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
497151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani                userId);
498390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
499390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivityOptions(
505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName caller, Intent[] specifics, Intent intent,
506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        int flags) {
507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final ContentResolver resolver = mContext.getContentResolver();
508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String[] specificTypes = null;
510390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (specifics != null) {
511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            final int N = specifics.length;
512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (int i=0; i<N; i++) {
513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Intent sp = specifics[i];
514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (sp != null) {
515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    String t = sp.resolveTypeIfNeeded(resolver);
516390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (t != null) {
517390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        if (specificTypes == null) {
518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            specificTypes = new String[N];
519390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        specificTypes[i] = t;
521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
522390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
523390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
524390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
525390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
526390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
527390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivityOptions(caller, specifics,
528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                  specificTypes, intent, intent.resolveTypeIfNeeded(resolver),
529ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey                                                  flags, mContext.getUserId());
530390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
531390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
532390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
533390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
535f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    /**
536f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani     * @hide
537f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani     */
538390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
539f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags, int userId) {
540390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
541390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentReceivers(
542390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
543390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
544483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
545f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani                userId);
546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
548390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
550390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
552f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) {
553ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return queryBroadcastReceivers(intent, flags, mContext.getUserId());
554f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    }
555f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani
556f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani    @Override
557390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveService(Intent intent, int flags) {
558390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveService(
560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
561390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
562483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
563ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey                mContext.getUserId());
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> queryIntentServicesAsUser(Intent intent, int flags, int userId) {
571390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
572390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentServices(
573390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
574390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
575483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
57658d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov                userId);
577390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
578390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
579390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
580390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
581390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
582390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
58358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    public List<ResolveInfo> queryIntentServices(Intent intent, int flags) {
584ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        return queryIntentServicesAsUser(intent, flags, mContext.getUserId());
58558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    }
58658d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov
58758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov    @Override
58885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    public List<ResolveInfo> queryIntentContentProvidersAsUser(
58985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            Intent intent, int flags, int userId) {
59085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        try {
59185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            return mPM.queryIntentContentProviders(intent,
59285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey                    intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, userId);
59385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        } catch (RemoteException e) {
59485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey            throw new RuntimeException("Package manager has died", e);
59585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        }
59685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    }
59785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey
59885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    @Override
59985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) {
60085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey        return queryIntentContentProvidersAsUser(intent, flags, mContext.getUserId());
60185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    }
60285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey
60385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey    @Override
604390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo resolveContentProvider(String name,
605390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                               int flags) {
606390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
607ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mPM.resolveContentProvider(name, flags, mContext.getUserId());
608390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
609390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
610390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
611390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
612390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
613390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
614390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ProviderInfo> queryContentProviders(String processName,
615390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                    int uid, int flags) {
616390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
617390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryContentProviders(processName, uid, flags);
618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
620390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
623390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
624390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public InstrumentationInfo getInstrumentationInfo(
625390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName className, int flags)
626390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
627390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
628390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            InstrumentationInfo ii = mPM.getInstrumentationInfo(
629390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                className, flags);
630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ii != null) {
631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ii;
632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
634390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
635390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
638390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<InstrumentationInfo> queryInstrumentation(
642390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String targetPackage, int flags) {
643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryInstrumentation(targetPackage, flags);
645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
647390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
648390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDrawable(String packageName, int resid,
651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                          ApplicationInfo appInfo) {
652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
653390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Drawable dr = getCachedIcon(name);
654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (dr != null) {
655390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
656390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
657390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
658390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
659390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
660390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
661390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
662390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
663390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
664390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
665390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
666390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            dr = r.getDrawable(resid);
667390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (false) {
668390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                RuntimeException e = new RuntimeException("here");
669390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                e.fillInStackTrace();
670390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resid)
671390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + " from package " + packageName
672390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ": app scale=" + r.getCompatibilityInfo().applicationScale
673390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ", caller scale=" + mContext.getResources().getCompatibilityInfo().applicationScale,
674390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      e);
675390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
676390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Getting drawable 0x"
677390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + Integer.toHexString(resid) + " from " + r
678390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + ": " + dr);
679390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedIcon(name, dr);
680390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
681390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
682390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
683390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
68408f16544176a04a958d403409f98cd0502bb8da3Joe Onorato        } catch (Resources.NotFoundException e) {
68508f16544176a04a958d403409f98cd0502bb8da3Joe Onorato            Log.w("PackageManager", "Failure retrieving resources for"
68608f16544176a04a958d403409f98cd0502bb8da3Joe Onorato                  + appInfo.packageName + ": " + e.getMessage());
687390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
689390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
690390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving icon 0x"
691390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
692390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
693390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
694390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
695390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
696390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
697390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(ComponentName activityName)
698390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
699390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadIcon(this);
700390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
701390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
702390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(Intent intent)
703390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
704390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
705390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityIcon(intent.getComponent());
706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
707390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
709390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
710390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
711390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadIcon(this);
712390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
713390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
71439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy        throw new NameNotFoundException(intent.toUri(0));
715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
716390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDefaultActivityIcon() {
718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return Resources.getSystem().getDrawable(
719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            com.android.internal.R.drawable.sym_def_app_icon);
720390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
721390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(ApplicationInfo info) {
723390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadIcon(this);
724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
725390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
726390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(String packageName)
727390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
728390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationIcon(getApplicationInfo(packageName, 0));
729390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
730390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
731390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
732390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(ComponentName activityName)
733390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
734390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadLogo(this);
735390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
736390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
737390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
738390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(Intent intent)
739390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
740390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
741390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityLogo(intent.getComponent());
742390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
743390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
744390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
745390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
746390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
747390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadLogo(this);
748390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
749390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
750390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(intent.toUri(0));
751390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
752390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
753390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
754390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(ApplicationInfo info) {
755390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLogo(this);
756390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
759390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(String packageName)
760390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
761390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationLogo(getApplicationInfo(packageName, 0));
762390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
763390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
764390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForActivity(
765390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName activityName) throws NameNotFoundException {
766390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
767390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getActivityInfo(activityName, 0).applicationInfo);
768390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
769390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
770390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
771390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ApplicationInfo app) throws NameNotFoundException {
772390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (app.packageName.equals("system")) {
773390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mContext.mMainThread.getSystemContext().getResources();
774390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
775390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Resources r = mContext.mMainThread.getTopLevelResources(
776a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown                app.uid == Process.myUid() ? app.sourceDir : app.publicSourceDir,
777a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown                        Display.DEFAULT_DISPLAY, null, mContext.mPackageInfo);
778390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (r != null) {
779390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r;
780390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
781390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("Unable to open " + app.publicSourceDir);
782390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
783390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
784390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
785390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String appPackageName) throws NameNotFoundException {
786390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
787390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getApplicationInfo(appPackageName, 0));
788390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
789390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
79098edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    /** @hide */
79198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    @Override
79298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    public Resources getResourcesForApplicationAsUser(String appPackageName, int userId)
79398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            throws NameNotFoundException {
794ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        if (userId < 0) {
795ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            throw new IllegalArgumentException(
796ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey                    "Call does not support special user #" + userId);
797ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        }
798ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        if ("system".equals(appPackageName)) {
799ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mContext.mMainThread.getSystemContext().getResources();
800ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey        }
80198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        try {
80298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, 0, userId);
80398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            if (ai != null) {
80498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani                return getResourcesForApplication(ai);
80598edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            }
80698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        } catch (RemoteException e) {
80798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani            throw new RuntimeException("Package manager has died", e);
80898edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        }
80998edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani        throw new NameNotFoundException("Package " + appPackageName + " doesn't exist");
81098edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani    }
81198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani
812390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    int mCachedSafeMode = -1;
813390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public boolean isSafeMode() {
814390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
815390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (mCachedSafeMode < 0) {
816390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                mCachedSafeMode = mPM.isSafeMode() ? 1 : 0;
817390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
818390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mCachedSafeMode != 0;
819390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
820390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
821390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
822390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
823390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
824390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    static void configurationChanged() {
825390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
826390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sIconCache.clear();
827390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.clear();
828390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
829390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
830390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
831390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    ApplicationPackageManager(ContextImpl context,
832390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                              IPackageManager pm) {
833390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mContext = context;
834390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mPM = pm;
835390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
836390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
837390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private Drawable getCachedIcon(ResourceName name) {
838390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
83939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            WeakReference<Drawable.ConstantState> wr = sIconCache.get(name);
840390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for "
841390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + name + ": " + wr);
842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
84339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                Drawable.ConstantState state = wr.get();
84439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                if (state != null) {
84539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    if (DEBUG_ICONS) {
84639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                        Log.v(TAG, "Get cached drawable state for " + name + ": " + state);
84739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    }
84839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    // Note: It's okay here to not use the newDrawable(Resources) variant
84939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       of the API. The ConstantState comes from a drawable that was
85039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       originally created by passing the proper app Resources instance
85139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       which means the state should already contain the proper
85239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       resources specific information (like density.) See
85339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       BitmapDrawable.BitmapState for instance.
85439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    return state.newDrawable();
855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sIconCache.remove(name);
858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
861390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
863390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedIcon(ResourceName name, Drawable dr) {
864390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
86539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            sIconCache.put(name, new WeakReference<Drawable.ConstantState>(dr.getConstantState()));
86639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable state for " + name + ": " + dr);
867390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
869390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
87039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    static void handlePackageBroadcast(int cmd, String[] pkgList, boolean hasPkgInfo) {
871390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        boolean immediateGc = false;
872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) {
873390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            immediateGc = true;
874390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
875390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (pkgList != null && (pkgList.length > 0)) {
876390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            boolean needCleanup = false;
877390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (String ssp : pkgList) {
878390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                synchronized (sSync) {
879add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                    for (int i=sIconCache.size()-1; i>=0; i--) {
880add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                        ResourceName nm = sIconCache.keyAt(i);
881add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                        if (nm.packageName.equals(ssp)) {
882add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                            //Log.i(TAG, "Removing cached drawable for " + nm);
883add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                            sIconCache.removeAt(i);
884add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                            needCleanup = true;
885390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
886390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
887add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                    for (int i=sStringCache.size()-1; i>=0; i--) {
888add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                        ResourceName nm = sStringCache.keyAt(i);
889add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                        if (nm.packageName.equals(ssp)) {
890add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                            //Log.i(TAG, "Removing cached string for " + nm);
891add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                            sStringCache.removeAt(i);
892add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn                            needCleanup = true;
893390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
894390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
895390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
896390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
897390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (needCleanup || hasPkgInfo) {
898390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (immediateGc) {
899390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    // Schedule an immediate gc.
900390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    Runtime.getRuntime().gc();
901390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                } else {
902390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    ActivityThread.currentActivityThread().scheduleGcIdler();
903390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
904390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
905390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
907390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final class ResourceName {
909390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final String packageName;
910390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final int iconId;
911390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
912390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(String _packageName, int _iconId) {
913390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            packageName = _packageName;
914390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            iconId = _iconId;
915390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
916390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
917390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ApplicationInfo aInfo, int _iconId) {
918390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(aInfo.packageName, _iconId);
919390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
920390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
921390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ComponentInfo cInfo, int _iconId) {
922390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(cInfo.applicationInfo.packageName, _iconId);
923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
924390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ResolveInfo rInfo, int _iconId) {
926390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(rInfo.activityInfo.applicationInfo.packageName, _iconId);
927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
928390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
930390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public boolean equals(Object o) {
931390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (this == o) return true;
932390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (o == null || getClass() != o.getClass()) return false;
933390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            ResourceName that = (ResourceName) o;
935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (iconId != that.iconId) return false;
937390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return !(packageName != null ?
938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                     !packageName.equals(that.packageName) : that.packageName != null);
939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
940390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
942390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
943390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public int hashCode() {
944390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int result;
945390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = packageName.hashCode();
946390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = 31 * result + iconId;
947390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return result;
948390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
949390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
950390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
951390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public String toString() {
952390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return "{ResourceName " + packageName + " / " + iconId + "}";
953390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
954390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
955390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
956390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private CharSequence getCachedString(ResourceName name) {
957390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
958390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            WeakReference<CharSequence> wr = sStringCache.get(name);
959390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
960390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                CharSequence cs = wr.get();
961390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (cs != null) {
962390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    return cs;
963390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
964390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
965390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sStringCache.remove(name);
966390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
967390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedString(ResourceName name, CharSequence cs) {
972390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.put(name, new WeakReference<CharSequence>(cs));
974390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
975390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
976390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
977390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
978390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getText(String packageName, int resid,
979390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                ApplicationInfo appInfo) {
980390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
981390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        CharSequence text = getCachedString(name);
982390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (text != null) {
983390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
984390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
985390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
986390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
987390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
988390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
989390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
990390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
991390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
993390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            text = r.getText(resid);
995390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedString(name, text);
996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
998390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
999390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
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 text 0x"
1004390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
1005390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
1006390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1007390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1008390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1009390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1010390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1011390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public XmlResourceParser getXml(String packageName, int resid,
1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                    ApplicationInfo appInfo) {
1013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
1017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
1018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
1019390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1020390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1021390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
1022390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r.getXml(resid);
1023390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
1024390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
1025390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
1026390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving xml 0x"
1027390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
1028390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
1029390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
10303fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert            Log.w("PackageManager", "Failure retrieving resources for "
1031390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
1032390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1033390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1034390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1035390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1036390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1037390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getApplicationLabel(ApplicationInfo info) {
1038390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLabel(this);
1039390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1040390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1041390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1042390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,
1043390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                               String installerPackageName) {
1044390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1045390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.installPackage(packageURI, observer, flags, installerPackageName);
1046390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1047390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1048390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1049390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1050390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1051390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
10525ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
10535ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            int flags, String installerPackageName, Uri verificationURI,
1054e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
10555ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
10565ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
1057e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings                    verificationURI, manifestDigest, encryptionParams);
10585ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
10595ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
10605ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
10615ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
10625ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
10635ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
1064706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings	  public void installPackageWithVerificationAndEncryption(Uri packageURI,
1065706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            IPackageInstallObserver observer, int flags, String installerPackageName,
1066706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
1067706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        try {
1068706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            mPM.installPackageWithVerificationAndEncryption(packageURI, observer, flags,
1069706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings                    installerPackageName, verificationParams, encryptionParams);
1070706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        } catch (RemoteException e) {
1071706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings            // Should never happen!
1072706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings        }
1073706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings    }
1074706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings
1075706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings    @Override
10767767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    public int installExistingPackage(String packageName)
10777767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            throws NameNotFoundException {
10787767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        try {
107967df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani            int res = mPM.installExistingPackageAsUser(packageName, UserHandle.myUserId());
10807767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            if (res == INSTALL_FAILED_INVALID_URI) {
10817767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn                throw new NameNotFoundException("Package " + packageName + " doesn't exist");
10827767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            }
10837767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            return res;
10847767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        } catch (RemoteException e) {
10857767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            // Should never happen!
10867767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn            throw new NameNotFoundException("Package " + packageName + " doesn't exist");
10877767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn        }
10887767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    }
10897767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn
10907767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn    @Override
10913a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root    public void verifyPendingInstall(int id, int response) {
10925ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
10933a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root            mPM.verifyPendingInstall(id, response);
10945ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
10955ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
10965ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
10975ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
10985ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
10995ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
1100d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    public void extendVerificationTimeout(int id, int verificationCodeAtTimeout,
1101d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            long millisecondsToDelay) {
1102d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        try {
1103d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            mPM.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay);
1104d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        } catch (RemoteException e) {
1105d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings            // Should never happen!
1106d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings        }
1107d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    }
1108d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings
1109d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings    @Override
1110880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    public void setInstallerPackageName(String targetPackage,
1111880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            String installerPackageName) {
1112880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        try {
1113880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            mPM.setInstallerPackageName(targetPackage, installerPackageName);
1114880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        } catch (RemoteException e) {
1115880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            // Should never happen!
1116880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        }
1117880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    }
1118880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn
1119880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    @Override
1120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void movePackage(String packageName, IPackageMoveObserver observer, int flags) {
1121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.movePackage(packageName, observer, flags);
1123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getInstallerPackageName(String packageName) {
1130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getInstallerPackageName(packageName);
1132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
1140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
114167df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani            mPM.deletePackageAsUser(packageName, observer, UserHandle.myUserId(), flags);
1142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearApplicationUserData(String packageName,
1148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         IPackageDataObserver observer) {
1149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1150ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.clearApplicationUserData(packageName, observer, mContext.getUserId());
1151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deleteApplicationCacheFiles(String packageName,
1157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                            IPackageDataObserver observer) {
1158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deleteApplicationCacheFiles(packageName, observer);
1160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorageAndNotify(long idealStorageSize, IPackageDataObserver observer) {
1166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorageAndNotify(idealStorageSize, observer);
1168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorage(long freeStorageSize, IntentSender pi) {
1175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorage(freeStorageSize, pi);
1177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
11830c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn    public void getPackageSizeInfo(String packageName, int userHandle,
11840c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            IPackageStatsObserver observer) {
1185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
11860c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn            mPM.getPackageSizeInfo(packageName, userHandle, observer);
1187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPackageToPreferred(String packageName) {
1193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.addPackageToPreferred(packageName);
1195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1200390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1201390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePackageFromPreferred(String packageName) {
1202390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1203390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePackageFromPreferred(packageName);
1204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getPreferredPackages(int flags) {
1211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredPackages(flags);
1213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return new ArrayList<PackageInfo>();
1217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPreferredActivity(IntentFilter filter,
1221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                     int match, ComponentName[] set, ComponentName activity) {
1222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1223ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.addPreferredActivity(filter, match, set, activity, mContext.getUserId());
1224a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        } catch (RemoteException e) {
1225a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            // Should never happen!
1226a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        }
1227a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    }
1228a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani
1229a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    @Override
1230a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    public void addPreferredActivity(IntentFilter filter, int match,
1231a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            ComponentName[] set, ComponentName activity, int userId) {
1232a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        try {
1233a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            mPM.addPreferredActivity(filter, match, set, activity, userId);
1234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void replacePreferredActivity(IntentFilter filter,
1241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         int match, ComponentName[] set, ComponentName activity) {
1242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.replacePreferredActivity(filter, match, set, activity);
1244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearPackagePreferredActivities(String packageName) {
1251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.clearPackagePreferredActivities(packageName);
1253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getPreferredActivities(List<IntentFilter> outFilters,
1260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                      List<ComponentName> outActivities, String packageName) {
1261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredActivities(outFilters, outActivities, packageName);
1263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return 0;
1267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1270a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate    public ComponentName getHomeActivities(List<ResolveInfo> outActivities) {
1271a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate        try {
1272a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate            return mPM.getHomeActivities(outActivities);
1273a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate        } catch (RemoteException e) {
1274a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate            // Should never happen!
1275a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate        }
1276a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate        return null;
1277a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate    }
1278a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate
1279a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate    @Override
1280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setComponentEnabledSetting(ComponentName componentName,
1281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                           int newState, int flags) {
1282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1283ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            mPM.setComponentEnabledSetting(componentName, newState, flags, mContext.getUserId());
1284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1288390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getComponentEnabledSetting(ComponentName componentName) {
1291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1292ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mPM.getComponentEnabledSetting(componentName, mContext.getUserId());
1293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1297390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1298390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setApplicationEnabledSetting(String packageName,
1301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                             int newState, int flags) {
1302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
13033fa3c28a356108a6558b6b54a0b10e1a5cc4f1b6Dianne Hackborn            mPM.setApplicationEnabledSetting(packageName, newState, flags,
130495d785346b4dae808a2d8f77356175e55a572d96Dianne Hackborn                    mContext.getUserId(), mContext.getOpPackageName());
1305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getApplicationEnabledSetting(String packageName) {
1312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1313ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey            return mPM.getApplicationEnabledSetting(packageName, mContext.getUserId());
1314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1320655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani    @Override
1321655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani    public boolean setApplicationBlockedSettingAsUser(String packageName, boolean blocked,
1322655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani            UserHandle user) {
1323655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        try {
1324655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani            return mPM.setApplicationBlockedSettingAsUser(packageName, blocked,
1325655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani                    user.getIdentifier());
1326655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        } catch (RemoteException re) {
1327655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani            // Should never happen!
1328655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        }
1329655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        return false;
1330655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani    }
1331655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani
1332655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani    @Override
1333655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani    public boolean getApplicationBlockedSettingAsUser(String packageName, UserHandle user) {
1334655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        try {
1335655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani            return mPM.getApplicationBlockedSettingAsUser(packageName, user.getIdentifier());
1336655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        } catch (RemoteException re) {
1337655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani            // Should never happen!
1338655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        }
1339655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani        return false;
1340655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani    }
1341655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani
13420aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    /**
13430aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     * @hide
13440aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     */
13450aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    @Override
13460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public VerifierDeviceIdentity getVerifierDeviceIdentity() {
13470aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
13480aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            return mPM.getVerifierDeviceIdentity();
13490aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (RemoteException e) {
13500aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // Should never happen!
13510aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
13520aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        return null;
13530aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
13540aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1355390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final ContextImpl mContext;
1356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final IPackageManager mPM;
1357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final Object sSync = new Object();
1359add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn    private static ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache
1360add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn            = new ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>>();
1361add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn    private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache
1362add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn            = new ArrayMap<ResourceName, WeakReference<CharSequence>>();
1363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick}
1364