ApplicationPackageManager.java revision a3f133afe885f9e005dfc0584cb7b3b90f75f665
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;
45258848d2ae04f447ff1c18023fa76b139fcc0862Amith Yamasaniimport android.content.pm.UserInfo;
460aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport android.content.pm.VerifierDeviceIdentity;
47390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.Resources;
48390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.XmlResourceParser;
49390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.graphics.drawable.Drawable;
50390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.net.Uri;
51390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.Process;
52390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.RemoteException;
53f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle;
54390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log;
55390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
56390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference;
57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList;
58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.HashMap;
59390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.Iterator;
60390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List;
61390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
62390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*package*/
63390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickfinal class ApplicationPackageManager extends PackageManager {
64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final String TAG = "ApplicationPackageManager";
65390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG = false;
66390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final static boolean DEBUG_ICONS = false;
67390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
68390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
69390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PackageInfo getPackageInfo(String packageName, int flags)
70390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
71390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
72f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            PackageInfo pi = mPM.getPackageInfo(packageName, flags, UserHandle.myUserId());
73390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
74390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
75390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
76390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
77390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
79390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
80390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
81390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
82390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
83390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
84390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] currentToCanonicalPackageNames(String[] names) {
85390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
86390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.currentToCanonicalPackageNames(names);
87390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
88390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
89390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
90390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
91390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
92390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
93390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] canonicalToCurrentPackageNames(String[] names) {
94390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
95390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.canonicalToCurrentPackageNames(names);
96390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
97390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
98390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
99390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Intent getLaunchIntentForPackage(String packageName) {
103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // First see if the package has an INFO activity; the existence of
104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // such an activity is implied to be the desired front-door for the
105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // overall package (such as if it has multiple launcher entries).
106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intentToResolve = new Intent(Intent.ACTION_MAIN);
107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.addCategory(Intent.CATEGORY_INFO);
108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intentToResolve.setPackage(packageName);
109194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0);
110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        // Otherwise, try to find a main launcher activity.
112194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // reuse the intent instance
114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.removeCategory(Intent.CATEGORY_INFO);
115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER);
116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intentToResolve.setPackage(packageName);
117194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn            ris = queryIntentActivities(intentToResolve, 0);
118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
119194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        if (ris == null || ris.size() <= 0) {
120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return null;
121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Intent intent = new Intent(intentToResolve);
123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
124194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn        intent.setClassName(ris.get(0).activityInfo.packageName,
125194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn                ris.get(0).activityInfo.name);
126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return intent;
127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int[] getPackageGids(String packageName)
131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int[] gids = mPM.getPackageGids(packageName);
134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (gids == null || gids.length > 0) {
135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return gids;
136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionInfo getPermissionInfo(String name, int flags)
146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionInfo pi = mPM.getPermissionInfo(name, flags);
149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionInfo> queryPermissionsByGroup(String group, int flags)
161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags);
164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(group);
172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public PermissionGroupInfo getPermissionGroupInfo(String name,
176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                      int flags) throws NameNotFoundException {
177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags);
179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pgi != null) {
180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pgi;
181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(name);
187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getAllPermissionGroups(flags);
193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ApplicationInfo getApplicationInfo(String packageName, int flags)
200390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
201390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
202f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, UserHandle.myUserId());
203390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(packageName);
211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getActivityInfo(ComponentName className, int flags)
215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
217f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ActivityInfo ai = mPM.getActivityInfo(className, flags, UserHandle.myUserId());
218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ActivityInfo getReceiverInfo(ComponentName className, int flags)
230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
232f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ActivityInfo ai = mPM.getReceiverInfo(className, flags, UserHandle.myUserId());
233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ai != null) {
234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ai;
235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ServiceInfo getServiceInfo(ComponentName className, int flags)
245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
247f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ServiceInfo si = mPM.getServiceInfo(className, flags, UserHandle.myUserId());
248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (si != null) {
249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return si;
250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo getProviderInfo(ComponentName className, int flags)
260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
262f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            ProviderInfo pi = mPM.getProviderInfo(className, flags, UserHandle.myUserId());
263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (pi != null) {
264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return pi;
265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getSystemSharedLibraryNames() {
275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemSharedLibraryNames();
277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
279390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public FeatureInfo[] getSystemAvailableFeatures() {
284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getSystemAvailableFeatures();
286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
288390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
292390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean hasSystemFeature(String name) {
293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.hasSystemFeature(name);
295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
297390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
298390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkPermission(String permName, String pkgName) {
302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkPermission(permName, pkgName);
304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermission(PermissionInfo info) {
311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermission(info);
313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public boolean addPermissionAsync(PermissionInfo info) {
320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
321390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.addPermissionAsync(info);
322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePermission(String name) {
329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePermission(name);
331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
335390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
336390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
337e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void grantPermission(String packageName, String permissionName) {
338e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
339e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.grantPermission(packageName, permissionName);
340e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
341e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
342e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
343e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
344e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
345e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
346e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    public void revokePermission(String packageName, String permissionName) {
347e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        try {
348e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            mPM.revokePermission(packageName, permissionName);
349e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        } catch (RemoteException e) {
350e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn            throw new RuntimeException("Package manager has died", e);
351e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn        }
352e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    }
353e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn
354e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn    @Override
355390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(String pkg1, String pkg2) {
356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkSignatures(pkg1, pkg2);
358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
361390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
362390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
364390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int checkSignatures(int uid1, int uid2) {
365390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
366390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.checkUidSignatures(uid1, uid2);
367390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
368390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
369390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
370390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
371390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String[] getPackagesForUid(int uid) {
374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPackagesForUid(uid);
376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getNameForUid(int uid) {
383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getNameForUid(uid);
385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
388390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getUidForSharedUser(String sharedUserName)
392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int uid = mPM.getUidForSharedUser(sharedUserName);
395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if(uid != -1) {
396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return uid;
397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("No shared userid for user:"+sharedUserName);
402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
404e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getInstalledPackages(int flags) {
407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
408e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            final List<PackageInfo> packageInfos = new ArrayList<PackageInfo>();
409e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            PackageInfo lastItem = null;
410e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ParceledListSlice<PackageInfo> slice;
411e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
412e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            do {
413e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                final String lastKey = lastItem != null ? lastItem.packageName : null;
414e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                slice = mPM.getInstalledPackages(flags, lastKey);
415e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                lastItem = slice.populateList(packageInfos, PackageInfo.CREATOR);
416e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            } while (!slice.isLastSlice());
417e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
418e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            return packageInfos;
419390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
420390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
421390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
424e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root    @SuppressWarnings("unchecked")
425390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
426390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ApplicationInfo> getInstalledApplications(int flags) {
427f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn        int userId = UserHandle.getUserId(Process.myUid());
428390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
429e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            final List<ApplicationInfo> applicationInfos = new ArrayList<ApplicationInfo>();
430e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ApplicationInfo lastItem = null;
431e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            ParceledListSlice<ApplicationInfo> slice;
432e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
433e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            do {
434e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                final String lastKey = lastItem != null ? lastItem.packageName : null;
435483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                slice = mPM.getInstalledApplications(flags, lastKey, userId);
436e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root                lastItem = slice.populateList(applicationInfos, ApplicationInfo.CREATOR);
437e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            } while (!slice.isLastSlice());
438e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root
439e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root            return applicationInfos;
440390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
441390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
442390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
443390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
444390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
445390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
446390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveActivity(Intent intent, int flags) {
447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
448390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveIntent(
449390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
451f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                    flags, UserHandle.myUserId());
452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
453390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
454390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
455390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
456390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
457390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
458390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivities(Intent intent,
459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                   int flags) {
460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivities(
462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
463390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
464483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
465f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                UserHandle.myUserId());
466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentActivityOptions(
473390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName caller, Intent[] specifics, Intent intent,
474390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        int flags) {
475390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final ContentResolver resolver = mContext.getContentResolver();
476390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
477390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String[] specificTypes = null;
478390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (specifics != null) {
479390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            final int N = specifics.length;
480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (int i=0; i<N; i++) {
481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Intent sp = specifics[i];
482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (sp != null) {
483390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    String t = sp.resolveTypeIfNeeded(resolver);
484390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (t != null) {
485390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        if (specificTypes == null) {
486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            specificTypes = new String[N];
487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        specificTypes[i] = t;
489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentActivityOptions(caller, specifics,
496390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                  specificTypes, intent, intent.resolveTypeIfNeeded(resolver),
497f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                                                  flags, UserHandle.myUserId());
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> queryBroadcastReceivers(Intent intent, int flags) {
505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentReceivers(
507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
509483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
510f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                UserHandle.myUserId());
511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
516390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
517390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ResolveInfo resolveService(Intent intent, int flags) {
518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
519390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.resolveService(
520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
522483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
523f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                UserHandle.myUserId());
524390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
525390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
526390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
527390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
529390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
530390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ResolveInfo> queryIntentServices(Intent intent, int flags) {
531390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
532390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryIntentServices(
533390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent,
534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                intent.resolveTypeIfNeeded(mContext.getContentResolver()),
535483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani                flags,
536f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                UserHandle.myUserId());
537390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
538390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
539390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
540390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
541390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
542390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
543390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public ProviderInfo resolveContentProvider(String name,
544390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                               int flags) {
545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
546f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            return mPM.resolveContentProvider(name, flags, UserHandle.myUserId());
547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
548390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
550390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
552390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<ProviderInfo> queryContentProviders(String processName,
554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                                    int uid, int flags) {
555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryContentProviders(processName, uid, flags);
557390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
558390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
561390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
562390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
563390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public InstrumentationInfo getInstrumentationInfo(
564390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName className, int flags)
565390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
566390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
567390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            InstrumentationInfo ii = mPM.getInstrumentationInfo(
568390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                className, flags);
569390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (ii != null) {
570390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return ii;
571390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
572390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
573390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
574390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
575390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
576390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(className.toString());
577390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
578390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
579390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
580390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<InstrumentationInfo> queryInstrumentation(
581390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String targetPackage, int flags) {
582390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
583390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.queryInstrumentation(targetPackage, flags);
584390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
585390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
586390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
587390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
588390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
589390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDrawable(String packageName, int resid,
590390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                          ApplicationInfo appInfo) {
591390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
592390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Drawable dr = getCachedIcon(name);
593390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (dr != null) {
594390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
595390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
596390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
597390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
598390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
599390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
600390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
601390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
602390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
603390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
604390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
605390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            dr = r.getDrawable(resid);
606390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (false) {
607390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                RuntimeException e = new RuntimeException("here");
608390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                e.fillInStackTrace();
609390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resid)
610390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + " from package " + packageName
611390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ": app scale=" + r.getCompatibilityInfo().applicationScale
612390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      + ", caller scale=" + mContext.getResources().getCompatibilityInfo().applicationScale,
613390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                      e);
614390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
615390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Getting drawable 0x"
616390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + Integer.toHexString(resid) + " from " + r
617390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + ": " + dr);
618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedIcon(name, dr);
619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return dr;
620390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
62308f16544176a04a958d403409f98cd0502bb8da3Joe Onorato        } catch (Resources.NotFoundException e) {
62408f16544176a04a958d403409f98cd0502bb8da3Joe Onorato            Log.w("PackageManager", "Failure retrieving resources for"
62508f16544176a04a958d403409f98cd0502bb8da3Joe Onorato                  + appInfo.packageName + ": " + e.getMessage());
626390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
627390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
628390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
629390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving icon 0x"
630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
634390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
635390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(ComponentName activityName)
637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
638390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadIcon(this);
639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getActivityIcon(Intent intent)
642390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityIcon(intent.getComponent());
645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
647390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
648390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadIcon(this);
651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
65339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy        throw new NameNotFoundException(intent.toUri(0));
654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
655390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
656390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getDefaultActivityIcon() {
657390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return Resources.getSystem().getDrawable(
658390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            com.android.internal.R.drawable.sym_def_app_icon);
659390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
660390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
661390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(ApplicationInfo info) {
662390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadIcon(this);
663390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
664390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
665390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Drawable getApplicationIcon(String packageName)
666390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
667390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationIcon(getApplicationInfo(packageName, 0));
668390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
669390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
670390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
671390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(ComponentName activityName)
672390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
673390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getActivityInfo(activityName, 0).loadLogo(this);
674390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
675390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
676390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
677390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getActivityLogo(Intent intent)
678390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
679390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (intent.getComponent() != null) {
680390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return getActivityLogo(intent.getComponent());
681390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
682390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
683390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResolveInfo info = resolveActivity(
684390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            intent, PackageManager.MATCH_DEFAULT_ONLY);
685390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (info != null) {
686390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return info.activityInfo.loadLogo(this);
687390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
689390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException(intent.toUri(0));
690390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
691390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
692390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
693390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(ApplicationInfo info) {
694390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLogo(this);
695390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
696390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
697390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
698390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public Drawable getApplicationLogo(String packageName)
699390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throws NameNotFoundException {
700390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getApplicationLogo(getApplicationInfo(packageName, 0));
701390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
702390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
703390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForActivity(
704390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ComponentName activityName) throws NameNotFoundException {
705390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getActivityInfo(activityName, 0).applicationInfo);
707390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
709390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
710390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ApplicationInfo app) throws NameNotFoundException {
711390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (app.packageName.equals("system")) {
712390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mContext.mMainThread.getSystemContext().getResources();
713390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
714390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        Resources r = mContext.mMainThread.getTopLevelResources(
715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            app.uid == Process.myUid() ? app.sourceDir
716756220bd1912535840388a6743830d2e59ad4964Dianne Hackborn            : app.publicSourceDir, null, mContext.mPackageInfo);
717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (r != null) {
718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r;
719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
720390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        throw new NameNotFoundException("Unable to open " + app.publicSourceDir);
721390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
723390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public Resources getResourcesForApplication(
724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        String appPackageName) throws NameNotFoundException {
725390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return getResourcesForApplication(
726390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            getApplicationInfo(appPackageName, 0));
727390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
728390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
729390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    int mCachedSafeMode = -1;
730390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override public boolean isSafeMode() {
731390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
732390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (mCachedSafeMode < 0) {
733390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                mCachedSafeMode = mPM.isSafeMode() ? 1 : 0;
734390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
735390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mCachedSafeMode != 0;
736390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
737390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            throw new RuntimeException("Package manager has died", e);
738390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
739390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
740390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
741390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    static void configurationChanged() {
742390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
743390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sIconCache.clear();
744390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.clear();
745390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
746390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
747390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
748390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    ApplicationPackageManager(ContextImpl context,
749390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                              IPackageManager pm) {
750390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mContext = context;
751390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        mPM = pm;
752390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
753390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
754390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private Drawable getCachedIcon(ResourceName name) {
755390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
75639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            WeakReference<Drawable.ConstantState> wr = sIconCache.get(name);
757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for "
758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   + name + ": " + wr);
759390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
76039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                Drawable.ConstantState state = wr.get();
76139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                if (state != null) {
76239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    if (DEBUG_ICONS) {
76339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                        Log.v(TAG, "Get cached drawable state for " + name + ": " + state);
76439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    }
76539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    // Note: It's okay here to not use the newDrawable(Resources) variant
76639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       of the API. The ConstantState comes from a drawable that was
76739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       originally created by passing the proper app Resources instance
76839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       which means the state should already contain the proper
76939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       resources specific information (like density.) See
77039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    //       BitmapDrawable.BitmapState for instance.
77139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy                    return state.newDrawable();
772390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
773390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
774390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sIconCache.remove(name);
775390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
776390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
777390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
778390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
779390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
780390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedIcon(ResourceName name, Drawable dr) {
781390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
78239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            sIconCache.put(name, new WeakReference<Drawable.ConstantState>(dr.getConstantState()));
78339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable state for " + name + ": " + dr);
784390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
785390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
786390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
78739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    static void handlePackageBroadcast(int cmd, String[] pkgList, boolean hasPkgInfo) {
788390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        boolean immediateGc = false;
789390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) {
790390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            immediateGc = true;
791390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
792390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (pkgList != null && (pkgList.length > 0)) {
793390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            boolean needCleanup = false;
794390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            for (String ssp : pkgList) {
795390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                synchronized (sSync) {
796390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (sIconCache.size() > 0) {
797390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        Iterator<ResourceName> it = sIconCache.keySet().iterator();
798390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        while (it.hasNext()) {
799390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            ResourceName nm = it.next();
800390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            if (nm.packageName.equals(ssp)) {
801390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                //Log.i(TAG, "Removing cached drawable for " + nm);
802390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                it.remove();
803390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                needCleanup = true;
804390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            }
805390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
806390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
807390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    if (sStringCache.size() > 0) {
808390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        Iterator<ResourceName> it = sStringCache.keySet().iterator();
809390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        while (it.hasNext()) {
810390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            ResourceName nm = it.next();
811390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            if (nm.packageName.equals(ssp)) {
812390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                //Log.i(TAG, "Removing cached string for " + nm);
813390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                it.remove();
814390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                needCleanup = true;
815390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                            }
816390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                        }
817390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    }
818390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
819390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
820390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (needCleanup || hasPkgInfo) {
821390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (immediateGc) {
822390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    // Schedule an immediate gc.
823390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    Runtime.getRuntime().gc();
824390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                } else {
825390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    ActivityThread.currentActivityThread().scheduleGcIdler();
826390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
827390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
828390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
829390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
830390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
831390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final class ResourceName {
832390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final String packageName;
833390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        final int iconId;
834390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
835390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(String _packageName, int _iconId) {
836390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            packageName = _packageName;
837390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            iconId = _iconId;
838390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
839390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
840390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ApplicationInfo aInfo, int _iconId) {
841390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(aInfo.packageName, _iconId);
842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
843390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
844390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ComponentInfo cInfo, int _iconId) {
845390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(cInfo.applicationInfo.packageName, _iconId);
846390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
847390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
848390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName(ResolveInfo rInfo, int _iconId) {
849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            this(rInfo.activityInfo.applicationInfo.packageName, _iconId);
850390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
851390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
852390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
853390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public boolean equals(Object o) {
854390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (this == o) return true;
855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (o == null || getClass() != o.getClass()) return false;
856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            ResourceName that = (ResourceName) o;
858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (iconId != that.iconId) return false;
860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return !(packageName != null ?
861390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                     !packageName.equals(that.packageName) : that.packageName != null);
862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
863390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
864390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
865390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
866390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public int hashCode() {
867390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            int result;
868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = packageName.hashCode();
869390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            result = 31 * result + iconId;
870390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return result;
871390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
873390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        @Override
874390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        public String toString() {
875390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return "{ResourceName " + packageName + " / " + iconId + "}";
876390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
877390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
878390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
879390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private CharSequence getCachedString(ResourceName name) {
880390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
881390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            WeakReference<CharSequence> wr = sStringCache.get(name);
882390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            if (wr != null) {   // we have the activity
883390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                CharSequence cs = wr.get();
884390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                if (cs != null) {
885390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                    return cs;
886390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                }
887390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                // our entry has been purged
888390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                sStringCache.remove(name);
889390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
890390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
891390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
892390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
893390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
894390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private void putCachedString(ResourceName name, CharSequence cs) {
895390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        synchronized (sSync) {
896390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            sStringCache.put(name, new WeakReference<CharSequence>(cs));
897390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
898390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
899390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
900390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
901390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getText(String packageName, int resid,
902390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                ApplicationInfo appInfo) {
903390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        ResourceName name = new ResourceName(packageName, resid);
904390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        CharSequence text = getCachedString(name);
905390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (text != null) {
906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
907390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
909390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
910390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
911390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
912390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
913390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
914390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
915390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
916390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
917390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            text = r.getText(resid);
918390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            putCachedString(name, text);
919390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return text;
920390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
921390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving resources for"
922390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
924390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
926390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving text 0x"
927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
928390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
930390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
931390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
932390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
933390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public XmlResourceParser getXml(String packageName, int resid,
935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                    ApplicationInfo appInfo) {
936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        if (appInfo == null) {
937390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            try {
938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                appInfo = getApplicationInfo(packageName, 0);
939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            } catch (NameNotFoundException e) {
940390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                return null;
941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            }
942390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
943390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
944390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Resources r = getResourcesForApplication(appInfo);
945390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return r.getXml(resid);
946390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RuntimeException e) {
947390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // If an exception was thrown, fall through to return
948390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // default icon.
949390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            Log.w("PackageManager", "Failure retrieving xml 0x"
950390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + Integer.toHexString(resid) + " in package "
951390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + packageName, e);
952390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (NameNotFoundException e) {
9533fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert            Log.w("PackageManager", "Failure retrieving resources for "
954390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                  + appInfo.packageName);
955390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
956390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
957390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
958390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
959390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
960390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public CharSequence getApplicationLabel(ApplicationInfo info) {
961390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return info.loadLabel(this);
962390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
963390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
964390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
965390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,
966390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                               String installerPackageName) {
967390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.installPackage(packageURI, observer, flags, installerPackageName);
969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
972390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
974390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
9755ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
9765ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            int flags, String installerPackageName, Uri verificationURI,
977e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
9785ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
9795ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
980e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings                    verificationURI, manifestDigest, encryptionParams);
9815ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
9825ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
9835ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
9845ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
9855ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
9865ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
9873a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root    public void verifyPendingInstall(int id, int response) {
9885ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        try {
9893a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root            mPM.verifyPendingInstall(id, response);
9905ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        } catch (RemoteException e) {
9915ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root            // Should never happen!
9925ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root        }
9935ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    }
9945ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root
9955ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root    @Override
996880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    public void setInstallerPackageName(String targetPackage,
997880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            String installerPackageName) {
998880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        try {
999880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            mPM.setInstallerPackageName(targetPackage, installerPackageName);
1000880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        } catch (RemoteException e) {
1001880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn            // Should never happen!
1002880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn        }
1003880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    }
1004880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn
1005880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn    @Override
1006390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void movePackage(String packageName, IPackageMoveObserver observer, int flags) {
1007390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1008390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.movePackage(packageName, observer, flags);
1009390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1010390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1011390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public String getInstallerPackageName(String packageName) {
1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getInstallerPackageName(packageName);
1018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1019390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1020390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1021390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return null;
1022390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1023390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1024390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1025390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
1026390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1027390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deletePackage(packageName, observer, flags);
1028390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1029390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1030390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1031390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1032390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1033390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearApplicationUserData(String packageName,
1034390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         IPackageDataObserver observer) {
1035390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1036f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            mPM.clearApplicationUserData(packageName, observer, UserHandle.myUserId());
1037390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1038390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1039390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1040390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1041390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1042390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void deleteApplicationCacheFiles(String packageName,
1043390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                            IPackageDataObserver observer) {
1044390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1045390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.deleteApplicationCacheFiles(packageName, observer);
1046390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1047390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1048390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1049390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1050390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1051390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorageAndNotify(long idealStorageSize, IPackageDataObserver observer) {
1052390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1053390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorageAndNotify(idealStorageSize, observer);
1054390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1055390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1056390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1057390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1058390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1059390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1060390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void freeStorage(long freeStorageSize, IntentSender pi) {
1061390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1062390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.freeStorage(freeStorageSize, pi);
1063390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1064390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1065390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1066390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1067390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1068390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1069390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void getPackageSizeInfo(String packageName,
1070390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                   IPackageStatsObserver observer) {
1071390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1072390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.getPackageSizeInfo(packageName, observer);
1073390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1074390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1075390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1076390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1077390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1078390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPackageToPreferred(String packageName) {
1079390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1080390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.addPackageToPreferred(packageName);
1081390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1082390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1083390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1084390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1085390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1086390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1087390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void removePackageFromPreferred(String packageName) {
1088390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1089390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.removePackageFromPreferred(packageName);
1090390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1091390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1092390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1093390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1094390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1095390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1096390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public List<PackageInfo> getPreferredPackages(int flags) {
1097390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredPackages(flags);
1099390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return new ArrayList<PackageInfo>();
1103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void addPreferredActivity(IntentFilter filter,
1107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                     int match, ComponentName[] set, ComponentName activity) {
1108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1109a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            mPM.addPreferredActivity(filter, match, set, activity, UserHandle.myUserId());
1110a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        } catch (RemoteException e) {
1111a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            // Should never happen!
1112a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        }
1113a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    }
1114a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani
1115a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    @Override
1116a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    public void addPreferredActivity(IntentFilter filter, int match,
1117a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            ComponentName[] set, ComponentName activity, int userId) {
1118a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani        try {
1119a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            mPM.addPreferredActivity(filter, match, set, activity, userId);
1120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void replacePreferredActivity(IntentFilter filter,
1127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                         int match, ComponentName[] set, ComponentName activity) {
1128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.replacePreferredActivity(filter, match, set, activity);
1130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void clearPackagePreferredActivities(String packageName) {
1137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            mPM.clearPackagePreferredActivities(packageName);
1139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getPreferredActivities(List<IntentFilter> outFilters,
1146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                      List<ComponentName> outActivities, String packageName) {
1147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            return mPM.getPreferredActivities(outFilters, outActivities, packageName);
1149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return 0;
1153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setComponentEnabledSetting(ComponentName componentName,
1157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                           int newState, int flags) {
1158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1159f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            mPM.setComponentEnabledSetting(componentName, newState, flags, UserHandle.myUserId());
1160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getComponentEnabledSetting(ComponentName componentName) {
1167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1168f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            return mPM.getComponentEnabledSetting(componentName, UserHandle.myUserId());
1169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public void setApplicationEnabledSetting(String packageName,
1177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick                                             int newState, int flags) {
1178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1179f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            mPM.setApplicationEnabledSetting(packageName, newState, flags, UserHandle.myUserId());
1180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    @Override
1186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    public int getApplicationEnabledSetting(String packageName) {
1187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        try {
1188f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn            return mPM.getApplicationEnabledSetting(packageName, UserHandle.myUserId());
1189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        } catch (RemoteException e) {
1190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick            // Should never happen!
1191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        }
1192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick        return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
1193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    }
1194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
11950aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    /**
11960aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     * @hide
11970aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root     */
11980aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    @Override
11990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    public VerifierDeviceIdentity getVerifierDeviceIdentity() {
12000aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        try {
12010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            return mPM.getVerifierDeviceIdentity();
12020aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        } catch (RemoteException e) {
12030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root            // Should never happen!
12040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        }
12050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root        return null;
12060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root    }
12070aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root
1208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final ContextImpl mContext;
1209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private final IPackageManager mPM;
1210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick
1211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick    private static final Object sSync = new Object();
121239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    private static HashMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache
121339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            = new HashMap<ResourceName, WeakReference<Drawable.ConstantState>>();
121439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy    private static HashMap<ResourceName, WeakReference<CharSequence>> sStringCache
121539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy            = new HashMap<ResourceName, WeakReference<CharSequence>>();
1216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick}
1217