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 197b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbyeimport android.annotation.DrawableRes; 20ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viveretteimport android.annotation.NonNull; 21ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viveretteimport android.annotation.Nullable; 227b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbyeimport android.annotation.StringRes; 237b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbyeimport android.annotation.XmlRes; 24f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onukiimport android.app.admin.DevicePolicyManager; 25390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ComponentName; 26390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.ContentResolver; 27390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.Intent; 28390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentFilter; 29390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.IntentSender; 30390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ActivityInfo; 31390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ApplicationInfo; 32390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ComponentInfo; 332acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganovimport android.content.pm.EphemeralApplicationInfo; 34390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.FeatureInfo; 35f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslavimport android.content.pm.IOnPermissionsChangeListener; 36390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDataObserver; 37390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageDeleteObserver; 38390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageInstallObserver; 39390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageManager; 40390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageMoveObserver; 41390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.IPackageStatsObserver; 42390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.InstrumentationInfo; 431c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglioimport android.content.pm.IntentFilterVerificationInfo; 449d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashmanimport android.content.pm.KeySet; 45390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageInfo; 463a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkeyimport android.content.pm.PackageInstaller; 477f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevotimport android.content.pm.PackageItemInfo; 48390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PackageManager; 49e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Rootimport android.content.pm.ParceledListSlice; 50390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionGroupInfo; 51390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.PermissionInfo; 52390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ProviderInfo; 53390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ResolveInfo; 54390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.pm.ServiceInfo; 55c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.content.pm.UserInfo; 560aaa0d931716e9f57a1d84d795fab2df75092756Kenny Rootimport android.content.pm.VerifierDeviceIdentity; 57390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.Resources; 58390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.content.res.XmlResourceParser; 59c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.graphics.Bitmap; 60c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.graphics.Canvas; 61c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslavimport android.graphics.Rect; 627f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevotimport android.graphics.drawable.BitmapDrawable; 63390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.graphics.drawable.Drawable; 64390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.net.Uri; 6550a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkeyimport android.os.Bundle; 66620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkeyimport android.os.Handler; 67620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkeyimport android.os.Looper; 68620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkeyimport android.os.Message; 69390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.Process; 70390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.os.RemoteException; 71b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkeyimport android.os.SystemProperties; 7267df64b3a48a8157d08a98fa90135d0ac0ee621cAmith Yamasaniimport android.os.UserHandle; 7388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevotimport android.os.UserManager; 74e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkeyimport android.os.storage.StorageManager; 75e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkeyimport android.os.storage.VolumeInfo; 76f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedyimport android.provider.Settings; 77add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackbornimport android.util.ArrayMap; 78390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport android.util.Log; 79a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brownimport android.view.Display; 80b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey 81b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkeyimport dalvik.system.VMRuntime; 8216c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey 8316c8e3f49497b6046972ae650772f65768366be8Jeff Sharkeyimport com.android.internal.annotations.GuardedBy; 84b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkeyimport com.android.internal.os.SomeArgs; 859d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashmanimport com.android.internal.util.Preconditions; 8664d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghinaimport com.android.internal.util.UserIcons; 872acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganovimport libcore.util.EmptyArray; 8816c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey 89390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.lang.ref.WeakReference; 90390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.ArrayList; 912acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganovimport java.util.Collections; 92620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkeyimport java.util.Iterator; 93390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrickimport java.util.List; 94f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslavimport java.util.Map; 95620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkeyimport java.util.Objects; 96390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 97cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onuki/** @hide */ 98cc4bbeb76af92a8484fe05f37c4ff412b4c47cccMakoto Onukipublic class ApplicationPackageManager extends PackageManager { 99390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final String TAG = "ApplicationPackageManager"; 100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final static boolean DEBUG_ICONS = false; 101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1022acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov private static final int DEFAULT_EPHEMERAL_COOKIE_MAX_SIZE_BYTES = 16384; // 16KB 1032acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 104d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski // Default flags to use with PackageManager when no flags are given. 105d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski private final static int sDefaultFlags = PackageManager.GET_SHARED_LIBRARY_FILES; 106d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski 10716c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey private final Object mLock = new Object(); 10816c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey 10916c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey @GuardedBy("mLock") 11016c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey private UserManager mUserManager; 11116c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey @GuardedBy("mLock") 11216c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey private PackageInstaller mInstaller; 1137f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot 114620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @GuardedBy("mDelegates") 115620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey private final ArrayList<MoveCallbackDelegate> mDelegates = new ArrayList<>(); 116620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 117f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov @GuardedBy("mLock") 118f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov private String mPermissionsControllerPackageName; 119f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov 1207f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot UserManager getUserManager() { 12116c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey synchronized (mLock) { 12216c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey if (mUserManager == null) { 12316c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey mUserManager = UserManager.get(mContext); 12416c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } 12516c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey return mUserManager; 1267f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 1277f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 1287f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot 129390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 130390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PackageInfo getPackageInfo(String packageName, int flags) 131390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1329a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot return getPackageInfoAsUser(packageName, flags, mContext.getUserId()); 1339a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot } 1349a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot 1359a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot @Override 1369a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId) 1379a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot throws NameNotFoundException { 138390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1399a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot PackageInfo pi = mPM.getPackageInfo(packageName, flags, userId); 140390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 141390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 142390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 143390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 144f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 147390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] currentToCanonicalPackageNames(String[] names) { 152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.currentToCanonicalPackageNames(names); 154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 155f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] canonicalToCurrentPackageNames(String[] names) { 161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.canonicalToCurrentPackageNames(names); 163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 164f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Intent getLaunchIntentForPackage(String packageName) { 170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // First see if the package has an INFO activity; the existence of 171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // such an activity is implied to be the desired front-door for the 172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // overall package (such as if it has multiple launcher entries). 173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 174390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.addCategory(Intent.CATEGORY_INFO); 175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.setPackage(packageName); 176194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0); 177390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 178390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Otherwise, try to find a main launcher activity. 179194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn if (ris == null || ris.size() <= 0) { 180390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // reuse the intent instance 181390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.removeCategory(Intent.CATEGORY_INFO); 182390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); 183390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intentToResolve.setPackage(packageName); 184194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn ris = queryIntentActivities(intentToResolve, 0); 185390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 186194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn if (ris == null || ris.size() <= 0) { 187390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 188390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 189390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent intent = new Intent(intentToResolve); 190390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 191194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn intent.setClassName(ris.get(0).activityInfo.packageName, 192194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn ris.get(0).activityInfo.name); 193390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return intent; 194390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 195390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 196390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 197970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima public Intent getLeanbackLaunchIntentForPackage(String packageName) { 198970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima // Try to find a main leanback_launcher activity. 199970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 200970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima intentToResolve.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER); 201970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima intentToResolve.setPackage(packageName); 202970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0); 203970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima 204970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima if (ris == null || ris.size() <= 0) { 205970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima return null; 206970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima } 207970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima Intent intent = new Intent(intentToResolve); 208970417c7d3e33ccbd6918e28d9bc5da24651f5b3Jose Lima intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 209194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn intent.setClassName(ris.get(0).activityInfo.packageName, 210194157638ae59418b9d9cb4d73f7e285f59bc579Dianne Hackborn ris.get(0).activityInfo.name); 211390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return intent; 212390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 213390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 214390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2158588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey public int[] getPackageGids(String packageName) throws NameNotFoundException { 2168588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey return getPackageGids(packageName, 0); 2178588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey } 2188588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey 2198588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey @Override 2208588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey public int[] getPackageGids(String packageName, int flags) 221390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 222390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 223cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey int[] gids = mPM.getPackageGids(packageName, flags, mContext.getUserId()); 224c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav if (gids != null) { 225390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return gids; 226390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 227390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 228f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 229390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 230390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 231390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 232390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 233390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 234390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2358588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey public int getPackageUid(String packageName, int flags) throws NameNotFoundException { 2368588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey return getPackageUidAsUser(packageName, flags, mContext.getUserId()); 2378588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey } 2388588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey 2398588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey @Override 2408588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey public int getPackageUidAsUser(String packageName, int userId) throws NameNotFoundException { 2418588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey return getPackageUidAsUser(packageName, 0, userId); 2428588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey } 2438588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey 2448588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey @Override 2458588bc1ef1f020bbe4a24d46874f675708149a57Jeff Sharkey public int getPackageUidAsUser(String packageName, int flags, int userId) 246a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throws NameNotFoundException { 247a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 248cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey int uid = mPM.getPackageUid(packageName, flags, userId); 249a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (uid >= 0) { 250a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return uid; 251a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 252a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 253f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 254a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 255a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 256a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throw new NameNotFoundException(packageName); 257a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 258a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 259a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn @Override 260390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PermissionInfo getPermissionInfo(String name, int flags) 261390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 262390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 263390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PermissionInfo pi = mPM.getPermissionInfo(name, flags); 264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 266390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 267390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 268f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 270390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(name); 272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 273390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 274390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 275b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 276390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PermissionInfo> queryPermissionsByGroup(String group, int flags) 277390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 278390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 279b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<PermissionInfo> parceledList = 280b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryPermissionsByGroup(group, flags); 281b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList != null) { 282b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov List<PermissionInfo> pi = parceledList.getList(); 283b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (pi != null) { 284b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return pi; 285b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 286390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 287390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 288f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 289390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 290390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 291390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(group); 292390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 293390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 294390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2957b89a7b1f7c208eaac19290b34c5f505a9fd5ebaPaul Navin public boolean isPermissionReviewModeEnabled() { 2967b89a7b1f7c208eaac19290b34c5f505a9fd5ebaPaul Navin return mContext.getResources().getBoolean( 2977b89a7b1f7c208eaac19290b34c5f505a9fd5ebaPaul Navin com.android.internal.R.bool.config_permissionReviewRequired); 2987b89a7b1f7c208eaac19290b34c5f505a9fd5ebaPaul Navin } 2997b89a7b1f7c208eaac19290b34c5f505a9fd5ebaPaul Navin 3007b89a7b1f7c208eaac19290b34c5f505a9fd5ebaPaul Navin @Override 301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public PermissionGroupInfo getPermissionGroupInfo(String name, 302b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov int flags) throws NameNotFoundException { 303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick PermissionGroupInfo pgi = mPM.getPermissionGroupInfo(name, flags); 305390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pgi != null) { 306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pgi; 307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 309f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 310390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 311390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 312390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(name); 313390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 314390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 315390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 316b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 317390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PermissionGroupInfo> getAllPermissionGroups(int flags) { 318390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 319b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<PermissionGroupInfo> parceledList = 320b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getAllPermissionGroups(flags); 321b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 322b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 323b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 324b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 325390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 326f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 327390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 328390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 329390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 330390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 331390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ApplicationInfo getApplicationInfo(String packageName, int flags) 332390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 333cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey return getApplicationInfoAsUser(packageName, flags, mContext.getUserId()); 334cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey } 335cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey 336cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey @Override 337cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey public ApplicationInfo getApplicationInfoAsUser(String packageName, int flags, int userId) 338cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey throws NameNotFoundException { 339390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 340cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, userId); 341390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 342caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // This is a temporary hack. Callers must use 343caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // createPackageContext(packageName).getApplicationInfo() to 344caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // get the right paths. 345c9a0237f5f49f2ffa52affb1bfd3e190b2267f22Tao Bai return maybeAdjustApplicationInfo(ai); 346390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 347390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 348f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 349390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 350390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 351390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(packageName); 352390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 353390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 354c9a0237f5f49f2ffa52affb1bfd3e190b2267f22Tao Bai private static ApplicationInfo maybeAdjustApplicationInfo(ApplicationInfo info) { 355caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // If we're dealing with a multi-arch application that has both 356caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // 32 and 64 bit shared libraries, we might need to choose the secondary 357caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // depending on what the current runtime's instruction set is. 358caa711929416b12373d402b9dadb4367129daf87Narayan Kamath if (info.primaryCpuAbi != null && info.secondaryCpuAbi != null) { 359caa711929416b12373d402b9dadb4367129daf87Narayan Kamath final String runtimeIsa = VMRuntime.getRuntime().vmInstructionSet(); 3604741cd92d1a34d5e7a86b645498df00865f6c651jgu 3614741cd92d1a34d5e7a86b645498df00865f6c651jgu // Get the instruction set that the libraries of secondary Abi is supported. 3624741cd92d1a34d5e7a86b645498df00865f6c651jgu // In presence of a native bridge this might be different than the one secondary Abi used. 3634741cd92d1a34d5e7a86b645498df00865f6c651jgu String secondaryIsa = VMRuntime.getInstructionSet(info.secondaryCpuAbi); 3644741cd92d1a34d5e7a86b645498df00865f6c651jgu final String secondaryDexCodeIsa = SystemProperties.get("ro.dalvik.vm.isa." + secondaryIsa); 3654741cd92d1a34d5e7a86b645498df00865f6c651jgu secondaryIsa = secondaryDexCodeIsa.isEmpty() ? secondaryIsa : secondaryDexCodeIsa; 366caa711929416b12373d402b9dadb4367129daf87Narayan Kamath 367caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // If the runtimeIsa is the same as the primary isa, then we do nothing. 368caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // Everything will be set up correctly because info.nativeLibraryDir will 369caa711929416b12373d402b9dadb4367129daf87Narayan Kamath // correspond to the right ISA. 370caa711929416b12373d402b9dadb4367129daf87Narayan Kamath if (runtimeIsa.equals(secondaryIsa)) { 371c9a0237f5f49f2ffa52affb1bfd3e190b2267f22Tao Bai ApplicationInfo modified = new ApplicationInfo(info); 372c9a0237f5f49f2ffa52affb1bfd3e190b2267f22Tao Bai modified.nativeLibraryDir = info.secondaryNativeLibraryDir; 373c9a0237f5f49f2ffa52affb1bfd3e190b2267f22Tao Bai return modified; 374caa711929416b12373d402b9dadb4367129daf87Narayan Kamath } 375caa711929416b12373d402b9dadb4367129daf87Narayan Kamath } 376c9a0237f5f49f2ffa52affb1bfd3e190b2267f22Tao Bai return info; 377caa711929416b12373d402b9dadb4367129daf87Narayan Kamath } 378caa711929416b12373d402b9dadb4367129daf87Narayan Kamath 379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ActivityInfo getActivityInfo(ComponentName className, int flags) 381390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 383ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ActivityInfo ai = mPM.getActivityInfo(className, flags, mContext.getUserId()); 384390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 388f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ActivityInfo getReceiverInfo(ComponentName className, int flags) 396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 397390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 398ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ActivityInfo ai = mPM.getReceiverInfo(className, flags, mContext.getUserId()); 399390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ai != null) { 400390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ai; 401390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 402390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 403f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 405390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 406390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 407390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 408390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 409390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 410390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ServiceInfo getServiceInfo(ComponentName className, int flags) 411390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 412390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 413ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ServiceInfo si = mPM.getServiceInfo(className, flags, mContext.getUserId()); 414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (si != null) { 415390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return si; 416390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 417390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 418f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 419390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 420390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 421390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 424390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 425390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ProviderInfo getProviderInfo(ComponentName className, int flags) 426390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 427390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 428ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey ProviderInfo pi = mPM.getProviderInfo(className, flags, mContext.getUserId()); 429390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pi != null) { 430390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return pi; 431390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 432390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 433f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 434390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 435390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 436390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 437390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 438390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 439390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 440390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] getSystemSharedLibraryNames() { 441390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 442390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getSystemSharedLibraryNames(); 443390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 444f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 445390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 446390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 448d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov /** @hide */ 449d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov @Override 450a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov public @NonNull String getServicesSystemSharedLibraryPackageName() { 451d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov try { 452d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov return mPM.getServicesSystemSharedLibraryPackageName(); 453d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov } catch (RemoteException e) { 454f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 455d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov } 456d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov } 457d7b1f41109abee60ec8529369a85d84300b1d678Svet Ganov 458a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov /** 459a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov * @hide 460a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov */ 461a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov public @NonNull String getSharedSystemSharedLibraryPackageName() { 462a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov try { 463a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov return mPM.getSharedSystemSharedLibraryPackageName(); 464a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov } catch (RemoteException e) { 465a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov throw e.rethrowFromSystemServer(); 466a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov } 467a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov } 468a9c2500a6863dabdd786f17a25ce0bf3683109a2Svetoslav Ganov 469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 470b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public FeatureInfo[] getSystemAvailableFeatures() { 472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 473b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<FeatureInfo> parceledList = 474b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getSystemAvailableFeatures(); 475b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 476b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return new FeatureInfo[0]; 477b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 478b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov final List<FeatureInfo> list = parceledList.getList(); 479d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey final FeatureInfo[] res = new FeatureInfo[list.size()]; 480d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey for (int i = 0; i < res.length; i++) { 481d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey res[i] = list.get(i); 482d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey } 483d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey return res; 484390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 485f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean hasSystemFeature(String name) { 491115d2c189a46f535778d9dd0923f703ff2f888feJeff Sharkey return hasSystemFeature(name, 0); 492115d2c189a46f535778d9dd0923f703ff2f888feJeff Sharkey } 493115d2c189a46f535778d9dd0923f703ff2f888feJeff Sharkey 494115d2c189a46f535778d9dd0923f703ff2f888feJeff Sharkey @Override 495115d2c189a46f535778d9dd0923f703ff2f888feJeff Sharkey public boolean hasSystemFeature(String name, int version) { 496390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 497115d2c189a46f535778d9dd0923f703ff2f888feJeff Sharkey return mPM.hasSystemFeature(name, version); 498390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 499f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkPermission(String permName, String pkgName) { 505390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 506c6d1c345f41cf817bf2c07c97b97107d94296064Svetoslav return mPM.checkPermission(permName, pkgName, mContext.getUserId()); 507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 508f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 510390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 513ad3b2975574f916c14382628d50c710a78064746Svet Ganov public boolean isPermissionRevokedByPolicy(String permName, String pkgName) { 514ad3b2975574f916c14382628d50c710a78064746Svet Ganov try { 515ad3b2975574f916c14382628d50c710a78064746Svet Ganov return mPM.isPermissionRevokedByPolicy(permName, pkgName, mContext.getUserId()); 516ad3b2975574f916c14382628d50c710a78064746Svet Ganov } catch (RemoteException e) { 517f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 518ad3b2975574f916c14382628d50c710a78064746Svet Ganov } 519ad3b2975574f916c14382628d50c710a78064746Svet Ganov } 520ad3b2975574f916c14382628d50c710a78064746Svet Ganov 521f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov /** 522f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov * @hide 523f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov */ 524f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov @Override 525f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov public String getPermissionControllerPackageName() { 526f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov synchronized (mLock) { 527f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov if (mPermissionsControllerPackageName == null) { 528f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov try { 529f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov mPermissionsControllerPackageName = mPM.getPermissionControllerPackageName(); 530f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov } catch (RemoteException e) { 531f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 532f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov } 533f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov } 534f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov return mPermissionsControllerPackageName; 535f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov } 536f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov } 537f1b7f20bb839c96e8254ccb65398135f10fd45d9Svet Ganov 538ad3b2975574f916c14382628d50c710a78064746Svet Ganov @Override 539390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean addPermission(PermissionInfo info) { 540390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 541390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.addPermission(info); 542390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 543f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 544390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 548390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean addPermissionAsync(PermissionInfo info) { 549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 550390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.addPermissionAsync(info); 551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 552f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 557390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void removePermission(String name) { 558390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.removePermission(name); 560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 561f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 562390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 563390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 564390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 565390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 5668c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov public void grantRuntimePermission(String packageName, String permissionName, 5678c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov UserHandle user) { 568e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn try { 5698c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov mPM.grantRuntimePermission(packageName, permissionName, user.getIdentifier()); 570e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } catch (RemoteException e) { 571f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 572e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 573e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 574e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 575e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn @Override 5768c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov public void revokeRuntimePermission(String packageName, String permissionName, 5778c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov UserHandle user) { 578e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn try { 5798c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov mPM.revokeRuntimePermission(packageName, permissionName, user.getIdentifier()); 5808c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov } catch (RemoteException e) { 581f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 5828c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov } 5838c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov } 5848c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov 5858c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov @Override 5868c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov public int getPermissionFlags(String permissionName, String packageName, UserHandle user) { 5878c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov try { 5888c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov return mPM.getPermissionFlags(permissionName, packageName, user.getIdentifier()); 5898c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov } catch (RemoteException e) { 590f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 5918c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov } 5928c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov } 5938c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov 5948c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov @Override 5958c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov public void updatePermissionFlags(String permissionName, String packageName, 5968c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov int flagMask, int flagValues, UserHandle user) { 5978c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov try { 5988c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov mPM.updatePermissionFlags(permissionName, packageName, flagMask, 5998c7f700a59ad26e75c9791335d78f14322cad49aSvet Ganov flagValues, user.getIdentifier()); 600e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } catch (RemoteException e) { 601f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 602e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 603e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn } 604e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn 605e639da7baa23121e35aa06d6e182558e0e755696Dianne Hackborn @Override 60620770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav public boolean shouldShowRequestPermissionRationale(String permission) { 60720770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav try { 60820770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav return mPM.shouldShowRequestPermissionRationale(permission, 60920770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav mContext.getPackageName(), mContext.getUserId()); 61020770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav } catch (RemoteException e) { 611f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 61220770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav } 61320770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav } 61420770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav 61520770ddbd4d6f2af0093f36462a8f44a678b084bSvetoslav @Override 616390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkSignatures(String pkg1, String pkg2) { 617390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 618390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkSignatures(pkg1, pkg2); 619390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 620f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 621390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 622390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 623390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 624390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 625390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int checkSignatures(int uid1, int uid2) { 626390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 627390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.checkUidSignatures(uid1, uid2); 628390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 629f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 630390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 631390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 632390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 633390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 634390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String[] getPackagesForUid(int uid) { 635390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 636390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPackagesForUid(uid); 637390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 638f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 639390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 640390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 641390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 642390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 643390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String getNameForUid(int uid) { 644390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 645390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getNameForUid(uid); 646390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 647f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 648390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 649390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 650390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 651390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 652390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getUidForSharedUser(String sharedUserName) 653390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 654390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 655390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int uid = mPM.getUidForSharedUser(sharedUserName); 656390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if(uid != -1) { 657390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return uid; 658390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 659390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 660f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 661390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 662390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException("No shared userid for user:"+sharedUserName); 663390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 664390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 665e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root @SuppressWarnings("unchecked") 666390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 667390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PackageInfo> getInstalledPackages(int flags) { 668e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey return getInstalledPackagesAsUser(flags, mContext.getUserId()); 669151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani } 670151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani 671151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani /** @hide */ 672151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani @Override 673b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 674e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public List<PackageInfo> getInstalledPackagesAsUser(int flags, int userId) { 675390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 676b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<PackageInfo> parceledList = 677b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getInstalledPackages(flags, userId); 678b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 679b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 680b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 681b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 682390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 683f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 684390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 685390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 686390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 687e6cd0c747e76723bc51a23925c239ae10f9d3b5cKenny Root @SuppressWarnings("unchecked") 688390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 689e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn public List<PackageInfo> getPackagesHoldingPermissions( 690e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn String[] permissions, int flags) { 691e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn final int userId = mContext.getUserId(); 692e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn try { 693b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<PackageInfo> parceledList = 694b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getPackagesHoldingPermissions(permissions, flags, userId); 695b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 696b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 697b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 698b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 699e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn } catch (RemoteException e) { 700f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 701e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn } 702e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn } 703e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn 704e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn @SuppressWarnings("unchecked") 705e799175b6ba3aadd972f4b861758d675d1f93987Dianne Hackborn @Override 706390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ApplicationInfo> getInstalledApplications(int flags) { 707ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey final int userId = mContext.getUserId(); 708390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 709b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ApplicationInfo> parceledList = 710b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getInstalledApplications(flags, userId); 711b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 712b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 713b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 714b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 715390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 716f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 717390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 718390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 719390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 7202acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov /** @hide */ 7212acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @SuppressWarnings("unchecked") 7222acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @Override 7232acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov public List<EphemeralApplicationInfo> getEphemeralApplications() { 7242acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov try { 7252acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov ParceledListSlice<EphemeralApplicationInfo> slice = 7262acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov mPM.getEphemeralApplications(mContext.getUserId()); 7272acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov if (slice != null) { 7282acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return slice.getList(); 7292acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7302acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return Collections.emptyList(); 7312acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } catch (RemoteException e) { 732f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 7332acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7342acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7352acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 7362acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov /** @hide */ 7372acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @Override 7382acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov public Drawable getEphemeralApplicationIcon(String packageName) { 7392acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov try { 7402acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov Bitmap bitmap = mPM.getEphemeralApplicationIcon( 7412acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov packageName, mContext.getUserId()); 7422acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov if (bitmap != null) { 7432acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return new BitmapDrawable(null, bitmap); 7442acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7452acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return null; 7462acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } catch (RemoteException e) { 747f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 7482acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7492acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7502acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 7512acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @Override 7522acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov public boolean isEphemeralApplication() { 7532acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov try { 7542acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return mPM.isEphemeralApplication( 7552acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov mContext.getPackageName(), mContext.getUserId()); 7562acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } catch (RemoteException e) { 757f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 7582acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7592acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7602acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 7612acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @Override 7622acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov public int getEphemeralCookieMaxSizeBytes() { 7632acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return Settings.Global.getInt(mContext.getContentResolver(), 7642acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov Settings.Global.EPHEMERAL_COOKIE_MAX_SIZE_BYTES, 7652acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov DEFAULT_EPHEMERAL_COOKIE_MAX_SIZE_BYTES); 7662acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7672acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 7682acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @Override 7692acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov public @NonNull byte[] getEphemeralCookie() { 7702acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov try { 7712acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov final byte[] cookie = mPM.getEphemeralApplicationCookie( 7722acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov mContext.getPackageName(), mContext.getUserId()); 7732acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov if (cookie != null) { 7742acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return cookie; 77527b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey } else { 77627b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey return EmptyArray.BYTE; 7772acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7782acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } catch (RemoteException e) { 779f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 7802acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7812acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7822acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 7832acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov @Override 7842acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov public boolean setEphemeralCookie(@NonNull byte[] cookie) { 7852acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov try { 7862acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov return mPM.setEphemeralApplicationCookie( 7872acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov mContext.getPackageName(), cookie, mContext.getUserId()); 7882acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } catch (RemoteException e) { 789f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 7902acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7912acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov } 7922acf063da08dfff69f184c9a6a90a7a5fe60d818Svet Ganov 793390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 794390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ResolveInfo resolveActivity(Intent intent, int flags) { 795ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return resolveActivityAsUser(intent, flags, mContext.getUserId()); 79658d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov } 79758d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov 79858d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov @Override 79958d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId) { 800390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 801390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveIntent( 802390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 803390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 80458d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov flags, 80558d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov userId); 806390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 807f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 808390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 809390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 810390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 811390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 812390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentActivities(Intent intent, 813390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 814ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return queryIntentActivitiesAsUser(intent, flags, mContext.getUserId()); 815151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani } 816151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani 817151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani /** @hide Same as above but for a specific user */ 818151ec4c9f8ca34625733730a4551a23eb97cda23Amith Yamasani @Override 819b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 82058d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, 821b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov int flags, int userId) { 822b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov try { 823b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ResolveInfo> parceledList = 824b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryIntentActivities(intent, 825b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov intent.resolveTypeIfNeeded(mContext.getContentResolver()), 826b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov flags, userId); 827b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 828b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 829b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 830b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 831390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 832f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 833390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 834390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 835390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 836390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 837b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 838390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ResolveInfo> queryIntentActivityOptions( 839390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName caller, Intent[] specifics, Intent intent, 840390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int flags) { 841390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final ContentResolver resolver = mContext.getContentResolver(); 842390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 843390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String[] specificTypes = null; 844390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (specifics != null) { 845390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final int N = specifics.length; 846390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick for (int i=0; i<N; i++) { 847390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Intent sp = specifics[i]; 848390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (sp != null) { 849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String t = sp.resolveTypeIfNeeded(resolver); 850390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (t != null) { 851390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (specificTypes == null) { 852390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes = new String[N]; 853390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 854390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick specificTypes[i] = t; 855390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 856390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 857390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 858390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 859390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 861b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ResolveInfo> parceledList = 862b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryIntentActivityOptions(caller, specifics, specificTypes, intent, 863b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov intent.resolveTypeIfNeeded(resolver), flags, mContext.getUserId()); 864b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 865b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 866b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 867b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 868390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 869f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 870390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 871390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 872390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 873f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani /** 874f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani * @hide 875f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani */ 876390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 877b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 878e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent, int flags, int userId) { 879390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 880b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ResolveInfo> parceledList = 881b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryIntentReceivers(intent, 882b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov intent.resolveTypeIfNeeded(mContext.getContentResolver()), 883b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov flags, userId); 884b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 885b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 886b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 887b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 888390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 889f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 890390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 891390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 892390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 893390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 894f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) { 895e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey return queryBroadcastReceiversAsUser(intent, flags, mContext.getUserId()); 896f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani } 897f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani 898f203aeef993b0f4ce65c9630d06bbd50a504e89fAmith Yamasani @Override 899390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public ResolveInfo resolveService(Intent intent, int flags) { 900390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 901390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.resolveService( 902390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, 903390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent.resolveTypeIfNeeded(mContext.getContentResolver()), 904483f3b06ea84440a082e21b68ec2c2e54046f5a6Amith Yamasani flags, 905ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mContext.getUserId()); 906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 907f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 909390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 910390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 911390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 912b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 91358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId) { 914390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 915b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ResolveInfo> parceledList = 916b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryIntentServices(intent, 917b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov intent.resolveTypeIfNeeded(mContext.getContentResolver()), 918b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov flags, userId); 919b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 920b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 921b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 922b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 924f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 926390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 928390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 92958d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov public List<ResolveInfo> queryIntentServices(Intent intent, int flags) { 930ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return queryIntentServicesAsUser(intent, flags, mContext.getUserId()); 93158d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov } 93258d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov 93358d37b55bd228032355360ea3303e46a804e0516Svetoslav Ganov @Override 934b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 93585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey public List<ResolveInfo> queryIntentContentProvidersAsUser( 93685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey Intent intent, int flags, int userId) { 93785f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey try { 938b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ResolveInfo> parceledList = 939b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryIntentContentProviders(intent, 940b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov intent.resolveTypeIfNeeded(mContext.getContentResolver()), 941b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov flags, userId); 942b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 943b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 944b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 945b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 94685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } catch (RemoteException e) { 947f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 94885f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 94985f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 95085f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 95185f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey @Override 95285f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) { 95385f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey return queryIntentContentProvidersAsUser(intent, flags, mContext.getUserId()); 95485f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey } 95585f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey 95685f5f8132015d8a5043ea4413702420d0d157c9fJeff Sharkey @Override 9570363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina public ProviderInfo resolveContentProvider(String name, int flags) { 9580363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina return resolveContentProviderAsUser(name, flags, mContext.getUserId()); 9590363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina } 9600363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina 9610363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina /** @hide **/ 9620363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina @Override 9630363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina public ProviderInfo resolveContentProviderAsUser(String name, int flags, int userId) { 964390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 9650363c3eb089afd4474bfd6ae6ee8a500d6e97614Alexandra Gherghina return mPM.resolveContentProvider(name, flags, userId); 966390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 967f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 971390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 972b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 973390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<ProviderInfo> queryContentProviders(String processName, 974b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov int uid, int flags) { 975390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 976b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<ProviderInfo> slice = 977b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryContentProviders(processName, uid, flags); 978b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return slice != null ? slice.getList() : Collections.<ProviderInfo>emptyList(); 979390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 980f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 981390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 982390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 983390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 984390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 985390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public InstrumentationInfo getInstrumentationInfo( 986390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ComponentName className, int flags) 987390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 988390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 989390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick InstrumentationInfo ii = mPM.getInstrumentationInfo( 990390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick className, flags); 991390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (ii != null) { 992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return ii; 993390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 995f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 998390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(className.toString()); 999390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1000390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1001390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1002b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 1003390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<InstrumentationInfo> queryInstrumentation( 1004390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String targetPackage, int flags) { 1005390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1006b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<InstrumentationInfo> parceledList = 1007b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.queryInstrumentation(targetPackage, flags); 1008b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 1009b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 1010b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 1011b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 1012390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1013f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1017ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Nullable 1018ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Override 1019ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette public Drawable getDrawable(String packageName, @DrawableRes int resId, 1020ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Nullable ApplicationInfo appInfo) { 1021ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette final ResourceName name = new ResourceName(packageName, resId); 1022ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette final Drawable cachedIcon = getCachedIcon(name); 1023ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette if (cachedIcon != null) { 1024ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette return cachedIcon; 1025390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1026ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette 1027390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 1028390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1029d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski appInfo = getApplicationInfo(packageName, sDefaultFlags); 1030390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1031390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1032390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1033390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1034ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette 1035ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette if (resId != 0) { 1036ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette try { 1037ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette final Resources r = getResourcesForApplication(appInfo); 1038ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette final Drawable dr = r.getDrawable(resId, null); 1039ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette if (dr != null) { 1040ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette putCachedIcon(name, dr); 1041ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette } 1042ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette 1043ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette if (false) { 1044ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette RuntimeException e = new RuntimeException("here"); 1045ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette e.fillInStackTrace(); 1046ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette Log.w(TAG, "Getting drawable 0x" + Integer.toHexString(resId) 1047ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + " from package " + packageName 1048ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + ": app scale=" + r.getCompatibilityInfo().applicationScale 1049ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + ", caller scale=" + mContext.getResources() 1050ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette .getCompatibilityInfo().applicationScale, 1051ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette e); 1052ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette } 10533ce4625ac6d8a0ffdc50675406e98c0ad904d96aRicky Wai if (DEBUG_ICONS) { 1054ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette Log.v(TAG, "Getting drawable 0x" 1055ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + Integer.toHexString(resId) + " from " + r 1056ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + ": " + dr); 10573ce4625ac6d8a0ffdc50675406e98c0ad904d96aRicky Wai } 10583ce4625ac6d8a0ffdc50675406e98c0ad904d96aRicky Wai return dr; 1059ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette } catch (NameNotFoundException e) { 1060ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette Log.w("PackageManager", "Failure retrieving resources for " 1061ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + appInfo.packageName); 1062ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette } catch (Resources.NotFoundException e) { 1063ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette Log.w("PackageManager", "Failure retrieving resources for " 1064ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + appInfo.packageName + ": " + e.getMessage()); 1065ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette } catch (Exception e) { 1066ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette // If an exception was thrown, fall through to return 1067ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette // default icon. 1068ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette Log.w("PackageManager", "Failure retrieving icon 0x" 1069ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + Integer.toHexString(resId) + " in package " 1070ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette + packageName, e); 1071390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1072390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1073ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette 1074390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1075390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1076390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1077390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getActivityIcon(ComponentName activityName) 1078390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1079d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getActivityInfo(activityName, sDefaultFlags).loadIcon(this); 1080390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1081390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1082390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getActivityIcon(Intent intent) 1083390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1084390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (intent.getComponent() != null) { 1085390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityIcon(intent.getComponent()); 1086390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1087390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1088390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo info = resolveActivity( 1089390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, PackageManager.MATCH_DEFAULT_ONLY); 1090390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (info != null) { 1091390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.activityInfo.loadIcon(this); 1092390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1093390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 109439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy throw new NameNotFoundException(intent.toUri(0)); 1095390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1096390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1097390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getDefaultActivityIcon() { 1098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return Resources.getSystem().getDrawable( 1099390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick com.android.internal.R.drawable.sym_def_app_icon); 1100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getApplicationIcon(ApplicationInfo info) { 1103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadIcon(this); 1104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override public Drawable getApplicationIcon(String packageName) 1107390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1108d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getApplicationIcon(getApplicationInfo(packageName, sDefaultFlags)); 1109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1110390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1112f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getActivityBanner(ComponentName activityName) 1113f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throws NameNotFoundException { 1114d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getActivityInfo(activityName, sDefaultFlags).loadBanner(this); 1115f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 1116f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 1117f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 1118f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getActivityBanner(Intent intent) 1119f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throws NameNotFoundException { 1120f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (intent.getComponent() != null) { 1121f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return getActivityBanner(intent.getComponent()); 1122f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 1123f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 1124f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima ResolveInfo info = resolveActivity( 1125f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima intent, PackageManager.MATCH_DEFAULT_ONLY); 1126f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima if (info != null) { 1127f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return info.activityInfo.loadBanner(this); 1128f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 1129f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 1130f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throw new NameNotFoundException(intent.toUri(0)); 1131f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 1132f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 1133f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 1134f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getApplicationBanner(ApplicationInfo info) { 1135f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima return info.loadBanner(this); 1136f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 1137f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 1138f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 1139f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima public Drawable getApplicationBanner(String packageName) 1140f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima throws NameNotFoundException { 1141d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getApplicationBanner(getApplicationInfo(packageName, sDefaultFlags)); 1142f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima } 1143f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima 1144f78e312db2aa7653ddc021e7dc58ce48f95ba047Jose Lima @Override 1145390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getActivityLogo(ComponentName activityName) 1146390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1147d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getActivityInfo(activityName, sDefaultFlags).loadLogo(this); 1148390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1149390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1150390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1151390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getActivityLogo(Intent intent) 1152390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1153390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (intent.getComponent() != null) { 1154390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getActivityLogo(intent.getComponent()); 1155390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1156390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1157390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResolveInfo info = resolveActivity( 1158390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick intent, PackageManager.MATCH_DEFAULT_ONLY); 1159390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (info != null) { 1160390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.activityInfo.loadLogo(this); 1161390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1162390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1163390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throw new NameNotFoundException(intent.toUri(0)); 1164390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1165390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1166390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1167390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getApplicationLogo(ApplicationInfo info) { 1168390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadLogo(this); 1169390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1170390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1171390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1172390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public Drawable getApplicationLogo(String packageName) 1173390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick throws NameNotFoundException { 1174d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski return getApplicationLogo(getApplicationInfo(packageName, sDefaultFlags)); 1175390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1176390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1177c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 117866ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev public Drawable getManagedUserBadgedDrawable(Drawable drawable, Rect badgeLocation, 117966ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev int badgeDensity) { 118066ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev Drawable badgeDrawable = getDrawableForDensity( 118166ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev com.android.internal.R.drawable.ic_corp_badge, badgeDensity); 118266ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev return getBadgedDrawable(drawable, badgeDrawable, badgeLocation, true); 118366ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev } 118466ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev 118566ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev @Override 1186c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) { 1187c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final int badgeResId = getBadgeResIdForUser(user.getIdentifier()); 1188c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeResId == 0) { 1189c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return icon; 1190c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1191c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Drawable badgeIcon = getDrawable("system", badgeResId, null); 1192c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return getBadgedDrawable(icon, badgeIcon, null, true); 1193c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1194c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1195c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 1196c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public Drawable getUserBadgedDrawableForDensity(Drawable drawable, UserHandle user, 1197c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Rect badgeLocation, int badgeDensity) { 1198c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Drawable badgeDrawable = getUserBadgeForDensity(user, badgeDensity); 1199c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeDrawable == null) { 1200c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return drawable; 1201c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1202c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return getBadgedDrawable(drawable, badgeDrawable, badgeLocation, true); 1203c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1204c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1205c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 1206c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public Drawable getUserBadgeForDensity(UserHandle user, int density) { 120766ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev return getManagedProfileIconForDensity(user, com.android.internal.R.drawable.ic_corp_badge, 120866ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev density); 1209e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93Selim Cinek } 1210e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93Selim Cinek 1211e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93Selim Cinek @Override 1212e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93Selim Cinek public Drawable getUserBadgeForDensityNoBackground(UserHandle user, int density) { 121366ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev return getManagedProfileIconForDensity(user, 121466ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev com.android.internal.R.drawable.ic_corp_badge_no_background, density); 1215e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93Selim Cinek } 1216e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93Selim Cinek 121766ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev private Drawable getDrawableForDensity(int drawableId, int density) { 121866ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev if (density <= 0) { 121966ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev density = mContext.getResources().getDisplayMetrics().densityDpi; 122066ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev } 122166ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev return Resources.getSystem().getDrawableForDensity(drawableId, density); 122266ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev } 122366ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev 122466ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev private Drawable getManagedProfileIconForDensity(UserHandle user, int drawableId, int density) { 12258673b2899e775014336efff44ea88dcac2b25bddTony Mak if (isManagedProfile(user.getIdentifier())) { 122666ae66a7f74ee835807a141a216afbb254664510Vadim Tryshev return getDrawableForDensity(drawableId, density); 1227c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1228c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return null; 1229c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1230c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1231c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav @Override 1232c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav public CharSequence getUserBadgedLabel(CharSequence label, UserHandle user) { 12338673b2899e775014336efff44ea88dcac2b25bddTony Mak if (isManagedProfile(user.getIdentifier())) { 1234c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return Resources.getSystem().getString( 1235c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav com.android.internal.R.string.managed_profile_label_badge, label); 1236c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1237c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return label; 1238c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 1239c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 1240ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Override 1241ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette public Resources getResourcesForActivity(ComponentName activityName) 1242ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette throws NameNotFoundException { 1243390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getResourcesForApplication( 1244d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski getActivityInfo(activityName, sDefaultFlags).applicationInfo); 1245390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1246390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1247ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Override 1248ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette public Resources getResourcesForApplication(@NonNull ApplicationInfo app) 1249ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette throws NameNotFoundException { 1250390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (app.packageName.equals("system")) { 1251390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mContext.mMainThread.getSystemContext().getResources(); 1252390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 12538a4c9721a9e09d20c63381c13fa29bd9f7cbc3e3Jeff Sharkey final boolean sameUid = (app.uid == Process.myUid()); 125453fafdfbe76d3eeb0fe6782873a03869167a65b0Adam Lesinski final Resources r = mContext.mMainThread.getTopLevelResources( 1255c82f28a91370a2b01d36e35ca149a3da58b38f60Adam Lesinski sameUid ? app.sourceDir : app.publicSourceDir, 1256c82f28a91370a2b01d36e35ca149a3da58b38f60Adam Lesinski sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs, 1257c82f28a91370a2b01d36e35ca149a3da58b38f60Adam Lesinski app.resourceDirs, app.sharedLibraryFiles, Display.DEFAULT_DISPLAY, 1258c82f28a91370a2b01d36e35ca149a3da58b38f60Adam Lesinski mContext.mPackageInfo); 125953fafdfbe76d3eeb0fe6782873a03869167a65b0Adam Lesinski if (r != null) { 126053fafdfbe76d3eeb0fe6782873a03869167a65b0Adam Lesinski return r; 1261c82f28a91370a2b01d36e35ca149a3da58b38f60Adam Lesinski } 126253fafdfbe76d3eeb0fe6782873a03869167a65b0Adam Lesinski throw new NameNotFoundException("Unable to open " + app.publicSourceDir); 126353fafdfbe76d3eeb0fe6782873a03869167a65b0Adam Lesinski 1264390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1265390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1266ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Override 1267ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette public Resources getResourcesForApplication(String appPackageName) 1268ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette throws NameNotFoundException { 1269390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return getResourcesForApplication( 1270d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski getApplicationInfo(appPackageName, sDefaultFlags)); 1271390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1272390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 127398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani /** @hide */ 127498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani @Override 127598edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani public Resources getResourcesForApplicationAsUser(String appPackageName, int userId) 127698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani throws NameNotFoundException { 1277ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey if (userId < 0) { 1278ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey throw new IllegalArgumentException( 1279ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey "Call does not support special user #" + userId); 1280ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey } 1281ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey if ("system".equals(appPackageName)) { 1282ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return mContext.mMainThread.getSystemContext().getResources(); 1283ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey } 128498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani try { 1285d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski ApplicationInfo ai = mPM.getApplicationInfo(appPackageName, sDefaultFlags, userId); 128698edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani if (ai != null) { 128798edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani return getResourcesForApplication(ai); 128898edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } 128998edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } catch (RemoteException e) { 1290f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 129198edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } 129298edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani throw new NameNotFoundException("Package " + appPackageName + " doesn't exist"); 129398edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani } 129498edc951712823dbf5db2b7e9c203a0e98fc616bAmith Yamasani 1295cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey volatile int mCachedSafeMode = -1; 1296cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey 1297cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey @Override 1298cd65448ccd13c4c2d0fe9e9623fec3a898ab9372Jeff Sharkey public boolean isSafeMode() { 1299390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1300390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (mCachedSafeMode < 0) { 1301390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mCachedSafeMode = mPM.isSafeMode() ? 1 : 0; 1302390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1303390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mCachedSafeMode != 0; 1304390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1305f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1306390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1307390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1308390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1309f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav @Override 1310f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav public void addOnPermissionsChangeListener(OnPermissionsChangedListener listener) { 1311f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav synchronized (mPermissionListeners) { 1312f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav if (mPermissionListeners.get(listener) != null) { 1313f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav return; 1314f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1315f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav OnPermissionsChangeListenerDelegate delegate = 1316f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav new OnPermissionsChangeListenerDelegate(listener, Looper.getMainLooper()); 1317f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav try { 1318f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mPM.addOnPermissionsChangeListener(delegate); 1319f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mPermissionListeners.put(listener, delegate); 1320f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } catch (RemoteException e) { 1321f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1322f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1323f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1324f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1325f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 1326f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav @Override 1327f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav public void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener) { 1328f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav synchronized (mPermissionListeners) { 1329f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav IOnPermissionsChangeListener delegate = mPermissionListeners.get(listener); 1330f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav if (delegate != null) { 1331f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav try { 1332f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mPM.removeOnPermissionsChangeListener(delegate); 1333f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mPermissionListeners.remove(listener); 1334f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } catch (RemoteException e) { 1335f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1336f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1337f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1338f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1339f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 1340f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 1341390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick static void configurationChanged() { 1342390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1343390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.clear(); 1344390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.clear(); 1345390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1346390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1347390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1348390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationPackageManager(ContextImpl context, 1349390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageManager pm) { 1350390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mContext = context; 1351390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM = pm; 1352390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1353390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1354ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette @Nullable 1355ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette private Drawable getCachedIcon(@NonNull ResourceName name) { 1356390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1357ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette final WeakReference<Drawable.ConstantState> wr = sIconCache.get(name); 1358390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (DEBUG_ICONS) Log.v(TAG, "Get cached weak drawable ref for " 1359390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + name + ": " + wr); 1360390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (wr != null) { // we have the activity 1361ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette final Drawable.ConstantState state = wr.get(); 136239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy if (state != null) { 136339fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy if (DEBUG_ICONS) { 136439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy Log.v(TAG, "Get cached drawable state for " + name + ": " + state); 136539fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy } 136639fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // Note: It's okay here to not use the newDrawable(Resources) variant 136739fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // of the API. The ConstantState comes from a drawable that was 136839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // originally created by passing the proper app Resources instance 136939fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // which means the state should already contain the proper 137039fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // resources specific information (like density.) See 137139fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy // BitmapDrawable.BitmapState for instance. 137239fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy return state.newDrawable(); 1373390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1374390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // our entry has been purged 1375390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sIconCache.remove(name); 1376390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1377390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1378390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1379390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1380390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1381ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette private void putCachedIcon(@NonNull ResourceName name, @NonNull Drawable dr) { 1382390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1383ecd585a8fd2ae17479ae698193d5b04b602c5b70Alan Viverette sIconCache.put(name, new WeakReference<>(dr.getConstantState())); 138439fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy if (DEBUG_ICONS) Log.v(TAG, "Added cached drawable state for " + name + ": " + dr); 1385390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1386390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1387390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 138839fe17c8fb764a9233182cc408e37b1a59182b00Romain Guy static void handlePackageBroadcast(int cmd, String[] pkgList, boolean hasPkgInfo) { 1389390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean immediateGc = false; 1390390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (cmd == IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE) { 1391390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick immediateGc = true; 1392390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1393390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (pkgList != null && (pkgList.length > 0)) { 1394390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick boolean needCleanup = false; 1395390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick for (String ssp : pkgList) { 1396390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1397add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn for (int i=sIconCache.size()-1; i>=0; i--) { 1398add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn ResourceName nm = sIconCache.keyAt(i); 1399add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn if (nm.packageName.equals(ssp)) { 1400add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn //Log.i(TAG, "Removing cached drawable for " + nm); 1401add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn sIconCache.removeAt(i); 1402add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn needCleanup = true; 1403390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1404390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1405add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn for (int i=sStringCache.size()-1; i>=0; i--) { 1406add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn ResourceName nm = sStringCache.keyAt(i); 1407add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn if (nm.packageName.equals(ssp)) { 1408add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn //Log.i(TAG, "Removing cached string for " + nm); 1409add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn sStringCache.removeAt(i); 1410add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn needCleanup = true; 1411390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1412390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1413390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1414390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1415390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (needCleanup || hasPkgInfo) { 1416390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (immediateGc) { 1417390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // Schedule an immediate gc. 1418390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Runtime.getRuntime().gc(); 1419390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } else { 1420390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ActivityThread.currentActivityThread().scheduleGcIdler(); 1421390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1424390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1425390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1426390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final class ResourceName { 1427390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final String packageName; 1428390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick final int iconId; 1429390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1430390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(String _packageName, int _iconId) { 1431390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick packageName = _packageName; 1432390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick iconId = _iconId; 1433390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1434390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1435390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ApplicationInfo aInfo, int _iconId) { 1436390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(aInfo.packageName, _iconId); 1437390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1438390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1439390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ComponentInfo cInfo, int _iconId) { 1440390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(cInfo.applicationInfo.packageName, _iconId); 1441390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1442390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1443390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName(ResolveInfo rInfo, int _iconId) { 1444390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick this(rInfo.activityInfo.applicationInfo.packageName, _iconId); 1445390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1446390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1447390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1448390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public boolean equals(Object o) { 1449390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (this == o) return true; 1450390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (o == null || getClass() != o.getClass()) return false; 1451390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1452390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName that = (ResourceName) o; 1453390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1454390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (iconId != that.iconId) return false; 1455390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return !(packageName != null ? 1456390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick !packageName.equals(that.packageName) : that.packageName != null); 1457390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1458390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1459390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1460390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1461390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int hashCode() { 1462390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int result; 1463390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick result = packageName.hashCode(); 1464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick result = 31 * result + iconId; 1465390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return result; 1466390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1467390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1468390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1469390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public String toString() { 1470390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return "{ResourceName " + packageName + " / " + iconId + "}"; 1471390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1472390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1473390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1474390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private CharSequence getCachedString(ResourceName name) { 1475390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1476390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick WeakReference<CharSequence> wr = sStringCache.get(name); 1477390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (wr != null) { // we have the activity 1478390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick CharSequence cs = wr.get(); 1479390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (cs != null) { 1480390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return cs; 1481390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1482390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // our entry has been purged 1483390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.remove(name); 1484390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1485390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1486390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1487390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1488390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1489390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private void putCachedString(ResourceName name, CharSequence cs) { 1490390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick synchronized (sSync) { 1491390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick sStringCache.put(name, new WeakReference<CharSequence>(cs)); 1492390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1493390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1494390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1495390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 14967b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbye public CharSequence getText(String packageName, @StringRes int resid, 1497390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 1498390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ResourceName name = new ResourceName(packageName, resid); 1499390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick CharSequence text = getCachedString(name); 1500390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (text != null) { 1501390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return text; 1502390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1503390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 1504390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1505d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski appInfo = getApplicationInfo(packageName, sDefaultFlags); 1506390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1507390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1508390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1509390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1510390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1511390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 1512390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick text = r.getText(resid); 1513390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick putCachedString(name, text); 1514390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return text; 1515390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1516aec68bb89fe614181a20eb97340149406218ce2fDianne Hackborn Log.w("PackageManager", "Failure retrieving resources for " 1517390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 1518390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 1519390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 1520390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 1521390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving text 0x" 1522390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 1523390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 1524390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1525390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1526390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1527390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1528390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 15297b9c912f536925ac6ec43935d6e97506851b33d6Tor Norbye public XmlResourceParser getXml(String packageName, @XmlRes int resid, 1530390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick ApplicationInfo appInfo) { 1531390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick if (appInfo == null) { 1532390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1533d00bb5edcfc8ee5c2026f66785b703b388314b22Adam Lesinski appInfo = getApplicationInfo(packageName, sDefaultFlags); 1534390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 1535390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1536390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1537390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1538390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1539390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Resources r = getResourcesForApplication(appInfo); 1540390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return r.getXml(resid); 1541390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RuntimeException e) { 1542390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // If an exception was thrown, fall through to return 1543390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick // default icon. 1544390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick Log.w("PackageManager", "Failure retrieving xml 0x" 1545390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + Integer.toHexString(resid) + " in package " 1546390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + packageName, e); 1547390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (NameNotFoundException e) { 15483fa51e3430e3bf902ae4f2d72dfb956103b6bd2dAlon Albert Log.w("PackageManager", "Failure retrieving resources for " 1549390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick + appInfo.packageName); 1550390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1551390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return null; 1552390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1553390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1554390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1555390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public CharSequence getApplicationLabel(ApplicationInfo info) { 1556390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return info.loadLabel(this); 1557390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1558390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1559390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1560390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags, 1561390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick String installerPackageName) { 1562513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey installCommon(packageURI, new LegacyPackageInstallObserver(observer), flags, 1563a67932374dbbfbe4c6440d223fc7922b313dd957Todd Kennedy installerPackageName, mContext.getUserId()); 1564f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate } 1565f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate 1566f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate @Override 1567f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate public void installPackage(Uri packageURI, PackageInstallObserver observer, 1568f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate int flags, String installerPackageName) { 1569a67932374dbbfbe4c6440d223fc7922b313dd957Todd Kennedy installCommon(packageURI, observer, flags, installerPackageName, mContext.getUserId()); 1570513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey } 1571513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey 1572513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey private void installCommon(Uri packageURI, 1573513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey PackageInstallObserver observer, int flags, String installerPackageName, 15749a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot int userId) { 1575513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey if (!"file".equals(packageURI.getScheme())) { 1576513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey throw new UnsupportedOperationException("Only file:// URIs are supported"); 1577513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey } 1578513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey 1579513a074de68a4772a9900e90f38e74ff92c15e7cJeff Sharkey final String originPath = packageURI.getPath(); 1580f1977b4500e82b72ea6aa5c46d97406a20017cafChristopher Tate try { 15819a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot mPM.installPackageAsUser(originPath, observer.getBinder(), flags, installerPackageName, 1582a67932374dbbfbe4c6440d223fc7922b313dd957Todd Kennedy userId); 158327b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey } catch (RemoteException e) { 1584f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1585706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 1586706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings } 1587706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings 1588706e8ba26bf0de19ad5f736516dae40c4c88c2d7rich cannings @Override 15899a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot public int installExistingPackage(String packageName) throws NameNotFoundException { 15900e27c87af691bc53d320496bbffa58752608608dRobin Lee return installExistingPackageAsUser(packageName, mContext.getUserId()); 15919a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot } 15929a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot 15939a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot @Override 15949a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot public int installExistingPackageAsUser(String packageName, int userId) 15957767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn throws NameNotFoundException { 15967767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn try { 15979a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot int res = mPM.installExistingPackageAsUser(packageName, userId); 15987767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn if (res == INSTALL_FAILED_INVALID_URI) { 15997767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn throw new NameNotFoundException("Package " + packageName + " doesn't exist"); 16007767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } 16017767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn return res; 16027767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } catch (RemoteException e) { 1603f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16047767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } 16057767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn } 16067767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn 16077767eac3232ba2fb9828766813cdb481d6a97584Dianne Hackborn @Override 16083a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root public void verifyPendingInstall(int id, int response) { 16095ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root try { 16103a9b5fbb97e65019abec97f172b4cbf2100d1225Kenny Root mPM.verifyPendingInstall(id, response); 16115ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } catch (RemoteException e) { 1612f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16135ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } 16145ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root } 16155ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root 16165ab2157bf1f105b02d3e2913cd3a33f9765b74caKenny Root @Override 1617d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings public void extendVerificationTimeout(int id, int verificationCodeAtTimeout, 1618d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings long millisecondsToDelay) { 1619d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings try { 1620d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings mPM.extendVerificationTimeout(id, verificationCodeAtTimeout, millisecondsToDelay); 1621d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings } catch (RemoteException e) { 1622f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1623d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings } 1624d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings } 1625d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings 1626d9ef3e5495db1c46bcfcc1a2d4386af8db6deb0crich cannings @Override 1627dfa93abf2f64237007af8e72c4a4114a5258e858Todd Kennedy public void verifyIntentFilter(int id, int verificationCode, List<String> failedDomains) { 16281c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio try { 1629dfa93abf2f64237007af8e72c4a4114a5258e858Todd Kennedy mPM.verifyIntentFilter(id, verificationCode, failedDomains); 16301c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } catch (RemoteException e) { 1631f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16321c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16331c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16341c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio 16351c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio @Override 1636e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public int getIntentVerificationStatusAsUser(String packageName, int userId) { 16371c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio try { 16381c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio return mPM.getIntentVerificationStatus(packageName, userId); 16391c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } catch (RemoteException e) { 1640f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16411c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16421c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16431c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio 16441c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio @Override 1645e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public boolean updateIntentVerificationStatusAsUser(String packageName, int status, int userId) { 16461c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio try { 16471c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio return mPM.updateIntentVerificationStatus(packageName, status, userId); 16481c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } catch (RemoteException e) { 1649f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16501c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16511c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16521c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio 16531c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio @Override 1654b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 16551c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio public List<IntentFilterVerificationInfo> getIntentFilterVerifications(String packageName) { 16561c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio try { 1657b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<IntentFilterVerificationInfo> parceledList = 1658b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getIntentFilterVerifications(packageName); 1659b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 1660b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 1661b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 1662b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 16631c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } catch (RemoteException e) { 1664f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16651c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16661c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio } 16671c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio 16681c1b47125da018b44240739db75f8898e064a948Fabrice Di Meglio @Override 1669b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov @SuppressWarnings("unchecked") 16700788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio public List<IntentFilter> getAllIntentFilters(String packageName) { 16710788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio try { 1672b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov ParceledListSlice<IntentFilter> parceledList = 1673b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov mPM.getAllIntentFilters(packageName); 1674b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov if (parceledList == null) { 1675b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return Collections.emptyList(); 1676b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov } 1677b2c2e452e5bf49ee82929972631761310159016dSvetoslav Ganov return parceledList.getList(); 16780788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio } catch (RemoteException e) { 1679f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16800788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio } 16810788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio } 16820788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio 16830788595e0c9bc5e8c1907c63db595010006ef5b4Fabrice Di Meglio @Override 1684e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public String getDefaultBrowserPackageNameAsUser(int userId) { 16856227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio try { 16866227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio return mPM.getDefaultBrowserPackageName(userId); 16876227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio } catch (RemoteException e) { 1688f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16896227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio } 16906227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio } 16916227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio 16926227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio @Override 1693e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public boolean setDefaultBrowserPackageNameAsUser(String packageName, int userId) { 16946227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio try { 16956227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio return mPM.setDefaultBrowserPackageName(packageName, userId); 16966227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio } catch (RemoteException e) { 1697f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 16986227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio } 16996227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio } 17006227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio 17016227172310663e1267b1fabd68be890a1cb7e145Fabrice Di Meglio @Override 1702880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn public void setInstallerPackageName(String targetPackage, 1703880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn String installerPackageName) { 1704880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn try { 1705880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn mPM.setInstallerPackageName(targetPackage, installerPackageName); 1706880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } catch (RemoteException e) { 1707f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1708880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } 1709880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn } 1710880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn 1711880119bf43d738ca632b5d3861eb52d655c1c0fcDianne Hackborn @Override 1712620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public String getInstallerPackageName(String packageName) { 1713620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey try { 1714620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return mPM.getInstallerPackageName(packageName); 1715620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } catch (RemoteException e) { 1716f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1717620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1718620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1719620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1720620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 1721620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public int getMoveStatus(int moveId) { 1722390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1723620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return mPM.getMoveStatus(moveId); 1724390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1725f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1726b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey } 1727b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey } 1728b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey 1729b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey @Override 1730620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public void registerMoveCallback(MoveCallback callback, Handler handler) { 1731620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey synchronized (mDelegates) { 1732620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final MoveCallbackDelegate delegate = new MoveCallbackDelegate(callback, 1733620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey handler.getLooper()); 1734620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey try { 1735620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mPM.registerMoveCallback(delegate); 1736620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } catch (RemoteException e) { 1737f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1738620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1739620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mDelegates.add(delegate); 1740620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1741620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1742620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1743620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 1744620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public void unregisterMoveCallback(MoveCallback callback) { 1745620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey synchronized (mDelegates) { 1746620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey for (Iterator<MoveCallbackDelegate> i = mDelegates.iterator(); i.hasNext();) { 1747620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final MoveCallbackDelegate delegate = i.next(); 1748620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (delegate.mCallback == callback) { 1749620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey try { 1750620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mPM.unregisterMoveCallback(delegate); 1751620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } catch (RemoteException e) { 1752f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1753620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1754620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey i.remove(); 1755620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1756620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1757620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1758620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1759620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1760620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 1761620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public int movePackage(String packageName, VolumeInfo vol) { 1762b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey try { 1763620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final String volumeUuid; 1764620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.id)) { 1765620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey volumeUuid = StorageManager.UUID_PRIVATE_INTERNAL; 1766620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } else if (vol.isPrimaryPhysical()) { 1767620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey volumeUuid = StorageManager.UUID_PRIMARY_PHYSICAL; 1768620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } else { 1769620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey volumeUuid = Preconditions.checkNotNull(vol.fsUuid); 1770620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1771620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1772620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return mPM.movePackage(packageName, volumeUuid); 1773b2b9ab8354da1485178cd8d8e9d89ac915b3f269Jeff Sharkey } catch (RemoteException e) { 1774f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1775390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1776390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1777390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1778390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1779620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public @Nullable VolumeInfo getPackageCurrentVolume(ApplicationInfo app) { 1780e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey final StorageManager storage = mContext.getSystemService(StorageManager.class); 1781e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey if (app.isInternal()) { 1782620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return storage.findVolumeById(VolumeInfo.ID_PRIVATE_INTERNAL); 1783e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } else if (app.isExternalAsec()) { 1784620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return storage.getPrimaryPhysicalVolume(); 1785e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } else { 1786620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return storage.findVolumeByUuid(app.volumeUuid); 1787e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1788e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1789e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey 1790e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey @Override 1791620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public @NonNull List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app) { 1792e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey final StorageManager storage = mContext.getSystemService(StorageManager.class); 1793620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final VolumeInfo currentVol = getPackageCurrentVolume(app); 1794e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey final List<VolumeInfo> vols = storage.getVolumes(); 1795e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey final List<VolumeInfo> candidates = new ArrayList<>(); 1796e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey for (VolumeInfo vol : vols) { 1797f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy if (Objects.equals(vol, currentVol) || isPackageCandidateVolume(mContext, app, vol)) { 1798e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey candidates.add(vol); 1799e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1800e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1801e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey return candidates; 1802e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1803e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey 1804f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki private boolean isPackageCandidateVolume( 1805f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy ContextImpl context, ApplicationInfo app, VolumeInfo vol) { 1806f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy final boolean forceAllowOnExternal = Settings.Global.getInt( 1807f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy context.getContentResolver(), Settings.Global.FORCE_ALLOW_ON_EXTERNAL, 0) != 0; 1808e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey // Private internal is always an option 1809e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())) { 1810e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey return true; 1811e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1812e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey 1813e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey // System apps and apps demanding internal storage can't be moved 1814e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey // anywhere else 1815f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy if (app.isSystemApp()) { 1816f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy return false; 1817f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy } 1818f39ca8f5e5f43f130b4590921087a63f88bb8286Todd Kennedy if (!forceAllowOnExternal 181930a4e6d514773b0be4235a4448a6848e26505ff3Dianne Hackborn && (app.installLocation == PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY 182030a4e6d514773b0be4235a4448a6848e26505ff3Dianne Hackborn || app.installLocation == PackageInfo.INSTALL_LOCATION_UNSPECIFIED)) { 1821e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey return false; 1822e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1823e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey 1824620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey // Gotta be able to write there 1825620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (!vol.isMountedWritable()) { 1826620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return false; 1827620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1828620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1829620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey // Moving into an ASEC on public primary is only option internal 1830620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (vol.isPrimaryPhysical()) { 1831620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return app.isInternal(); 1832e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1833e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey 1834f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki // Some apps can't be moved. (e.g. device admins) 1835f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki try { 1836f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki if (mPM.isPackageDeviceAdminOnAnyUser(app.packageName)) { 1837f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki return false; 1838f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki } 1839f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki } catch (RemoteException e) { 1840f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1841f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki } 1842f34db0a17ee035c165a4e81e9192f73d2455bd1cMakoto Onuki 1843e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey // Otherwise we can move to any private volume 1844e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey return (vol.getType() == VolumeInfo.TYPE_PRIVATE); 1845e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey } 1846e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey 1847e2d45be4dae116307f8edd85eaa61134221cb8f9Jeff Sharkey @Override 1848620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public int movePrimaryStorage(VolumeInfo vol) { 1849390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1850620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final String volumeUuid; 1851620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.id)) { 1852620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey volumeUuid = StorageManager.UUID_PRIVATE_INTERNAL; 1853620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } else if (vol.isPrimaryPhysical()) { 1854620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey volumeUuid = StorageManager.UUID_PRIMARY_PHYSICAL; 1855620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } else { 1856620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey volumeUuid = Preconditions.checkNotNull(vol.fsUuid); 1857620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1858620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1859620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return mPM.movePrimaryStorage(volumeUuid); 1860390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1861f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1862390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1863620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1864620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1865275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey @Override 1866620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public @Nullable VolumeInfo getPrimaryStorageCurrentVolume() { 1867620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final StorageManager storage = mContext.getSystemService(StorageManager.class); 1868620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final String volumeUuid = storage.getPrimaryStorageUuid(); 186950a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey return storage.findVolumeByQualifiedUuid(volumeUuid); 1870620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1871620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1872275e3e43f2fba72fa99001cafa2a70e5478fc545Jeff Sharkey @Override 1873620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public @NonNull List<VolumeInfo> getPrimaryStorageCandidateVolumes() { 1874620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final StorageManager storage = mContext.getSystemService(StorageManager.class); 1875620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final VolumeInfo currentVol = getPrimaryStorageCurrentVolume(); 1876620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final List<VolumeInfo> vols = storage.getVolumes(); 1877620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final List<VolumeInfo> candidates = new ArrayList<>(); 1878fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, 1879fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey storage.getPrimaryStorageUuid()) && currentVol != null) { 1880fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey // TODO: support moving primary physical to emulated volume 1881fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey candidates.add(currentVol); 1882fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey } else { 1883fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey for (VolumeInfo vol : vols) { 1884fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey if (Objects.equals(vol, currentVol) || isPrimaryStorageCandidateVolume(vol)) { 1885fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey candidates.add(vol); 1886fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey } 1887620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1888620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1889620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return candidates; 1890620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1891620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1892620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey private static boolean isPrimaryStorageCandidateVolume(VolumeInfo vol) { 1893620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey // Private internal is always an option 1894620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())) { 1895620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return true; 1896620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1897620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1898620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey // Gotta be able to write there 1899620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey if (!vol.isMountedWritable()) { 1900620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return false; 1901620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 1902620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 1903fced534dec1088bdd7da1495d76b73996dc8a1a1Jeff Sharkey // We can move to any private volume 1904620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return (vol.getType() == VolumeInfo.TYPE_PRIVATE); 1905390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1906390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1907390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1908390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) { 19090e27c87af691bc53d320496bbffa58752608608dRobin Lee deletePackageAsUser(packageName, observer, flags, mContext.getUserId()); 19109a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot } 19119a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot 19129a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot @Override 19139a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot public void deletePackageAsUser(String packageName, IPackageDeleteObserver observer, int flags, 19149a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot int userId) { 1915390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 19169a80e53b27cd1ca00364a30a0ad153c83000b9d2Nicolas Prevot mPM.deletePackageAsUser(packageName, observer, userId, flags); 1917390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1918f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1919390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1920390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1921fbd0e9fa37fc17ccd25e4c1f16195bbd27de3c4cJeff Sharkey 1922390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1923390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void clearApplicationUserData(String packageName, 1924390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageDataObserver observer) { 1925390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1926ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mPM.clearApplicationUserData(packageName, observer, mContext.getUserId()); 1927390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1928f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1929390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1930390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1931390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1932390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void deleteApplicationCacheFiles(String packageName, 1933390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick IPackageDataObserver observer) { 1934390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1935390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.deleteApplicationCacheFiles(packageName, observer); 1936390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1937f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1938390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1939390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1940529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4Jeff Sharkey 1941390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 194278c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla public void deleteApplicationCacheFilesAsUser(String packageName, int userId, 194378c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla IPackageDataObserver observer) { 194478c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla try { 194578c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla mPM.deleteApplicationCacheFilesAsUser(packageName, userId, observer); 194678c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla } catch (RemoteException e) { 194778c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla throw e.rethrowFromSystemServer(); 194878c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla } 194978c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla } 195078c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla 195178c9eb8947538f63d2e06684663d400991dfff8fSuprabh Shukla @Override 1952529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4Jeff Sharkey public void freeStorageAndNotify(String volumeUuid, long idealStorageSize, 1953529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4Jeff Sharkey IPackageDataObserver observer) { 1954390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1955529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4Jeff Sharkey mPM.freeStorageAndNotify(volumeUuid, idealStorageSize, observer); 1956390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1957f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1958390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1959390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1960390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1961390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1962529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4Jeff Sharkey public void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi) { 1963390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 1964529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4Jeff Sharkey mPM.freeStorage(volumeUuid, freeStorageSize, pi); 1965390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1966f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1967390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1968390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1969390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 1970390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 1971eb84b1843a3f6805c6109c1d9d023550229a3fc5Andrei Stingaceanu public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended, 1972eb84b1843a3f6805c6109c1d9d023550229a3fc5Andrei Stingaceanu int userId) { 19731e2839188fb49575b86646d3aadb355c81ef9cc5Andrei Stingaceanu try { 1974eb84b1843a3f6805c6109c1d9d023550229a3fc5Andrei Stingaceanu return mPM.setPackagesSuspendedAsUser(packageNames, suspended, userId); 19751e2839188fb49575b86646d3aadb355c81ef9cc5Andrei Stingaceanu } catch (RemoteException e) { 1976f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 19771e2839188fb49575b86646d3aadb355c81ef9cc5Andrei Stingaceanu } 1978355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu } 1979355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu 1980355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu @Override 1981355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu public boolean isPackageSuspendedForUser(String packageName, int userId) { 1982355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu try { 1983355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu return mPM.isPackageSuspendedForUser(packageName, userId); 1984355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu } catch (RemoteException e) { 1985f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1986355b232d7998cfc9b29d42a0356390e25191bcbdAndrei Stingaceanu } 19871e2839188fb49575b86646d3aadb355c81ef9cc5Andrei Stingaceanu } 19881e2839188fb49575b86646d3aadb355c81ef9cc5Andrei Stingaceanu 19891e2839188fb49575b86646d3aadb355c81ef9cc5Andrei Stingaceanu @Override 1990e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public void getPackageSizeInfoAsUser(String packageName, int userHandle, 19910c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn IPackageStatsObserver observer) { 1992390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 19930c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn mPM.getPackageSizeInfo(packageName, userHandle, observer); 1994390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 1995f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 1996390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1997390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 1998d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey 1999390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2000390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void addPackageToPreferred(String packageName) { 2001d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey Log.w(TAG, "addPackageToPreferred() is a no-op"); 2002390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2003390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2004390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2005390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void removePackageFromPreferred(String packageName) { 2006d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey Log.w(TAG, "removePackageFromPreferred() is a no-op"); 2007390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2008390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2009390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2010390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public List<PackageInfo> getPreferredPackages(int flags) { 2011d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey Log.w(TAG, "getPreferredPackages() is a no-op"); 2012d5896630f6a2f21da107031cab216dc93bdcd851Jeff Sharkey return Collections.emptyList(); 2013390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2014390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2015390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2016390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void addPreferredActivity(IntentFilter filter, 2017390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int match, ComponentName[] set, ComponentName activity) { 2018390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 2019ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mPM.addPreferredActivity(filter, match, set, activity, mContext.getUserId()); 2020a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani } catch (RemoteException e) { 2021f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2022a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani } 2023a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani } 2024a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani 2025a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani @Override 2026e06b4d1d9f718b9fe02980fea794a36831a16db2Jeff Sharkey public void addPreferredActivityAsUser(IntentFilter filter, int match, 2027a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani ComponentName[] set, ComponentName activity, int userId) { 2028a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani try { 2029a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani mPM.addPreferredActivity(filter, match, set, activity, userId); 2030390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2031f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2032390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2033390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2034390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2035390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2036390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void replacePreferredActivity(IntentFilter filter, 2037390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int match, ComponentName[] set, ComponentName activity) { 2038390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 20390e27c87af691bc53d320496bbffa58752608608dRobin Lee mPM.replacePreferredActivity(filter, match, set, activity, mContext.getUserId()); 204041c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani } catch (RemoteException e) { 2041f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 204241c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani } 204341c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani } 204441c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani 204541c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani @Override 204641c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani public void replacePreferredActivityAsUser(IntentFilter filter, 204741c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani int match, ComponentName[] set, ComponentName activity, 204841c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani int userId) { 204941c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani try { 205041c1ded7f042a4cf303479550b38fa66d7a18906Amith Yamasani mPM.replacePreferredActivity(filter, match, set, activity, userId); 2051390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2052f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2053390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2054390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2055390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2056390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2057390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void clearPackagePreferredActivities(String packageName) { 2058390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 2059390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick mPM.clearPackagePreferredActivities(packageName); 2060390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2061f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2062390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2063390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2064390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2065390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2066390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getPreferredActivities(List<IntentFilter> outFilters, 2067390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick List<ComponentName> outActivities, String packageName) { 2068390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 2069390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick return mPM.getPreferredActivities(outFilters, outActivities, packageName); 2070390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2071f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2072390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2073390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2074390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2075390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2076a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate public ComponentName getHomeActivities(List<ResolveInfo> outActivities) { 2077a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate try { 2078a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate return mPM.getHomeActivities(outActivities); 2079a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate } catch (RemoteException e) { 2080f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2081a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate } 2082a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate } 2083a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate 2084a2a0850de8e7324db37e0595d5374bb9c9903461Christopher Tate @Override 2085390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setComponentEnabledSetting(ComponentName componentName, 2086390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int newState, int flags) { 2087390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 2088ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey mPM.setComponentEnabledSetting(componentName, newState, flags, mContext.getUserId()); 2089390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2090f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2091390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2092390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2093390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2094390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2095390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getComponentEnabledSetting(ComponentName componentName) { 2096390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 2097ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return mPM.getComponentEnabledSetting(componentName, mContext.getUserId()); 2098390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2099f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2100390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2101390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2102390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2103390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2104390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public void setApplicationEnabledSetting(String packageName, 2105390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick int newState, int flags) { 2106390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 21073fa3c28a356108a6558b6b54a0b10e1a5cc4f1b6Dianne Hackborn mPM.setApplicationEnabledSetting(packageName, newState, flags, 210895d785346b4dae808a2d8f77356175e55a572d96Dianne Hackborn mContext.getUserId(), mContext.getOpPackageName()); 2109390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2110f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2111390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2112390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2113390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2114390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick @Override 2115390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick public int getApplicationEnabledSetting(String packageName) { 2116390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick try { 2117ded653b168b19f6061889907d4f562d764c5559bJeff Sharkey return mPM.getApplicationEnabledSetting(packageName, mContext.getUserId()); 2118390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } catch (RemoteException e) { 2119f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2120390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2121390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick } 2122390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2123655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani @Override 2124bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka public void flushPackageRestrictionsAsUser(int userId) { 2125bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka try { 2126bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka mPM.flushPackageRestrictionsAsUser(userId); 2127bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka } catch (RemoteException e) { 2128bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka throw e.rethrowFromSystemServer(); 2129bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka } 2130bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka } 2131bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka 2132bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617Sudheer Shanka @Override 2133e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, 2134655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani UserHandle user) { 2135655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani try { 2136e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani return mPM.setApplicationHiddenSettingAsUser(packageName, hidden, 2137655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani user.getIdentifier()); 213827b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey } catch (RemoteException e) { 2139f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2140655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 2141655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 2142655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani 2143655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani @Override 2144e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani public boolean getApplicationHiddenSettingAsUser(String packageName, UserHandle user) { 2145655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani try { 2146e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7Amith Yamasani return mPM.getApplicationHiddenSettingAsUser(packageName, user.getIdentifier()); 214727b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey } catch (RemoteException e) { 2148f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2149655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 2150655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani } 2151655d0e2029e6ae77a47e922dce4c4989818b8dd1Amith Yamasani 2152c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 21539d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 21549d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public KeySet getKeySetByAlias(String packageName, String alias) { 21559d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 21569d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(alias); 21579d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 215827b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey return mPM.getKeySetByAlias(packageName, alias); 21599d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 2160f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 21619d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21629d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21639d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 2164c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 21659d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 21669d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public KeySet getSigningKeySet(String packageName) { 21679d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 21689d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 216927b2e6978716f9886db40f4fcf2e060b50637ac5Jeff Sharkey return mPM.getSigningKeySet(packageName); 21709d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 2171f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 21729d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21739d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21749d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 2175c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 21769d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 21779d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public boolean isSignedBy(String packageName, KeySet ks) { 21789d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 21799d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(ks); 21809d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 2181c6f22499f3046684d7175e10ca42cce1492cd36fdcashman return mPM.isPackageSignedByKeySet(packageName, ks); 21829d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 2183f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 21849d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21859d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21869d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 2187c6f22499f3046684d7175e10ca42cce1492cd36fdcashman /** @hide */ 21889d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman @Override 21899d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman public boolean isSignedByExactly(String packageName, KeySet ks) { 21909d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(packageName); 21919d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman Preconditions.checkNotNull(ks); 21929d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman try { 2193c6f22499f3046684d7175e10ca42cce1492cd36fdcashman return mPM.isPackageSignedByKeySetExactly(packageName, ks); 21949d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } catch (RemoteException e) { 2195f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 21969d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21979d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman } 21989d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1dcashman 21990aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root /** 22000aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root * @hide 22010aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root */ 22020aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root @Override 22030aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root public VerifierDeviceIdentity getVerifierDeviceIdentity() { 22040aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root try { 22050aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root return mPM.getVerifierDeviceIdentity(); 22060aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root } catch (RemoteException e) { 2207f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 22080aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root } 22090aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root } 22100aaa0d931716e9f57a1d84d795fab2df75092756Kenny Root 22119f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao /** 22129f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao * @hide 22139f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao */ 22149f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao @Override 22159f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao public boolean isUpgrade() { 22169f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao try { 22179f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao return mPM.isUpgrade(); 22189f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao } catch (RemoteException e) { 2219f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 22209f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao } 22219f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao } 22229f60c08a446e38f9e2d5271546ef69ca5941eba9Jeff Hao 22233a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey @Override 222416c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey public PackageInstaller getPackageInstaller() { 222516c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey synchronized (mLock) { 222616c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey if (mInstaller == null) { 222716c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey try { 2228a0907436c01fd8c545a6b5c7b28bc3bc9db59270Jeff Sharkey mInstaller = new PackageInstaller(mContext, this, mPM.getPackageInstaller(), 222916c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey mContext.getPackageName(), mContext.getUserId()); 223016c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } catch (RemoteException e) { 2231f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 223216c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } 223316c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey } 223416c8e3f49497b6046972ae650772f65768366be8Jeff Sharkey return mInstaller; 22353a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey } 22363a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey } 22373a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey 22386c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey @Override 22396c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey public boolean isPackageAvailable(String packageName) { 22406c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey try { 22416c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey return mPM.isPackageAvailable(packageName, mContext.getUserId()); 22426c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey } catch (RemoteException e) { 2243f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 22446c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey } 22456c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey } 22466c833e07a05c48ca60ee4d72421bf8b1e78dc710Jeff Sharkey 2247c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot /** 2248c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot * @hide 2249c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot */ 2250c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot @Override 225163798c596dc757135950313eb4bb44ca58696c68Nicolas Prevot public void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId, int targetUserId, 225263798c596dc757135950313eb4bb44ca58696c68Nicolas Prevot int flags) { 2253c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot try { 22543f7777fa4f1d392e18bad39edcd4539880c52ff9Nicolas Prevot mPM.addCrossProfileIntentFilter(filter, mContext.getOpPackageName(), 22554b8d5821512c6a4fdaf442f6d48e1dc412539136Nicolas Prevot sourceUserId, targetUserId, flags); 2256c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } catch (RemoteException e) { 2257f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2258c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 2259c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 2260c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot 2261c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot /** 2262c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot * @hide 2263c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot */ 2264c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot @Override 22658194899071e0a84c95ef10614bd1b9485b48f589Nicolas Prevot public void clearCrossProfileIntentFilters(int sourceUserId) { 2266c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot try { 22674b8d5821512c6a4fdaf442f6d48e1dc412539136Nicolas Prevot mPM.clearCrossProfileIntentFilters(sourceUserId, mContext.getOpPackageName()); 2268c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } catch (RemoteException e) { 2269f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw e.rethrowFromSystemServer(); 2270c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 2271c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot } 2272c79586ede6dcd6a167bc8360f058cb5cc655b33dNicolas Prevot 227388cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot /** 227488cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot * @hide 227588cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot */ 22767f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot public Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo) { 2277ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz Drawable dr = loadUnbadgedItemIcon(itemInfo, appInfo); 2278ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz if (itemInfo.showUserIcon != UserHandle.USER_NULL) { 2279ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz return dr; 2280ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz } 2281ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz return getUserBadgedIcon(dr, new UserHandle(mContext.getUserId())); 2282ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz } 2283ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz 2284ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz /** 2285ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz * @hide 2286ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz */ 2287ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz public Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo) { 22887f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot if (itemInfo.showUserIcon != UserHandle.USER_NULL) { 228964d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina Bitmap bitmap = getUserManager().getUserIcon(itemInfo.showUserIcon); 229064d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina if (bitmap == null) { 229164d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina return UserIcons.getDefaultUserIcon(itemInfo.showUserIcon, /* light= */ false); 229264d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina } 229364d4dca63f65e4c7d4a829c85ff6670bdd34e2ebAlexandra Gherghina return new BitmapDrawable(bitmap); 22947f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 2295db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina Drawable dr = null; 2296db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina if (itemInfo.packageName != null) { 2297db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina dr = getDrawable(itemInfo.packageName, itemInfo.icon, appInfo); 2298db811dbc704fd8170e66951e992e83098aecf158Alexandra Gherghina } 2299a71e3903e5d3f38795c443c052125faede9d9ec7Alexandra Gherghina if (dr == null) { 2300a709314537164d959a18ee78768c69c4a9cb33c7Alexandra Gherghina dr = itemInfo.loadDefaultIcon(this); 23017f7b0c759e2970178ef68805b21f06a26e24eb76Nicolas Prevot } 2302ec2d48b96d1f95fb266914df294a27c210f8c3f5Benjamin Franz return dr; 2303c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2304c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2305c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav private Drawable getBadgedDrawable(Drawable drawable, Drawable badgeDrawable, 2306c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Rect badgeLocation, boolean tryBadgeInPlace) { 2307c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final int badgedWidth = drawable.getIntrinsicWidth(); 2308c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final int badgedHeight = drawable.getIntrinsicHeight(); 2309c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final boolean canBadgeInPlace = tryBadgeInPlace 2310c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav && (drawable instanceof BitmapDrawable) 2311c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav && ((BitmapDrawable) drawable).getBitmap().isMutable(); 2312c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2313c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav final Bitmap bitmap; 2314c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (canBadgeInPlace) { 2315c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav bitmap = ((BitmapDrawable) drawable).getBitmap(); 2316c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } else { 2317c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav bitmap = Bitmap.createBitmap(badgedWidth, badgedHeight, Bitmap.Config.ARGB_8888); 2318c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2319c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav Canvas canvas = new Canvas(bitmap); 2320c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2321c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (!canBadgeInPlace) { 2322c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav drawable.setBounds(0, 0, badgedWidth, badgedHeight); 2323c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav drawable.draw(canvas); 2324c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2325c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2326c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeLocation != null) { 2327c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (badgeLocation.left < 0 || badgeLocation.top < 0 2328c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav || badgeLocation.width() > badgedWidth || badgeLocation.height() > badgedHeight) { 2329c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav throw new IllegalArgumentException("Badge location " + badgeLocation 2330c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav + " not in badged drawable bounds " 2331c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav + new Rect(0, 0, badgedWidth, badgedHeight)); 2332c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2333c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.setBounds(0, 0, badgeLocation.width(), badgeLocation.height()); 2334c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2335c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav canvas.save(); 2336c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav canvas.translate(badgeLocation.left, badgeLocation.top); 2337c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.draw(canvas); 2338c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav canvas.restore(); 2339c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } else { 2340c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.setBounds(0, 0, badgedWidth, badgedHeight); 2341c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav badgeDrawable.draw(canvas); 2342c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2343c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2344c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (!canBadgeInPlace) { 2345c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav BitmapDrawable mergedDrawable = new BitmapDrawable(mContext.getResources(), bitmap); 2346c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2347c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav if (drawable instanceof BitmapDrawable) { 2348c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; 2349c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav mergedDrawable.setTargetDensity(bitmapDrawable.getBitmap().getDensity()); 2350c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2351c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2352c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return mergedDrawable; 2353c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2354c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 2355c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return drawable; 2356c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2357c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 23588673b2899e775014336efff44ea88dcac2b25bddTony Mak private int getBadgeResIdForUser(int userId) { 2359c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav // Return the framework-provided badge. 23608673b2899e775014336efff44ea88dcac2b25bddTony Mak if (isManagedProfile(userId)) { 2361c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return com.android.internal.R.drawable.ic_corp_icon_badge; 2362c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2363c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav return 0; 2364c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav } 2365c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bbSvetoslav 23668673b2899e775014336efff44ea88dcac2b25bddTony Mak private boolean isManagedProfile(int userId) { 23678673b2899e775014336efff44ea88dcac2b25bddTony Mak return getUserManager().isManagedProfile(userId); 236888cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot } 236988cc346d0602e0b173b5076cd0051120682da601Nicolas Prevot 2370620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey /** {@hide} */ 2371620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey private static class MoveCallbackDelegate extends IPackageMoveObserver.Stub implements 2372620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey Handler.Callback { 237350a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey private static final int MSG_CREATED = 1; 237450a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey private static final int MSG_STATUS_CHANGED = 2; 2375620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 2376620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final MoveCallback mCallback; 2377620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey final Handler mHandler; 2378620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 2379620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public MoveCallbackDelegate(MoveCallback callback, Looper looper) { 2380620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mCallback = callback; 2381620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey mHandler = new Handler(looper, this); 2382620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 2383620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 2384620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 2385620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey public boolean handleMessage(Message msg) { 2386620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey switch (msg.what) { 238750a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey case MSG_CREATED: { 238850a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey final SomeArgs args = (SomeArgs) msg.obj; 238950a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey mCallback.onCreated(args.argi1, (Bundle) args.arg2); 239050a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey args.recycle(); 239150a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey return true; 239250a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey } 239350a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey case MSG_STATUS_CHANGED: { 2394b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey final SomeArgs args = (SomeArgs) msg.obj; 239550a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey mCallback.onStatusChanged(args.argi1, args.argi2, (long) args.arg3); 2396b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey args.recycle(); 2397620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return true; 239850a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey } 2399620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 2400620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey return false; 2401620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 2402620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 2403620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey @Override 240450a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey public void onCreated(int moveId, Bundle extras) { 240550a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey final SomeArgs args = SomeArgs.obtain(); 240650a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey args.argi1 = moveId; 240750a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey args.arg2 = extras; 240850a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey mHandler.obtainMessage(MSG_CREATED, args).sendToTarget(); 240950a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey } 241050a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey 241150a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey @Override 241250a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey public void onStatusChanged(int moveId, int status, long estMillis) { 2413b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey final SomeArgs args = SomeArgs.obtain(); 2414b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey args.argi1 = moveId; 241550a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey args.argi2 = status; 241650a05454795c93ac483f5cb6819e74cb17be1b5bJeff Sharkey args.arg3 = estMillis; 2417b36586a7c9b7718f33961406537e27bbd9b16211Jeff Sharkey mHandler.obtainMessage(MSG_STATUS_CHANGED, args).sendToTarget(); 2418620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 2419620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey } 2420620b32b316fd4f1bab4eef55ec8802d14a55e7ddJeff Sharkey 2421390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final ContextImpl mContext; 2422390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private final IPackageManager mPM; 2423390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick 2424390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick private static final Object sSync = new Object(); 2425add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn private static ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache 2426add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn = new ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>>(); 2427add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn private static ArrayMap<ResourceName, WeakReference<CharSequence>> sStringCache 2428add005cf94dcc815d29b54588c76fd87929075b3Dianne Hackborn = new ArrayMap<ResourceName, WeakReference<CharSequence>>(); 2429f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2430f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav private final Map<OnPermissionsChangedListener, IOnPermissionsChangeListener> 2431f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mPermissionListeners = new ArrayMap<>(); 2432f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2433f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav public class OnPermissionsChangeListenerDelegate extends IOnPermissionsChangeListener.Stub 2434f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav implements Handler.Callback{ 2435f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav private static final int MSG_PERMISSIONS_CHANGED = 1; 2436f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2437f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav private final OnPermissionsChangedListener mListener; 2438f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav private final Handler mHandler; 2439f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2440f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2441f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav public OnPermissionsChangeListenerDelegate(OnPermissionsChangedListener listener, 2442f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav Looper looper) { 2443f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mListener = listener; 2444f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mHandler = new Handler(looper, this); 2445f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 2446f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2447f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav @Override 2448f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav public void onPermissionsChanged(int uid) { 2449f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mHandler.obtainMessage(MSG_PERMISSIONS_CHANGED, uid, 0).sendToTarget(); 2450f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 2451f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav 2452f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav @Override 2453f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav public boolean handleMessage(Message msg) { 2454f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav switch (msg.what) { 2455f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav case MSG_PERMISSIONS_CHANGED: { 2456f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav final int uid = msg.arg1; 2457f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav mListener.onPermissionsChanged(uid); 2458f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav return true; 2459f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 2460f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 2461f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav return false; 2462f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 2463f7c06eb03ab4479b9d0656a23a4733d17e995183Svetoslav } 2464390dae1a8b8c2da6a24f3246c8c277645bcc75dcBrad Fitzpatrick} 2465