1390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/* 2390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Copyright (C) 2010 The Android Open Source Project 3390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * 4390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 5390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * you may not use this file except in compliance with the License. 6390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * You may obtain a copy of the License at 7390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * 8390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * http://www.apache.org/licenses/LICENSE-2.0 9390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * 10390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * Unless required by applicable law or agreed to in writing, software 11390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * distributed under the License is distributed on an "AS IS" BASIS, 12390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * See the License for the specific language governing permissions and 14390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick * limitations under the License. 15390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick */ 16390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 17390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickpackage android.app; 18390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 19390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ComponentName; 20390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ContentResolver; 21390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.Intent; 22390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentFilter; 23390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentSender; 24390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ActivityInfo; 25390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ApplicationInfo; 26390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ComponentInfo; 27ceb1b0bfaea56251796b08c07b963de7403d84ebAnonymous Cowardimport android.content.pm.ContainerEncryptionParams; 28390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.FeatureInfo; 29390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDataObserver; 30390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDeleteObserver; 31390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageInstallObserver; 32390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageManager; 33390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageMoveObserver; 34390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageStatsObserver; 35390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.InstrumentationInfo; 369d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashmanimport android.content.pm.KeySet; 37513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkeyimport android.content.pm.ManifestDigest; 38390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageInfo; 393a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkeyimport android.content.pm.PackageInstaller; 407f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevotimport android.content.pm.PackageItemInfo; 41390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageManager; 42e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Rootimport android.content.pm.ParceledListSlice; 43390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionGroupInfo; 44390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionInfo; 45390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ProviderInfo; 46390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ResolveInfo; 47390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ServiceInfo; 48c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.content.pm.UserInfo; 49706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich canningsimport android.content.pm.VerificationParams; 500aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport android.content.pm.VerifierDeviceIdentity; 51390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.Resources; 52390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.XmlResourceParser; 53c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.graphics.Bitmap; 54c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.graphics.Canvas; 55c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.graphics.Rect; 567f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevotimport android.graphics.drawable.BitmapDrawable; 57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.graphics.drawable.Drawable; 58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.net.Uri; 59390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.Process; 60390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.RemoteException; 6167df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasaniimport android.os.UserHandle; 6288cc346d0602e0b173b5076cd0051120682da601Nicolas Prevotimport android.os.UserManager; 63add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackbornimport android.util.ArrayMap; 64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log; 65a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display; 6616c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey 6716c8e3f49497b6046972ae650772f65768366be8Jeff Sharkeyimport com.android.internal.annotations.GuardedBy; 689d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashmanimport com.android.internal.util.Preconditions; 6964d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghinaimport com.android.internal.util.UserIcons; 7016c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey 71caa711929416b12373d402b9dadb4367129daf87Narayan Kamathimport dalvik.system.VMRuntime; 72390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 73390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference; 74390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList; 75390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List; 76390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 77390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick/*package*/ 78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickfinal class ApplicationPackageManager extends PackageManager { 79390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final String TAG = "ApplicationPackageManager"; 80390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final static boolean DEBUG = false; 81390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final static boolean DEBUG_ICONS = false; 82390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 83d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski // Default flags to use with PackageManager when no flags are given. 84d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski private final static int sDefaultFlags = PackageManager.GET_SHARED_LIBRARY_FILES; 85d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski 8616c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey private final Object mLock = new Object(); 8716c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey 8816c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey @GuardedBy("mLock") 8916c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey private UserManager mUserManager; 9016c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey @GuardedBy("mLock") 9116c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey private PackageInstaller mInstaller; 927f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot 937f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot UserManager getUserManager() { 9416c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey synchronized (mLock) { 9516c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey if (mUserManager == null) { 9616c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey mUserManager = UserManager.get(mContext); 9716c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } 9816c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey return mUserManager; 997f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 1007f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 1017f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot 102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PackageInfo getPackageInfo(String packageName, int flags) 104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 106ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey PackageInfo pi = mPM.getPackageInfo(packageName, flags, mContext.getUserId()); 107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] currentToCanonicalPackageNames(String[] names) { 119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.currentToCanonicalPackageNames(names); 121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] canonicalToCurrentPackageNames(String[] names) { 128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.canonicalToCurrentPackageNames(names); 130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Intent getLaunchIntentForPackage(String packageName) { 137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // First see if the package has an INFO activity; the existence of 138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // such an activity is implied to be the desired front-door for the 139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // overall package (such as if it has multiple launcher entries). 140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.addCategory(Intent.CATEGORY_INFO); 142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.setPackage(packageName); 143194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0); 144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Otherwise, try to find a main launcher activity. 146194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn if (ris == null || ris.size() <= 0) { 147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // reuse the intent instance 148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.removeCategory(Intent.CATEGORY_INFO); 149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); 150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.setPackage(packageName); 151194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn ris = queryIntentActivities(intentToResolve, 0); 152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 153194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn if (ris == null || ris.size() <= 0) { 154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent intent = new Intent(intentToResolve); 157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 158194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn intent.setClassName(ris.get(0).activityInfo.packageName, 159194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn ris.get(0).activityInfo.name); 160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return intent; 161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 164970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima public Intent getLeanbackLaunchIntentForPackage(String packageName) { 165970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima // Try to find a main leanback_launcher activity. 166970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 167970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima intentToResolve.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER); 168970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima intentToResolve.setPackage(packageName); 169970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0); 170970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima 171970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima if (ris == null || ris.size() <= 0) { 172970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima return null; 173970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima } 174970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima Intent intent = new Intent(intentToResolve); 175970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 176194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn intent.setClassName(ris.get(0).activityInfo.packageName, 177194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn ris.get(0).activityInfo.name); 178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return intent; 179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int[] getPackageGids(String packageName) 183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int[] gids = mPM.getPackageGids(packageName); 186390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (gids == null || gids.length > 0) { 187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return gids; 188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 197a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int getPackageUid(String packageName, int userHandle) 198a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throws NameNotFoundException { 199a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 200a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn int uid = mPM.getPackageUid(packageName, userHandle); 201a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (uid >= 0) { 202a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return uid; 203a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 204a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 205a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throw new RuntimeException("Package manager has died", e); 206a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 207a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 208a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throw new NameNotFoundException(packageName); 209a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 210a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 211a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn @Override 212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PermissionInfo getPermissionInfo(String name, int flags) 213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 215390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PermissionInfo pi = mPM.getPermissionInfo(name, flags); 216390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 217390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 218390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 219390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 220390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 223390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(name); 224390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PermissionInfo> queryPermissionsByGroup(String group, int flags) 228390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags); 231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 235390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 236390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 237390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 238390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(group); 239390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 240390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 241390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 242390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PermissionGroupInfo getPermissionGroupInfo(String name, 243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) throws NameNotFoundException { 244390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags); 246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pgi != null) { 247390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pgi; 248390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 249390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 253390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(name); 254390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 255390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 256390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 257390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PermissionGroupInfo> getAllPermissionGroups(int flags) { 258390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 259390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getAllPermissionGroups(flags); 260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ApplicationInfo getApplicationInfo(String packageName, int flags) 267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 268390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 269ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, mContext.getUserId()); 270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 271caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // This is a temporary hack. Callers must use 272caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // createPackageContext(packageName).getApplicationInfo() to 273caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // get the right paths. 274caa711929416b12373d402b9dadb4367129daf87Narayan Kamath maybeAdjustApplicationInfo(ai); 275390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 279390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 280390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 281390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 282390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 283390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 284caa711929416b12373d402b9dadb4367129daf87Narayan Kamath private static void maybeAdjustApplicationInfo(ApplicationInfo info) { 285caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // If we're dealing with a multi-arch application that has both 286caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // 32 and 64 bit shared libraries, we might need to choose the secondary 287caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // depending on what the current runtime's instruction set is. 288caa711929416b12373d402b9dadb4367129daf87Narayan Kamath if (info.primaryCpuAbi != null && info.secondaryCpuAbi != null) { 289caa711929416b12373d402b9dadb4367129daf87Narayan Kamath final String runtimeIsa = VMRuntime.getRuntime().vmInstructionSet(); 290caa711929416b12373d402b9dadb4367129daf87Narayan Kamath final String secondaryIsa = VMRuntime.getInstructionSet(info.secondaryCpuAbi); 291caa711929416b12373d402b9dadb4367129daf87Narayan Kamath 292caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // If the runtimeIsa is the same as the primary isa, then we do nothing. 293caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // Everything will be set up correctly because info.nativeLibraryDir will 294caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // correspond to the right ISA. 295caa711929416b12373d402b9dadb4367129daf87Narayan Kamath if (runtimeIsa.equals(secondaryIsa)) { 296caa711929416b12373d402b9dadb4367129daf87Narayan Kamath info.nativeLibraryDir = info.secondaryNativeLibraryDir; 297caa711929416b12373d402b9dadb4367129daf87Narayan Kamath } 298caa711929416b12373d402b9dadb4367129daf87Narayan Kamath } 299caa711929416b12373d402b9dadb4367129daf87Narayan Kamath } 300caa711929416b12373d402b9dadb4367129daf87Narayan Kamath 301caa711929416b12373d402b9dadb4367129daf87Narayan Kamath 302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ActivityInfo getActivityInfo(ComponentName className, int flags) 304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 306ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ActivityInfo ai = mPM.getActivityInfo(className, flags, mContext.getUserId()); 307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 309390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ActivityInfo getReceiverInfo(ComponentName className, int flags) 319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 321ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ActivityInfo ai = mPM.getReceiverInfo(className, flags, mContext.getUserId()); 322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ServiceInfo getServiceInfo(ComponentName className, int flags) 334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 335390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 336ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ServiceInfo si = mPM.getServiceInfo(className, flags, mContext.getUserId()); 337390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (si != null) { 338390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return si; 339390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 340390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 341390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 342390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 343390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 344390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 345390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 346390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 347390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 348390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ProviderInfo getProviderInfo(ComponentName className, int flags) 349390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 350390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 351ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ProviderInfo pi = mPM.getProviderInfo(className, flags, mContext.getUserId()); 352390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 353390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 354390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 355390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 361390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 362390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] getSystemSharedLibraryNames() { 364390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 365390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getSystemSharedLibraryNames(); 366390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 367390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 368390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 369390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 370390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 371390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public FeatureInfo[] getSystemAvailableFeatures() { 373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getSystemAvailableFeatures(); 375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean hasSystemFeature(String name) { 382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.hasSystemFeature(name); 384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 388390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkPermission(String permName, String pkgName) { 391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkPermission(permName, pkgName); 393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean addPermission(PermissionInfo info) { 400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.addPermission(info); 402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 408390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean addPermissionAsync(PermissionInfo info) { 409390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 410390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.addPermissionAsync(info); 411390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 412390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 413390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 415390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 416390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 417390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void removePermission(String name) { 418390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 419390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.removePermission(name); 420390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 421390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 424390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 425390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 426e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public void grantPermission(String packageName, String permissionName) { 427e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn try { 428e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn mPM.grantPermission(packageName, permissionName); 429e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } catch (RemoteException e) { 430e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn throw new RuntimeException("Package manager has died", e); 431e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 432e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 433e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 434e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn @Override 435e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn public void revokePermission(String packageName, String permissionName) { 436e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn try { 437e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn mPM.revokePermission(packageName, permissionName); 438e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } catch (RemoteException e) { 439e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn throw new RuntimeException("Package manager has died", e); 440e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 441e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 442e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 443e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn @Override 444390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkSignatures(String pkg1, String pkg2) { 445390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 446390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkSignatures(pkg1, pkg2); 447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 448390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 449390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 451390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 453390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkSignatures(int uid1, int uid2) { 454390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 455390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkUidSignatures(uid1, uid2); 456390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 457390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 458390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] getPackagesForUid(int uid) { 463390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPackagesForUid(uid); 465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String getNameForUid(int uid) { 472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 473390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getNameForUid(uid); 474390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 475390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 476390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 477390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 478390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 479390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getUidForSharedUser(String sharedUserName) 481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 483390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int uid = mPM.getUidForSharedUser(sharedUserName); 484390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if(uid != -1) { 485390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return uid; 486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException("No shared userid for user:"+sharedUserName); 491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 493e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root @SuppressWarnings("unchecked") 494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PackageInfo> getInstalledPackages(int flags) { 496ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return getInstalledPackages(flags, mContext.getUserId()); 497151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani } 498151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani 499151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani /** @hide */ 500151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani @Override 501151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani public List<PackageInfo> getInstalledPackages(int flags, int userId) { 502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 503d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn ParceledListSlice<PackageInfo> slice = mPM.getInstalledPackages(flags, userId); 504d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn return slice.getList(); 505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 510e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root @SuppressWarnings("unchecked") 511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 512e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn public List<PackageInfo> getPackagesHoldingPermissions( 513e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn String[] permissions, int flags) { 514e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn final int userId = mContext.getUserId(); 515e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn try { 516d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn ParceledListSlice<PackageInfo> slice = mPM.getPackagesHoldingPermissions( 517d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn permissions, flags, userId); 518d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn return slice.getList(); 519e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn } catch (RemoteException e) { 520e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn throw new RuntimeException("Package manager has died", e); 521e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn } 522e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn } 523e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn 524e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn @SuppressWarnings("unchecked") 525e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn @Override 526390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ApplicationInfo> getInstalledApplications(int flags) { 527ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey final int userId = mContext.getUserId(); 528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 529d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn ParceledListSlice<ApplicationInfo> slice = mPM.getInstalledApplications(flags, userId); 530d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaacDianne Hackborn return slice.getList(); 531390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 532390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 533390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 535390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 536390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 537390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ResolveInfo resolveActivity(Intent intent, int flags) { 538ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return resolveActivityAsUser(intent, flags, mContext.getUserId()); 53958d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov } 54058d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov 54158d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov @Override 54258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId) { 543390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 544390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveIntent( 545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 54758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov flags, 54858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov userId); 549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 550390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 552390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentActivities(Intent intent, 556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 557ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return queryIntentActivitiesAsUser(intent, flags, mContext.getUserId()); 558151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani } 559151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani 560151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani /** @hide Same as above but for a specific user */ 561151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani @Override 56258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, 563151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani int flags, int userId) { 564390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 565390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentActivities( 566390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 567390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 568483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani flags, 569151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani userId); 570390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 571390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 572390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 573390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 574390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 575390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 576390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentActivityOptions( 577390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName caller, Intent[] specifics, Intent intent, 578390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 579390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final ContentResolver resolver = mContext.getContentResolver(); 580390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 581390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String[] specificTypes = null; 582390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (specifics != null) { 583390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final int N = specifics.length; 584390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick for (int i=0; i<N; i++) { 585390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent sp = specifics[i]; 586390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (sp != null) { 587390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String t = sp.resolveTypeIfNeeded(resolver); 588390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (t != null) { 589390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (specificTypes == null) { 590390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes = new String[N]; 591390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 592390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes[i] = t; 593390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 594390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 595390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 596390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 597390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 598390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 599390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentActivityOptions(caller, specifics, 600390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes, intent, intent.resolveTypeIfNeeded(resolver), 601ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey flags, mContext.getUserId()); 602390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 603390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 604390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 605390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 606390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 607f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani /** 608f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani * @hide 609f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani */ 610390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 611f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags, int userId) { 612390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 613390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentReceivers( 614390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 615390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 616483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani flags, 617f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani userId); 618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 620390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 623390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 624f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) { 625ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return queryBroadcastReceivers(intent, flags, mContext.getUserId()); 626f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani } 627f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani 628f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani @Override 629390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ResolveInfo resolveService(Intent intent, int flags) { 630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveService( 632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 634483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani flags, 635ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mContext.getUserId()); 636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 638390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 64258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId) { 643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryIntentServices( 645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 647483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani flags, 64858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov userId); 649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 653390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 65558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public List<ResolveInfo> queryIntentServices(Intent intent, int flags) { 656ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return queryIntentServicesAsUser(intent, flags, mContext.getUserId()); 65758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov } 65858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov 65958d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov @Override 66085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey public List<ResolveInfo> queryIntentContentProvidersAsUser( 66185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey Intent intent, int flags, int userId) { 66285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey try { 66385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey return mPM.queryIntentContentProviders(intent, 66485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, userId); 66585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } catch (RemoteException e) { 66685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey throw new RuntimeException("Package manager has died", e); 66785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 66885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 66985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 67085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey @Override 67185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) { 67285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey return queryIntentContentProvidersAsUser(intent, flags, mContext.getUserId()); 67385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 67485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 67585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey @Override 6760363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina public ProviderInfo resolveContentProvider(String name, int flags) { 6770363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina return resolveContentProviderAsUser(name, flags, mContext.getUserId()); 6780363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina } 6790363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina 6800363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina /** @hide **/ 6810363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina @Override 6820363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina public ProviderInfo resolveContentProviderAsUser(String name, int flags, int userId) { 683390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 6840363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina return mPM.resolveContentProvider(name, flags, userId); 685390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 686390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 687390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 689390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 690390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 691390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ProviderInfo> queryContentProviders(String processName, 692390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int uid, int flags) { 693390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 694390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryContentProviders(processName, uid, flags); 695390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 696390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 697390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 698390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 699390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 700390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 701390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public InstrumentationInfo getInstrumentationInfo( 702390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName className, int flags) 703390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 704390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 705390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick InstrumentationInfo ii = mPM.getInstrumentationInfo( 706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick className, flags); 707390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ii != null) { 708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ii; 709390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 710390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 711390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 712390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 713390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 714390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 716390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<InstrumentationInfo> queryInstrumentation( 719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String targetPackage, int flags) { 720390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 721390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.queryInstrumentation(targetPackage, flags); 722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 723390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 725390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 726390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 727390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getDrawable(String packageName, int resid, 728390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 729390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName name = new ResourceName(packageName, resid); 730390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Drawable dr = getCachedIcon(name); 731390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (dr != null) { 732390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return dr; 733390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 734390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 735390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 736d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski appInfo = getApplicationInfo(packageName, sDefaultFlags); 737390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 738390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 739390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 740390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 741390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 742390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 743390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick dr = r.getDrawable(resid); 744390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (false) { 745390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick RuntimeException e = new RuntimeException("here"); 746390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick e.fillInStackTrace(); 747390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resid) 748390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + " from package " + packageName 749390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + ": app scale=" + r.getCompatibilityInfo().applicationScale 750390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + ", caller scale=" + mContext.getResources().getCompatibilityInfo().applicationScale, 751390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick e); 752390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 753390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Getting drawable 0x" 754390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " from " + r 755390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + ": " + dr); 756390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick putCachedIcon(name, dr); 757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return dr; 758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 759aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Log.w("PackageManager", "Failure retrieving resources for " 760390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 76108f16544176a04a958d403409f98cd0502bb8da3Joe Onorato } catch (Resources.NotFoundException e) { 762aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Log.w("PackageManager", "Failure retrieving resources for " 76308f16544176a04a958d403409f98cd0502bb8da3Joe Onorato + appInfo.packageName + ": " + e.getMessage()); 764390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 765390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 766390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 767390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving icon 0x" 768390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 769390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 770390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 771390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 772390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 773390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 774390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getActivityIcon(ComponentName activityName) 775390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 776d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getActivityInfo(activityName, sDefaultFlags).loadIcon(this); 777390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 778390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 779390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getActivityIcon(Intent intent) 780390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 781390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (intent.getComponent() != null) { 782390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityIcon(intent.getComponent()); 783390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 784390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 785390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo info = resolveActivity( 786390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, PackageManager.MATCH_DEFAULT_ONLY); 787390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (info != null) { 788390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.activityInfo.loadIcon(this); 789390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 790390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 79139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy throw new NameNotFoundException(intent.toUri(0)); 792390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 793390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 794390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getDefaultActivityIcon() { 795390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return Resources.getSystem().getDrawable( 796390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick com.android.internal.R.drawable.sym_def_app_icon); 797390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 798390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 799390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getApplicationIcon(ApplicationInfo info) { 800390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadIcon(this); 801390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 802390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 803390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getApplicationIcon(String packageName) 804390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 805d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getApplicationIcon(getApplicationInfo(packageName, sDefaultFlags)); 806390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 807390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 808390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 809f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getActivityBanner(ComponentName activityName) 810f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throws NameNotFoundException { 811d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getActivityInfo(activityName, sDefaultFlags).loadBanner(this); 812f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 813f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 814f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 815f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getActivityBanner(Intent intent) 816f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throws NameNotFoundException { 817f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (intent.getComponent() != null) { 818f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return getActivityBanner(intent.getComponent()); 819f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 820f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 821f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima ResolveInfo info = resolveActivity( 822f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima intent, PackageManager.MATCH_DEFAULT_ONLY); 823f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (info != null) { 824f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return info.activityInfo.loadBanner(this); 825f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 826f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 827f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throw new NameNotFoundException(intent.toUri(0)); 828f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 829f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 830f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 831f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getApplicationBanner(ApplicationInfo info) { 832f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return info.loadBanner(this); 833f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 834f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 835f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 836f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getApplicationBanner(String packageName) 837f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throws NameNotFoundException { 838d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getApplicationBanner(getApplicationInfo(packageName, sDefaultFlags)); 839f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 840f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 841f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getActivityLogo(ComponentName activityName) 843390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 844d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getActivityInfo(activityName, sDefaultFlags).loadLogo(this); 845390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 846390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 847390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 848390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getActivityLogo(Intent intent) 849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 850390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (intent.getComponent() != null) { 851390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityLogo(intent.getComponent()); 852390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 853390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 854390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo info = resolveActivity( 855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, PackageManager.MATCH_DEFAULT_ONLY); 856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (info != null) { 857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.activityInfo.loadLogo(this); 858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(intent.toUri(0)); 861390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 863390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 864390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getApplicationLogo(ApplicationInfo info) { 865390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadLogo(this); 866390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 867390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 869390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getApplicationLogo(String packageName) 870390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 871d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getApplicationLogo(getApplicationInfo(packageName, sDefaultFlags)); 872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 873390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 874c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 875c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { 876c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final int badgeResId = getBadgeResIdForUser(user.getIdentifier()); 877c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeResId == 0) { 878c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return icon; 879c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 880c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Drawable badgeIcon = getDrawable("system", badgeResId, null); 881c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return getBadgedDrawable(icon, badgeIcon, null, true); 882c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 883c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 884c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 885c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public Drawable getUserBadgedDrawableForDensity(Drawable drawable, UserHandle user, 886c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Rect badgeLocation, int badgeDensity) { 887c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Drawable badgeDrawable = getUserBadgeForDensity(user, badgeDensity); 888c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeDrawable == null) { 889c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return drawable; 890c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 891c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return getBadgedDrawable(drawable, badgeDrawable, badgeLocation, true); 892c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 893c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 894c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 895c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public Drawable getUserBadgeForDensity(UserHandle user, int density) { 896c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav UserInfo userInfo = getUserIfProfile(user.getIdentifier()); 897c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (userInfo != null && userInfo.isManagedProfile()) { 898c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (density <= 0) { 899c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav density = mContext.getResources().getDisplayMetrics().densityDpi; 900c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 901c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return Resources.getSystem().getDrawableForDensity( 902c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav com.android.internal.R.drawable.ic_corp_badge, density); 903c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 904c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return null; 905c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 906c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 907c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 908c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public CharSequence getUserBadgedLabel(CharSequence label, UserHandle user) { 909c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav UserInfo userInfo = getUserIfProfile(user.getIdentifier()); 910c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (userInfo != null && userInfo.isManagedProfile()) { 911c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return Resources.getSystem().getString( 912c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav com.android.internal.R.string.managed_profile_label_badge, label); 913c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 914c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return label; 915c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 916c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 917390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Resources getResourcesForActivity( 918390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName activityName) throws NameNotFoundException { 919390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getResourcesForApplication( 920d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski getActivityInfo(activityName, sDefaultFlags).applicationInfo); 921390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 922390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Resources getResourcesForApplication( 924390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo app) throws NameNotFoundException { 925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (app.packageName.equals("system")) { 926390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mContext.mMainThread.getSystemContext().getResources(); 927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 9288a4c9721a9e09d20c63381c13fa29bd9f7cbc3e3Jeff Sharkey final boolean sameUid = (app.uid == Process.myUid()); 929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = mContext.mMainThread.getTopLevelResources( 9308a4c9721a9e09d20c63381c13fa29bd9f7cbc3e3Jeff Sharkey sameUid ? app.sourceDir : app.publicSourceDir, 9318a4c9721a9e09d20c63381c13fa29bd9f7cbc3e3Jeff Sharkey sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs, 932d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski app.resourceDirs, app.sharedLibraryFiles, Display.DEFAULT_DISPLAY, 933d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski null, mContext.mPackageInfo); 934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (r != null) { 935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return r; 936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 937390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException("Unable to open " + app.publicSourceDir); 938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 940390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Resources getResourcesForApplication( 941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String appPackageName) throws NameNotFoundException { 942390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getResourcesForApplication( 943d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski getApplicationInfo(appPackageName, sDefaultFlags)); 944390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 945390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 94698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani /** @hide */ 94798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani @Override 94898edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani public Resources getResourcesForApplicationAsUser(String appPackageName, int userId) 94998edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani throws NameNotFoundException { 950ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey if (userId < 0) { 951ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey throw new IllegalArgumentException( 952ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey "Call does not support special user #" + userId); 953ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey } 954ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey if ("system".equals(appPackageName)) { 955ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return mContext.mMainThread.getSystemContext().getResources(); 956ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey } 95798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani try { 958d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, sDefaultFlags, userId); 95998edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani if (ai != null) { 96098edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani return getResourcesForApplication(ai); 96198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } 96298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } catch (RemoteException e) { 96398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani throw new RuntimeException("Package manager has died", e); 96498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } 96598edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani throw new NameNotFoundException("Package " + appPackageName + " doesn't exist"); 96698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } 96798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani 968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int mCachedSafeMode = -1; 969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public boolean isSafeMode() { 970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (mCachedSafeMode < 0) { 972390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mCachedSafeMode = mPM.isSafeMode() ? 1 : 0; 973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 974390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mCachedSafeMode != 0; 975390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 976390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new RuntimeException("Package manager has died", e); 977390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 978390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 979390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 980390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick static void configurationChanged() { 981390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 982390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.clear(); 983390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.clear(); 984390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 985390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 986390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 987390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationPackageManager(ContextImpl context, 988390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageManager pm) { 989390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mContext = context; 990390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM = pm; 991390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 993390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private Drawable getCachedIcon(ResourceName name) { 994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 99539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy WeakReference<Drawable.ConstantState> wr = sIconCache.get(name); 996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for " 997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + name + ": " + wr); 998390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (wr != null) { // we have the activity 99939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy Drawable.ConstantState state = wr.get(); 100039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy if (state != null) { 100139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy if (DEBUG_ICONS) { 100239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy Log.v(TAG, "Get cached drawable state for " + name + ": " + state); 100339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy } 100439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // Note: It's okay here to not use the newDrawable(Resources) variant 100539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // of the API. The ConstantState comes from a drawable that was 100639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // originally created by passing the proper app Resources instance 100739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // which means the state should already contain the proper 100839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // resources specific information (like density.) See 100939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // BitmapDrawable.BitmapState for instance. 101039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy return state.newDrawable(); 1011390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // our entry has been purged 1013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.remove(name); 1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1019390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private void putCachedIcon(ResourceName name, Drawable dr) { 1020390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 102139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy sIconCache.put(name, new WeakReference<Drawable.ConstantState>(dr.getConstantState())); 102239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable state for " + name + ": " + dr); 1023390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1024390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1025390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 102639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy static void handlePackageBroadcast(int cmd, String[] pkgList, boolean hasPkgInfo) { 1027390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean immediateGc = false; 1028390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) { 1029390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick immediateGc = true; 1030390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1031390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pkgList != null && (pkgList.length > 0)) { 1032390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean needCleanup = false; 1033390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick for (String ssp : pkgList) { 1034390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1035add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn for (int i=sIconCache.size()-1; i>=0; i--) { 1036add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn ResourceName nm = sIconCache.keyAt(i); 1037add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn if (nm.packageName.equals(ssp)) { 1038add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn //Log.i(TAG, "Removing cached drawable for " + nm); 1039add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn sIconCache.removeAt(i); 1040add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn needCleanup = true; 1041390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1042390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1043add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn for (int i=sStringCache.size()-1; i>=0; i--) { 1044add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn ResourceName nm = sStringCache.keyAt(i); 1045add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn if (nm.packageName.equals(ssp)) { 1046add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn //Log.i(TAG, "Removing cached string for " + nm); 1047add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn sStringCache.removeAt(i); 1048add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn needCleanup = true; 1049390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1050390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1051390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1052390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1053390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (needCleanup || hasPkgInfo) { 1054390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (immediateGc) { 1055390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Schedule an immediate gc. 1056390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Runtime.getRuntime().gc(); 1057390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } else { 1058390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ActivityThread.currentActivityThread().scheduleGcIdler(); 1059390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1060390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1061390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1062390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1063390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1064390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final class ResourceName { 1065390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final String packageName; 1066390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final int iconId; 1067390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1068390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(String _packageName, int _iconId) { 1069390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick packageName = _packageName; 1070390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick iconId = _iconId; 1071390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1072390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1073390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ApplicationInfo aInfo, int _iconId) { 1074390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(aInfo.packageName, _iconId); 1075390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1076390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1077390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ComponentInfo cInfo, int _iconId) { 1078390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(cInfo.applicationInfo.packageName, _iconId); 1079390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1080390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1081390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ResolveInfo rInfo, int _iconId) { 1082390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(rInfo.activityInfo.applicationInfo.packageName, _iconId); 1083390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1084390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1085390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1086390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean equals(Object o) { 1087390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (this == o) return true; 1088390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (o == null || getClass() != o.getClass()) return false; 1089390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1090390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName that = (ResourceName) o; 1091390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1092390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (iconId != that.iconId) return false; 1093390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return !(packageName != null ? 1094390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick !packageName.equals(that.packageName) : that.packageName != null); 1095390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1096390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1097390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1099390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int hashCode() { 1100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int result; 1101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick result = packageName.hashCode(); 1102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick result = 31 * result + iconId; 1103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return result; 1104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String toString() { 1108390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return "{ResourceName " + packageName + " / " + iconId + "}"; 1109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private CharSequence getCachedString(ResourceName name) { 1113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick WeakReference<CharSequence> wr = sStringCache.get(name); 1115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (wr != null) { // we have the activity 1116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick CharSequence cs = wr.get(); 1117390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (cs != null) { 1118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return cs; 1119390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // our entry has been purged 1121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.remove(name); 1122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1123390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1124390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1125390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1126390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1127390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private void putCachedString(ResourceName name, CharSequence cs) { 1128390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.put(name, new WeakReference<CharSequence>(cs)); 1130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1132390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1133390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1134390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public CharSequence getText(String packageName, int resid, 1135390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 1136390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName name = new ResourceName(packageName, resid); 1137390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick CharSequence text = getCachedString(name); 1138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (text != null) { 1139390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return text; 1140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 1142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1143d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski appInfo = getApplicationInfo(packageName, sDefaultFlags); 1144390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 1150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick text = r.getText(resid); 1151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick putCachedString(name, text); 1152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return text; 1153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1154aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Log.w("PackageManager", "Failure retrieving resources for " 1155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 1156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 1157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 1158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 1159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving text 0x" 1160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 1161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 1162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public XmlResourceParser getXml(String packageName, int resid, 1168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 1169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 1170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1171d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski appInfo = getApplicationInfo(packageName, sDefaultFlags); 1172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 1178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return r.getXml(resid); 1179390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 1180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 1181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 1182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving xml 0x" 1183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 1184390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 1185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 11863fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert Log.w("PackageManager", "Failure retrieving resources for " 1187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 1188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1191390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1192390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public CharSequence getApplicationLabel(ApplicationInfo info) { 1194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadLabel(this); 1195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1197390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1198390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags, 1199390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String installerPackageName) { 1200513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey final VerificationParams verificationParams = new VerificationParams(null, null, 1201513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey null, VerificationParams.NO_UID, null); 1202513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags, 1203513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installerPackageName, verificationParams, null); 1204390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1205390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1206390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 12075ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer, 12085ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root int flags, String installerPackageName, Uri verificationURI, 1209e1d7c711df3e3a2d2f195457882aa4ddb5626167Rich Cannings ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) { 1210513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey final VerificationParams verificationParams = new VerificationParams(verificationURI, null, 1211513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey null, VerificationParams.NO_UID, manifestDigest); 1212513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags, 1213513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installerPackageName, verificationParams, encryptionParams); 12145ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } 12155ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root 12165ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root @Override 12178a985d24ce9a38f40ed88fecbdcd0e75e3a68f44John Spurlock public void installPackageWithVerificationAndEncryption(Uri packageURI, 1218706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings IPackageInstallObserver observer, int flags, String installerPackageName, 1219706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { 1220513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags, 1221513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installerPackageName, verificationParams, encryptionParams); 1222f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate } 1223f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate 1224f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate @Override 1225f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate public void installPackage(Uri packageURI, PackageInstallObserver observer, 1226f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate int flags, String installerPackageName) { 1227513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey final VerificationParams verificationParams = new VerificationParams(null, null, 1228513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey null, VerificationParams.NO_UID, null); 1229513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, observer, flags, installerPackageName, verificationParams, null); 1230f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate } 1231f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate 1232f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate @Override 1233f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate public void installPackageWithVerification(Uri packageURI, 1234f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate PackageInstallObserver observer, int flags, String installerPackageName, 1235f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate Uri verificationURI, ManifestDigest manifestDigest, 1236f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate ContainerEncryptionParams encryptionParams) { 1237513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey final VerificationParams verificationParams = new VerificationParams(verificationURI, null, 1238513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey null, VerificationParams.NO_UID, manifestDigest); 1239513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, observer, flags, installerPackageName, verificationParams, 1240513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey encryptionParams); 1241f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate } 1242f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate 1243f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate @Override 1244f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate public void installPackageWithVerificationAndEncryption(Uri packageURI, 1245f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate PackageInstallObserver observer, int flags, String installerPackageName, 1246f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { 1247513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, observer, flags, installerPackageName, verificationParams, 1248513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey encryptionParams); 1249513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey } 1250513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey 1251513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey private void installCommon(Uri packageURI, 1252513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey PackageInstallObserver observer, int flags, String installerPackageName, 1253513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) { 1254513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey if (!"file".equals(packageURI.getScheme())) { 1255513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey throw new UnsupportedOperationException("Only file:// URIs are supported"); 1256513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey } 1257513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey if (encryptionParams != null) { 1258513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey throw new UnsupportedOperationException("ContainerEncryptionParams not supported"); 1259513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey } 1260513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey 1261513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey final String originPath = packageURI.getPath(); 1262f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate try { 1263513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey mPM.installPackage(originPath, observer.getBinder(), flags, installerPackageName, 1264513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey verificationParams, null); 1265513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey } catch (RemoteException ignored) { 1266706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 1267706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 1268706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 1269706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 12707767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn public int installExistingPackage(String packageName) 12717767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn throws NameNotFoundException { 12727767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn try { 127367df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani int res = mPM.installExistingPackageAsUser(packageName, UserHandle.myUserId()); 12747767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn if (res == INSTALL_FAILED_INVALID_URI) { 12757767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn throw new NameNotFoundException("Package " + packageName + " doesn't exist"); 12767767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } 12777767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn return res; 12787767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } catch (RemoteException e) { 12797767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn // Should never happen! 12807767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn throw new NameNotFoundException("Package " + packageName + " doesn't exist"); 12817767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } 12827767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } 12837767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn 12847767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn @Override 12853a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root public void verifyPendingInstall(int id, int response) { 12865ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root try { 12873a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root mPM.verifyPendingInstall(id, response); 12885ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } catch (RemoteException e) { 12895ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root // Should never happen! 12905ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } 12915ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } 12925ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root 12935ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root @Override 1294d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings public void extendVerificationTimeout(int id, int verificationCodeAtTimeout, 1295d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings long millisecondsToDelay) { 1296d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings try { 1297d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings mPM.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay); 1298d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings } catch (RemoteException e) { 1299d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings // Should never happen! 1300d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings } 1301d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings } 1302d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings 1303d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings @Override 1304880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn public void setInstallerPackageName(String targetPackage, 1305880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn String installerPackageName) { 1306880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn try { 1307880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn mPM.setInstallerPackageName(targetPackage, installerPackageName); 1308880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } catch (RemoteException e) { 1309880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn // Should never happen! 1310880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } 1311880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } 1312880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn 1313880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn @Override 1314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void movePackage(String packageName, IPackageMoveObserver observer, int flags) { 1315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1316390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.movePackage(packageName, observer, flags); 1317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1319390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1320390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1321390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1322390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1323390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String getInstallerPackageName(String packageName) { 1324390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getInstallerPackageName(packageName); 1326390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1333390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) { 1334390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 133567df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasani mPM.deletePackageAsUser(packageName, observer, UserHandle.myUserId(), flags); 1336390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1337390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1338390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1339390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1340fbd0e9fa37fc17ccd25e4c1f16195bbd27de3c4cJeff Sharkey 1341390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1342390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void clearApplicationUserData(String packageName, 1343390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageDataObserver observer) { 1344390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1345ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mPM.clearApplicationUserData(packageName, observer, mContext.getUserId()); 1346390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1347390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1348390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1349390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1350390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1351390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void deleteApplicationCacheFiles(String packageName, 1352390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageDataObserver observer) { 1353390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1354390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.deleteApplicationCacheFiles(packageName, observer); 1355390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1357390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void freeStorageAndNotify(long idealStorageSize, IPackageDataObserver observer) { 1361390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1362390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.freeStorageAndNotify(idealStorageSize, observer); 1363390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1364390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1365390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1366390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1367390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1368390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1369390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void freeStorage(long freeStorageSize, IntentSender pi) { 1370390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1371390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.freeStorage(freeStorageSize, pi); 1372390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 13780c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn public void getPackageSizeInfo(String packageName, int userHandle, 13790c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn IPackageStatsObserver observer) { 1380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 13810c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn mPM.getPackageSizeInfo(packageName, userHandle, observer); 1382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1383390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void addPackageToPreferred(String packageName) { 1388390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.addPackageToPreferred(packageName); 1390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void removePackageFromPreferred(String packageName) { 1397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1398390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.removePackageFromPreferred(packageName); 1399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PackageInfo> getPreferredPackages(int flags) { 1406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPreferredPackages(flags); 1408390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1409390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1410390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1411390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return new ArrayList<PackageInfo>(); 1412390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1413390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1415390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void addPreferredActivity(IntentFilter filter, 1416390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int match, ComponentName[] set, ComponentName activity) { 1417390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1418ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mPM.addPreferredActivity(filter, match, set, activity, mContext.getUserId()); 1419a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani } catch (RemoteException e) { 1420a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani // Should never happen! 1421a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani } 1422a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani } 1423a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani 1424a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani @Override 1425a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani public void addPreferredActivity(IntentFilter filter, int match, 1426a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani ComponentName[] set, ComponentName activity, int userId) { 1427a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani try { 1428a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani mPM.addPreferredActivity(filter, match, set, activity, userId); 1429390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1430390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1431390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1432390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1433390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1434390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1435390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void replacePreferredActivity(IntentFilter filter, 1436390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int match, ComponentName[] set, ComponentName activity) { 1437390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 143841c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani mPM.replacePreferredActivity(filter, match, set, activity, UserHandle.myUserId()); 143941c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani } catch (RemoteException e) { 144041c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani // Should never happen! 144141c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani } 144241c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani } 144341c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani 144441c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani @Override 144541c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani public void replacePreferredActivityAsUser(IntentFilter filter, 144641c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani int match, ComponentName[] set, ComponentName activity, 144741c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani int userId) { 144841c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani try { 144941c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani mPM.replacePreferredActivity(filter, match, set, activity, userId); 1450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1451390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1453390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1454390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1455390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1456390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void clearPackagePreferredActivities(String packageName) { 1457390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1458390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.clearPackagePreferredActivities(packageName); 1459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1463390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getPreferredActivities(List<IntentFilter> outFilters, 1466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick List<ComponentName> outActivities, String packageName) { 1467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPreferredActivities(outFilters, outActivities, packageName); 1469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return 0; 1473390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1474390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1475390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1476a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate public ComponentName getHomeActivities(List<ResolveInfo> outActivities) { 1477a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate try { 1478a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate return mPM.getHomeActivities(outActivities); 1479a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate } catch (RemoteException e) { 1480a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate // Should never happen! 1481a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate } 1482a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate return null; 1483a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate } 1484a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate 1485a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate @Override 1486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setComponentEnabledSetting(ComponentName componentName, 1487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int newState, int flags) { 1488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1489ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mPM.setComponentEnabledSetting(componentName, newState, flags, mContext.getUserId()); 1490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1496390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getComponentEnabledSetting(ComponentName componentName) { 1497390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1498ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return mPM.getComponentEnabledSetting(componentName, mContext.getUserId()); 1499390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; 1503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setApplicationEnabledSetting(String packageName, 1507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int newState, int flags) { 1508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 15093fa3c28a356108a6558b6b54a0b10e1a5cc4f1b6Dianne Hackborn mPM.setApplicationEnabledSetting(packageName, newState, flags, 151095d785346b4dae808a2d8f77356175e55a572d96Dianne Hackborn mContext.getUserId(), mContext.getOpPackageName()); 1511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1516390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1517390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getApplicationEnabledSetting(String packageName) { 1518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1519ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return mPM.getApplicationEnabledSetting(packageName, mContext.getUserId()); 1520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Should never happen! 1522390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1523390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; 1524390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1525390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1526655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani @Override 1527e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, 1528655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani UserHandle user) { 1529655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani try { 1530e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani return mPM.setApplicationHiddenSettingAsUser(packageName, hidden, 1531655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani user.getIdentifier()); 1532655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } catch (RemoteException re) { 1533655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani // Should never happen! 1534655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 1535655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani return false; 1536655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 1537655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani 1538655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani @Override 1539e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani public boolean getApplicationHiddenSettingAsUser(String packageName, UserHandle user) { 1540655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani try { 1541e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani return mPM.getApplicationHiddenSettingAsUser(packageName, user.getIdentifier()); 1542655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } catch (RemoteException re) { 1543655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani // Should never happen! 1544655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 1545655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani return false; 1546655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 1547655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani 1548c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 15499d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 15509d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public KeySet getKeySetByAlias(String packageName, String alias) { 15519d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 15529d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(alias); 1553c6f22499f3046684d7175e10ca42cce1492cd36fdcashman KeySet ks; 15549d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 1555c6f22499f3046684d7175e10ca42cce1492cd36fdcashman ks = mPM.getKeySetByAlias(packageName, alias); 15569d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 15579d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman return null; 15589d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 1559c6f22499f3046684d7175e10ca42cce1492cd36fdcashman return ks; 15609d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 15619d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 1562c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 15639d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 15649d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public KeySet getSigningKeySet(String packageName) { 15659d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 1566c6f22499f3046684d7175e10ca42cce1492cd36fdcashman KeySet ks; 15679d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 1568c6f22499f3046684d7175e10ca42cce1492cd36fdcashman ks = mPM.getSigningKeySet(packageName); 15699d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 15709d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman return null; 15719d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 1572c6f22499f3046684d7175e10ca42cce1492cd36fdcashman return ks; 15739d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 15749d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 1575c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 15769d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 15779d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public boolean isSignedBy(String packageName, KeySet ks) { 15789d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 15799d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(ks); 15809d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 1581c6f22499f3046684d7175e10ca42cce1492cd36fdcashman return mPM.isPackageSignedByKeySet(packageName, ks); 15829d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 15839d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman return false; 15849d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 15859d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 15869d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 1587c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 15889d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 15899d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public boolean isSignedByExactly(String packageName, KeySet ks) { 15909d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 15919d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(ks); 15929d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 1593c6f22499f3046684d7175e10ca42cce1492cd36fdcashman return mPM.isPackageSignedByKeySetExactly(packageName, ks); 15949d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 15959d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman return false; 15969d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 15979d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 15989d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 15990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root /** 16000aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * @hide 16010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root */ 16020aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root @Override 16030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root public VerifierDeviceIdentity getVerifierDeviceIdentity() { 16040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root try { 16050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root return mPM.getVerifierDeviceIdentity(); 16060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root } catch (RemoteException e) { 16070aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root // Should never happen! 16080aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root } 16090aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root return null; 16100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root } 16110aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root 16123a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey @Override 161316c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey public PackageInstaller getPackageInstaller() { 161416c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey synchronized (mLock) { 161516c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey if (mInstaller == null) { 161616c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey try { 1617a0907436c01fd8c545a6b5c7b28bc3bc9db59270Jeff Sharkey mInstaller = new PackageInstaller(mContext, this, mPM.getPackageInstaller(), 161816c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey mContext.getPackageName(), mContext.getUserId()); 161916c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } catch (RemoteException e) { 162016c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey throw e.rethrowAsRuntimeException(); 162116c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } 162216c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } 162316c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey return mInstaller; 16243a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey } 16253a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey } 16263a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey 16276c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey @Override 16286c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey public boolean isPackageAvailable(String packageName) { 16296c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey try { 16306c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey return mPM.isPackageAvailable(packageName, mContext.getUserId()); 16316c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey } catch (RemoteException e) { 16326c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey throw e.rethrowAsRuntimeException(); 16336c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey } 16346c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey } 16356c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey 1636c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot /** 1637c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot * @hide 1638c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot */ 1639c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot @Override 164063798c596dc757135950313eb4bb44ca58696c68Nicolas Prevot public void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId, int targetUserId, 164163798c596dc757135950313eb4bb44ca58696c68Nicolas Prevot int flags) { 1642c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot try { 16433f7777fa4f1d392e18bad39edcd4539880c52ff9Nicolas Prevot mPM.addCrossProfileIntentFilter(filter, mContext.getOpPackageName(), 16443f7777fa4f1d392e18bad39edcd4539880c52ff9Nicolas Prevot mContext.getUserId(), sourceUserId, targetUserId, flags); 1645c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } catch (RemoteException e) { 1646c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot // Should never happen! 1647c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 1648c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 1649c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot 1650c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot /** 1651c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot * @hide 1652c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot */ 1653c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot @Override 16548194899071e0a84c95ef10614bd1b9485b48f589Nicolas Prevot public void clearCrossProfileIntentFilters(int sourceUserId) { 1655c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot try { 16563f7777fa4f1d392e18bad39edcd4539880c52ff9Nicolas Prevot mPM.clearCrossProfileIntentFilters(sourceUserId, mContext.getOpPackageName(), 16573f7777fa4f1d392e18bad39edcd4539880c52ff9Nicolas Prevot mContext.getUserId()); 1658c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } catch (RemoteException e) { 1659c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot // Should never happen! 1660c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 1661c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 1662c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot 166388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot /** 166488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot * @hide 166588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot */ 16667f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot public Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo) { 16677f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot if (itemInfo.showUserIcon != UserHandle.USER_NULL) { 166864d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina Bitmap bitmap = getUserManager().getUserIcon(itemInfo.showUserIcon); 166964d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina if (bitmap == null) { 167064d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina return UserIcons.getDefaultUserIcon(itemInfo.showUserIcon, /* light= */ false); 167164d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina } 167264d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina return new BitmapDrawable(bitmap); 16737f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 1674db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina Drawable dr = null; 1675db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina if (itemInfo.packageName != null) { 1676db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina dr = getDrawable(itemInfo.packageName, itemInfo.icon, appInfo); 1677db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina } 1678a71e3903e5d3f38795c443c052125faede9d9ec7Alexandra Gherghina if (dr == null) { 1679a709314537164d959a18ee78768c69c4a9cb33c7Alexandra Gherghina dr = itemInfo.loadDefaultIcon(this); 16807f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 1681fdf169cbea5c59c6f74c25c6c529d8a19c6cb78cAmith Yamasani return getUserBadgedIcon(dr, new UserHandle(mContext.getUserId())); 1682c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1683c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1684c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav private Drawable getBadgedDrawable(Drawable drawable, Drawable badgeDrawable, 1685c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Rect badgeLocation, boolean tryBadgeInPlace) { 1686c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final int badgedWidth = drawable.getIntrinsicWidth(); 1687c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final int badgedHeight = drawable.getIntrinsicHeight(); 1688c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final boolean canBadgeInPlace = tryBadgeInPlace 1689c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav && (drawable instanceof BitmapDrawable) 1690c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav && ((BitmapDrawable) drawable).getBitmap().isMutable(); 1691c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1692c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final Bitmap bitmap; 1693c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (canBadgeInPlace) { 1694c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav bitmap = ((BitmapDrawable) drawable).getBitmap(); 1695c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } else { 1696c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav bitmap = Bitmap.createBitmap(badgedWidth, badgedHeight, Bitmap.Config.ARGB_8888); 1697c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1698c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Canvas canvas = new Canvas(bitmap); 1699c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1700c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (!canBadgeInPlace) { 1701c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav drawable.setBounds(0, 0, badgedWidth, badgedHeight); 1702c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav drawable.draw(canvas); 1703c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1704c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1705c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeLocation != null) { 1706c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeLocation.left < 0 || badgeLocation.top < 0 1707c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav || badgeLocation.width() > badgedWidth || badgeLocation.height() > badgedHeight) { 1708c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav throw new IllegalArgumentException("Badge location " + badgeLocation 1709c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav + " not in badged drawable bounds " 1710c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav + new Rect(0, 0, badgedWidth, badgedHeight)); 1711c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1712c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.setBounds(0, 0, badgeLocation.width(), badgeLocation.height()); 1713c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1714c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav canvas.save(); 1715c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav canvas.translate(badgeLocation.left, badgeLocation.top); 1716c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.draw(canvas); 1717c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav canvas.restore(); 1718c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } else { 1719c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.setBounds(0, 0, badgedWidth, badgedHeight); 1720c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.draw(canvas); 1721c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1722c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1723c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (!canBadgeInPlace) { 1724c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav BitmapDrawable mergedDrawable = new BitmapDrawable(mContext.getResources(), bitmap); 1725c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1726c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (drawable instanceof BitmapDrawable) { 1727c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; 1728c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav mergedDrawable.setTargetDensity(bitmapDrawable.getBitmap().getDensity()); 1729c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1730c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1731c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return mergedDrawable; 1732c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1733c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1734c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return drawable; 1735c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1736c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1737c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav private int getBadgeResIdForUser(int userHandle) { 1738c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav // Return the framework-provided badge. 1739c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav UserInfo userInfo = getUserIfProfile(userHandle); 1740c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (userInfo != null && userInfo.isManagedProfile()) { 1741c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return com.android.internal.R.drawable.ic_corp_icon_badge; 1742c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1743c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return 0; 1744c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1745c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1746c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav private UserInfo getUserIfProfile(int userHandle) { 17477de2abb16cc3ee32091b9f137b4eb0183cab9e1aSvetoslav List<UserInfo> userProfiles = getUserManager().getProfiles(UserHandle.myUserId()); 1748c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav for (UserInfo user : userProfiles) { 1749c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (user.id == userHandle) { 1750c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return user; 1751c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1752c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1753c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return null; 175488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot } 175588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot 1756390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final ContextImpl mContext; 1757390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final IPackageManager mPM; 1758390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1759390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final Object sSync = new Object(); 1760add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn private static ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache 1761add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn = new ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>>(); 1762add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache 1763add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn = new ArrayMap<ResourceName, WeakReference<CharSequence>>(); 1764390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick} 1765