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