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