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