ApplicationPackageManager.java revision 880119bf43d738ca632b5d3861eb52d655c1c0fc
1390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/* 2390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Copyright (C) 2010 The Android Open Source Project 3390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * 4390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 5390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * you may not use this file except in compliance with the License. 6390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * You may obtain a copy of the License at 7390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * 8390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * http://www.apache.org/licenses/LICENSE-2.0 9390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * 10390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Unless required by applicable law or agreed to in writing, software 11390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * distributed under the License is distributed on an "AS IS" BASIS, 12390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * See the License for the specific language governing permissions and 14390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * limitations under the License. 15390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick */ 16390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 17390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickpackage android.app; 18390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 19390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ComponentName; 20390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ContentResolver; 21390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.Intent; 22390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentFilter; 23390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentSender; 24390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ActivityInfo; 25390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ApplicationInfo; 26390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ComponentInfo; 27390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.FeatureInfo; 28390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDataObserver; 29390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDeleteObserver; 30390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageInstallObserver; 31390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageManager; 32390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageMoveObserver; 33390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageStatsObserver; 34390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.InstrumentationInfo; 35390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageInfo; 36390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageManager.NameNotFoundException; 37390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageManager; 38390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionGroupInfo; 39390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionInfo; 40390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ProviderInfo; 41390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ResolveInfo; 42390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ServiceInfo; 43390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.Resources; 44390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.XmlResourceParser; 45390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.graphics.drawable.Drawable; 46390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.net.Uri; 47390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.Process; 48390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.RemoteException; 49390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log; 50390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 51390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference; 52390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList; 53390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.HashMap; 54390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.Iterator; 55390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List; 56390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*package*/ 58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickfinal class ApplicationPackageManager extends PackageManager { 59390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final String TAG = "ApplicationPackageManager"; 60390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final static boolean DEBUG = false; 61390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final static boolean DEBUG_ICONS = false; 62390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 63390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PackageInfo getPackageInfo(String packageName, int flags) 65390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 66390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 67390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PackageInfo pi = mPM.getPackageInfo(packageName, flags); 68390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 69390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 70390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 71390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 72390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 73390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 74390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 75390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 76390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 77390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 79390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] currentToCanonicalPackageNames(String[] names) { 80390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 81390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.currentToCanonicalPackageNames(names); 82390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 83390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 84390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 85390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 86390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 87390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 88390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] canonicalToCurrentPackageNames(String[] names) { 89390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 90390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.canonicalToCurrentPackageNames(names); 91390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 92390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 93390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 94390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 95390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 96390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 97390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Intent getLaunchIntentForPackage(String packageName) { 98390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // First see if the package has an INFO activity; the existence of 99390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // such an activity is implied to be the desired front-door for the 100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // overall package (such as if it has multiple launcher entries). 101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.addCategory(Intent.CATEGORY_INFO); 103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.setPackage(packageName); 104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo resolveInfo = resolveActivity(intentToResolve, 0); 105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Otherwise, try to find a main launcher activity. 107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (resolveInfo == null) { 108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // reuse the intent instance 109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.removeCategory(Intent.CATEGORY_INFO); 110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); 111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.setPackage(packageName); 112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick resolveInfo = resolveActivity(intentToResolve, 0); 113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (resolveInfo == null) { 115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent intent = new Intent(intentToResolve); 118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.setClassName(resolveInfo.activityInfo.applicationInfo.packageName, 119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick resolveInfo.activityInfo.name); 120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return intent; 122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int[] getPackageGids(String packageName) 126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int[] gids = mPM.getPackageGids(packageName); 129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (gids == null || gids.length > 0) { 130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return gids; 131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PermissionInfo getPermissionInfo(String name, int flags) 141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PermissionInfo pi = mPM.getPermissionInfo(name, flags); 144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(name); 152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PermissionInfo> queryPermissionsByGroup(String group, int flags) 156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags); 159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(group); 167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PermissionGroupInfo getPermissionGroupInfo(String name, 171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) throws NameNotFoundException { 172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags); 174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pgi != null) { 175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pgi; 176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(name); 182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PermissionGroupInfo> getAllPermissionGroups(int flags) { 186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getAllPermissionGroups(flags); 188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ApplicationInfo getApplicationInfo(String packageName, int flags) 195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags); 198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 200390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 201390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 202390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 203390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 207390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 208390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 209390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ActivityInfo getActivityInfo(ComponentName className, int flags) 210390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ActivityInfo ai = mPM.getActivityInfo(className, flags); 213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ActivityInfo getReceiverInfo(ComponentName className, int flags) 225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ActivityInfo ai = mPM.getReceiverInfo(className, flags); 228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ServiceInfo getServiceInfo(ComponentName className, int flags) 240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ServiceInfo si = mPM.getServiceInfo(className, flags); 243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (si != null) { 244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return si; 245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ProviderInfo getProviderInfo(ComponentName className, int flags) 255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ProviderInfo pi = mPM.getProviderInfo(className, flags); 258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] getSystemSharedLibraryNames() { 270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getSystemSharedLibraryNames(); 272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public FeatureInfo[] getSystemAvailableFeatures() { 279390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getSystemAvailableFeatures(); 281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 284390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 285390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean hasSystemFeature(String name) { 288390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.hasSystemFeature(name); 290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 292390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 295390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 296390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkPermission(String permName, String pkgName) { 297390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 298390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkPermission(permName, pkgName); 299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean addPermission(PermissionInfo info) { 306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.addPermission(info); 308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean addPermissionAsync(PermissionInfo info) { 315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.addPermissionAsync(info); 317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 321390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void removePermission(String name) { 324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.removePermission(name); 326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkSignatures(String pkg1, String pkg2) { 333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkSignatures(pkg1, pkg2); 335390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 336390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 337390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 338390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 339390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 340390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 341390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkSignatures(int uid1, int uid2) { 342390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 343390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkUidSignatures(uid1, uid2); 344390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 345390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 346390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 347390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 348390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 349390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 350390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] getPackagesForUid(int uid) { 351390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 352390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPackagesForUid(uid); 353390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 354390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 355390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String getNameForUid(int uid) { 360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 361390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getNameForUid(uid); 362390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 364390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 365390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 366390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 367390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 368390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getUidForSharedUser(String sharedUserName) 369390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 370390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 371390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int uid = mPM.getUidForSharedUser(sharedUserName); 372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if(uid != -1) { 373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return uid; 374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException("No shared userid for user:"+sharedUserName); 379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PackageInfo> getInstalledPackages(int flags) { 383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getInstalledPackages(flags); 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 List<ApplicationInfo> getInstalledApplications(int flags) { 392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getInstalledApplications(flags); 394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ResolveInfo resolveActivity(Intent intent, int flags) { 401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveIntent( 403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick flags); 406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 408390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 409390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 410390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 411390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 412390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentActivities(Intent intent, 413390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 415390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentActivities( 416390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 417390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 418390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick flags); 419390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 420390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 421390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 424390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 425390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentActivityOptions( 426390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName caller, Intent[] specifics, Intent intent, 427390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 428390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final ContentResolver resolver = mContext.getContentResolver(); 429390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 430390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String[] specificTypes = null; 431390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (specifics != null) { 432390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final int N = specifics.length; 433390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick for (int i=0; i<N; i++) { 434390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent sp = specifics[i]; 435390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (sp != null) { 436390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String t = sp.resolveTypeIfNeeded(resolver); 437390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (t != null) { 438390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (specificTypes == null) { 439390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes = new String[N]; 440390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 441390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes[i] = t; 442390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 443390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 444390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 445390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 446390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 448390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentActivityOptions(caller, specifics, 449390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes, intent, intent.resolveTypeIfNeeded(resolver), 450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick flags); 451390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 453390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 454390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 455390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 456390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 457390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) { 458390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentReceivers( 460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick flags); 463390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ResolveInfo resolveService(Intent intent, int flags) { 470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveService( 472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 473390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 474390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick flags); 475390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 476390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 477390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 478390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 479390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentServices(Intent intent, int flags) { 482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 483390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentServices( 484390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 485390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick flags); 487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ProviderInfo resolveContentProvider(String name, 494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 496390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveContentProvider(name, flags); 497390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 498390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 499390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ProviderInfo> queryContentProviders(String processName, 504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int uid, int flags) { 505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryContentProviders(processName, uid, flags); 507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 510390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public InstrumentationInfo getInstrumentationInfo( 514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName className, int flags) 515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 516390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 517390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick InstrumentationInfo ii = mPM.getInstrumentationInfo( 518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick className, flags); 519390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ii != null) { 520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ii; 521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 522390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 523390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 524390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 525390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 526390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 527390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 529390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 530390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<InstrumentationInfo> queryInstrumentation( 531390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String targetPackage, int flags) { 532390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 533390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryInstrumentation(targetPackage, flags); 534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 535390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 536390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 537390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 538390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 539390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getDrawable(String packageName, int resid, 540390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 541390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName name = new ResourceName(packageName, resid); 542390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Drawable dr = getCachedIcon(name); 543390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (dr != null) { 544390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return dr; 545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 548390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick appInfo = getApplicationInfo(packageName, 0); 549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 550390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 552390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick dr = r.getDrawable(resid); 556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (false) { 557390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick RuntimeException e = new RuntimeException("here"); 558390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick e.fillInStackTrace(); 559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resid) 560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + " from package " + packageName 561390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + ": app scale=" + r.getCompatibilityInfo().applicationScale 562390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + ", caller scale=" + mContext.getResources().getCompatibilityInfo().applicationScale, 563390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick e); 564390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 565390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Getting drawable 0x" 566390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " from " + r 567390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + ": " + dr); 568390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick putCachedIcon(name, dr); 569390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return dr; 570390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 571390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving resources for" 572390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 573390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 574390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 575390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 576390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving icon 0x" 577390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 578390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 579390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 580390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 581390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 582390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 583390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getActivityIcon(ComponentName activityName) 584390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 585390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityInfo(activityName, 0).loadIcon(this); 586390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 587390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 588390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getActivityIcon(Intent intent) 589390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 590390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (intent.getComponent() != null) { 591390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityIcon(intent.getComponent()); 592390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 593390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 594390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo info = resolveActivity( 595390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, PackageManager.MATCH_DEFAULT_ONLY); 596390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (info != null) { 597390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.activityInfo.loadIcon(this); 598390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 599390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 600390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(intent.toURI()); 601390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 602390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 603390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getDefaultActivityIcon() { 604390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return Resources.getSystem().getDrawable( 605390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick com.android.internal.R.drawable.sym_def_app_icon); 606390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 607390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 608390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getApplicationIcon(ApplicationInfo info) { 609390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadIcon(this); 610390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 611390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 612390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getApplicationIcon(String packageName) 613390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 614390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getApplicationIcon(getApplicationInfo(packageName, 0)); 615390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 616390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 617390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getActivityLogo(ComponentName activityName) 619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 620390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityInfo(activityName, 0).loadLogo(this); 621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 623390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 624390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getActivityLogo(Intent intent) 625390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 626390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (intent.getComponent() != null) { 627390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityLogo(intent.getComponent()); 628390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 629390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo info = resolveActivity( 631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, PackageManager.MATCH_DEFAULT_ONLY); 632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (info != null) { 633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.activityInfo.loadLogo(this); 634390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 635390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(intent.toUri(0)); 637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 638390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getApplicationLogo(ApplicationInfo info) { 641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadLogo(this); 642390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getApplicationLogo(String packageName) 646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 647390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getApplicationLogo(getApplicationInfo(packageName, 0)); 648390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Resources getResourcesForActivity( 651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName activityName) throws NameNotFoundException { 652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getResourcesForApplication( 653390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick getActivityInfo(activityName, 0).applicationInfo); 654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 655390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 656390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Resources getResourcesForApplication( 657390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo app) throws NameNotFoundException { 658390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (app.packageName.equals("system")) { 659390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mContext.mMainThread.getSystemContext().getResources(); 660390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 661390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = mContext.mMainThread.getTopLevelResources( 662390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick app.uid == Process.myUid() ? app.sourceDir 663390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick : app.publicSourceDir, mContext.mPackageInfo); 664390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (r != null) { 665390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return r; 666390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 667390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException("Unable to open " + app.publicSourceDir); 668390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 669390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 670390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Resources getResourcesForApplication( 671390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String appPackageName) throws NameNotFoundException { 672390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getResourcesForApplication( 673390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick getApplicationInfo(appPackageName, 0)); 674390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 675390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 676390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int mCachedSafeMode = -1; 677390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public boolean isSafeMode() { 678390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 679390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (mCachedSafeMode < 0) { 680390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mCachedSafeMode = mPM.isSafeMode() ? 1 : 0; 681390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 682390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mCachedSafeMode != 0; 683390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 684390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 685390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 686390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 687390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick static void configurationChanged() { 689390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 690390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.clear(); 691390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.clear(); 692390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 693390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 694390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 695390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationPackageManager(ContextImpl context, 696390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageManager pm) { 697390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mContext = context; 698390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM = pm; 699390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 700390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 701390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private Drawable getCachedIcon(ResourceName name) { 702390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 703390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick WeakReference<Drawable> wr = sIconCache.get(name); 704390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for " 705390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + name + ": " + wr); 706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (wr != null) { // we have the activity 707390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Drawable dr = wr.get(); 708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (dr != null) { 709390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Get cached drawable for " 710390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + name + ": " + dr); 711390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return dr; 712390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 713390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // our entry has been purged 714390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.remove(name); 715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 716390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 720390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private void putCachedIcon(ResourceName name, Drawable dr) { 721390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.put(name, new WeakReference<Drawable>(dr)); 723390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable for " 724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + name + ": " + dr); 725390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 726390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 727390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 728390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick static final void handlePackageBroadcast(int cmd, String[] pkgList, 729390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean hasPkgInfo) { 730390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean immediateGc = false; 731390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) { 732390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick immediateGc = true; 733390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 734390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pkgList != null && (pkgList.length > 0)) { 735390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean needCleanup = false; 736390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick for (String ssp : pkgList) { 737390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 738390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (sIconCache.size() > 0) { 739390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Iterator<ResourceName> it = sIconCache.keySet().iterator(); 740390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick while (it.hasNext()) { 741390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName nm = it.next(); 742390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (nm.packageName.equals(ssp)) { 743390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick //Log.i(TAG, "Removing cached drawable for " + nm); 744390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick it.remove(); 745390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick needCleanup = true; 746390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 747390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 748390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 749390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (sStringCache.size() > 0) { 750390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Iterator<ResourceName> it = sStringCache.keySet().iterator(); 751390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick while (it.hasNext()) { 752390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName nm = it.next(); 753390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (nm.packageName.equals(ssp)) { 754390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick //Log.i(TAG, "Removing cached string for " + nm); 755390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick it.remove(); 756390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick needCleanup = true; 757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 759390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 760390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 761390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 762390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (needCleanup || hasPkgInfo) { 763390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (immediateGc) { 764390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Schedule an immediate gc. 765390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Runtime.getRuntime().gc(); 766390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } else { 767390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ActivityThread.currentActivityThread().scheduleGcIdler(); 768390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 769390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 770390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 771390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 772390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 773390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final class ResourceName { 774390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final String packageName; 775390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final int iconId; 776390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 777390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(String _packageName, int _iconId) { 778390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick packageName = _packageName; 779390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick iconId = _iconId; 780390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 781390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 782390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ApplicationInfo aInfo, int _iconId) { 783390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(aInfo.packageName, _iconId); 784390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 785390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 786390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ComponentInfo cInfo, int _iconId) { 787390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(cInfo.applicationInfo.packageName, _iconId); 788390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 789390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 790390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ResolveInfo rInfo, int _iconId) { 791390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(rInfo.activityInfo.applicationInfo.packageName, _iconId); 792390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 793390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 794390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 795390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean equals(Object o) { 796390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (this == o) return true; 797390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (o == null || getClass() != o.getClass()) return false; 798390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 799390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName that = (ResourceName) o; 800390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 801390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (iconId != that.iconId) return false; 802390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return !(packageName != null ? 803390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick !packageName.equals(that.packageName) : that.packageName != null); 804390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 805390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 806390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 807390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 808390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int hashCode() { 809390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int result; 810390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick result = packageName.hashCode(); 811390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick result = 31 * result + iconId; 812390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return result; 813390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 814390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 815390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 816390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String toString() { 817390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return "{ResourceName " + packageName + " / " + iconId + "}"; 818390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 819390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 820390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 821390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private CharSequence getCachedString(ResourceName name) { 822390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 823390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick WeakReference<CharSequence> wr = sStringCache.get(name); 824390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (wr != null) { // we have the activity 825390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick CharSequence cs = wr.get(); 826390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (cs != null) { 827390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return cs; 828390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 829390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // our entry has been purged 830390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.remove(name); 831390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 832390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 833390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 834390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 835390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 836390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private void putCachedString(ResourceName name, CharSequence cs) { 837390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 838390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.put(name, new WeakReference<CharSequence>(cs)); 839390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 840390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 841390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 843390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public CharSequence getText(String packageName, int resid, 844390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 845390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName name = new ResourceName(packageName, resid); 846390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick CharSequence text = getCachedString(name); 847390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (text != null) { 848390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return text; 849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 850390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 851390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 852390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick appInfo = getApplicationInfo(packageName, 0); 853390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 854390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick text = r.getText(resid); 860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick putCachedString(name, text); 861390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return text; 862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 863390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving resources for" 864390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 865390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 866390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 867390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving text 0x" 869390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 870390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 871390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 873390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 874390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 875390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 876390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public XmlResourceParser getXml(String packageName, int resid, 877390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 878390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 879390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 880390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick appInfo = getApplicationInfo(packageName, 0); 881390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 882390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 883390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 884390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 885390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 886390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 887390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return r.getXml(resid); 888390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 889390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 890390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 891390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving xml 0x" 892390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 893390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 894390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 8953fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert Log.w("PackageManager", "Failure retrieving resources for " 896390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 897390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 898390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 899390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 900390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 901390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 902390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public CharSequence getApplicationLabel(ApplicationInfo info) { 903390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadLabel(this); 904390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 905390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 907390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags, 908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String installerPackageName) { 909390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 910390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.installPackage(packageURI, observer, flags, installerPackageName); 911390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 912390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 913390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 914390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 915390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 916390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 917880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn public void setInstallerPackageName(String targetPackage, 918880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn String installerPackageName) { 919880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn try { 920880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn mPM.setInstallerPackageName(targetPackage, installerPackageName); 921880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } catch (RemoteException e) { 922880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn // Should never happen! 923880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } 924880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } 925880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn 926880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn @Override 927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void movePackage(String packageName, IPackageMoveObserver observer, int flags) { 928390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.movePackage(packageName, observer, flags); 930390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 931390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 932390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 933390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String getInstallerPackageName(String packageName) { 937390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getInstallerPackageName(packageName); 939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 940390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 942390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 943390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 944390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 945390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 946390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) { 947390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 948390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.deletePackage(packageName, observer, flags); 949390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 950390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 951390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 952390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 953390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 954390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void clearApplicationUserData(String packageName, 955390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageDataObserver observer) { 956390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 957390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.clearApplicationUserData(packageName, observer); 958390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 959390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 960390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 961390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 962390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 963390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void deleteApplicationCacheFiles(String packageName, 964390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageDataObserver observer) { 965390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 966390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.deleteApplicationCacheFiles(packageName, observer); 967390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 972390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void freeStorageAndNotify(long idealStorageSize, IPackageDataObserver observer) { 973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 974390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.freeStorageAndNotify(idealStorageSize, observer); 975390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 976390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 977390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 978390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 979390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 980390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 981390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void freeStorage(long freeStorageSize, IntentSender pi) { 982390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 983390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.freeStorage(freeStorageSize, pi); 984390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 985390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 986390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 987390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 988390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 989390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 990390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void getPackageSizeInfo(String packageName, 991390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageStatsObserver observer) { 992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 993390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.getPackageSizeInfo(packageName, observer); 994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 995390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 998390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 999390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void addPackageToPreferred(String packageName) { 1000390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1001390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.addPackageToPreferred(packageName); 1002390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1003390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1004390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1005390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1006390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1007390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1008390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void removePackageFromPreferred(String packageName) { 1009390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1010390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.removePackageFromPreferred(packageName); 1011390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PackageInfo> getPreferredPackages(int flags) { 1018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1019390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPreferredPackages(flags); 1020390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1021390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1022390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1023390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return new ArrayList<PackageInfo>(); 1024390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1025390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1026390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1027390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void addPreferredActivity(IntentFilter filter, 1028390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int match, ComponentName[] set, ComponentName activity) { 1029390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1030390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.addPreferredActivity(filter, match, set, activity); 1031390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1032390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1033390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1034390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1035390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1036390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1037390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void replacePreferredActivity(IntentFilter filter, 1038390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int match, ComponentName[] set, ComponentName activity) { 1039390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1040390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.replacePreferredActivity(filter, match, set, activity); 1041390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1042390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1043390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1044390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1045390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1046390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1047390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void clearPackagePreferredActivities(String packageName) { 1048390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1049390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.clearPackagePreferredActivities(packageName); 1050390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1051390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1052390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1053390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1054390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1055390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1056390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getPreferredActivities(List<IntentFilter> outFilters, 1057390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick List<ComponentName> outActivities, String packageName) { 1058390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1059390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPreferredActivities(outFilters, outActivities, packageName); 1060390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1061390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1062390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1063390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return 0; 1064390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1065390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1066390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1067390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setComponentEnabledSetting(ComponentName componentName, 1068390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int newState, int flags) { 1069390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1070390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.setComponentEnabledSetting(componentName, newState, flags); 1071390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1072390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1073390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1074390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1075390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1076390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1077390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getComponentEnabledSetting(ComponentName componentName) { 1078390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1079390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getComponentEnabledSetting(componentName); 1080390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1081390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1082390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1083390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; 1084390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1085390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1086390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1087390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setApplicationEnabledSetting(String packageName, 1088390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int newState, int flags) { 1089390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1090390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.setApplicationEnabledSetting(packageName, newState, flags); 1091390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1092390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1093390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1094390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1095390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1096390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1097390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getApplicationEnabledSetting(String packageName) { 1098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1099390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getApplicationEnabledSetting(packageName); 1100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; 1104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setPackageObbPath(String packageName, String path) { 1108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.setPackageObbPath(packageName, path); 1110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final ContextImpl mContext; 1116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final IPackageManager mPM; 1117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final Object sSync = new Object(); 1119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static HashMap<ResourceName, WeakReference<Drawable> > sIconCache 1120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick = new HashMap<ResourceName, WeakReference<Drawable> >(); 1121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static HashMap<ResourceName, WeakReference<CharSequence> > sStringCache 1122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick = new HashMap<ResourceName, WeakReference<CharSequence> >(); 1123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick} 1124