diff --git a/services/core/java/com/android/server/pm/ComponentResolver.java b/services/core/java/com/android/server/pm/ComponentResolver.java index 8facce112b52a..976cdfbf8f60c 100644 --- a/services/core/java/com/android/server/pm/ComponentResolver.java +++ b/services/core/java/com/android/server/pm/ComponentResolver.java @@ -23,6 +23,7 @@ import static com.android.server.pm.PackageManagerService.DEBUG_PACKAGE_SCANNING import static com.android.server.pm.PackageManagerService.DEBUG_REMOVE; import static com.android.server.pm.PackageManagerService.fixProcessName; +import android.annotation.Nullable; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; @@ -219,12 +220,14 @@ public class ComponentResolver { } } + @Nullable List queryActivities(Intent intent, String resolvedType, int flags, int userId) { synchronized (mLock) { return mActivities.queryIntent(intent, resolvedType, flags, userId); } } + @Nullable List queryActivities(Intent intent, String resolvedType, int flags, List activities, int userId) { synchronized (mLock) { @@ -233,12 +236,14 @@ public class ComponentResolver { } } + @Nullable List queryProviders(Intent intent, String resolvedType, int flags, int userId) { synchronized (mLock) { return mProviders.queryIntent(intent, resolvedType, flags, userId); } } + @Nullable List queryProviders(Intent intent, String resolvedType, int flags, List providers, int userId) { synchronized (mLock) { @@ -246,6 +251,7 @@ public class ComponentResolver { } } + @Nullable List queryProviders(String processName, String metaDataKey, int uid, int flags, int userId) { if (!sUserManager.exists(userId)) { @@ -285,6 +291,7 @@ public class ComponentResolver { return providerList; } + @Nullable ProviderInfo queryProvider(String authority, int flags, int userId) { synchronized (mLock) { final PackageParser.Provider p = mProvidersByAuthority.get(authority); @@ -326,12 +333,14 @@ public class ComponentResolver { } } + @Nullable List queryReceivers(Intent intent, String resolvedType, int flags, int userId) { synchronized (mLock) { return mReceivers.queryIntent(intent, resolvedType, flags, userId); } } + @Nullable List queryReceivers(Intent intent, String resolvedType, int flags, List receivers, int userId) { synchronized (mLock) { @@ -339,12 +348,14 @@ public class ComponentResolver { } } + @Nullable List queryServices(Intent intent, String resolvedType, int flags, int userId) { synchronized (mLock) { return mServices.queryIntent(intent, resolvedType, flags, userId); } } + @Nullable List queryServices(Intent intent, String resolvedType, int flags, List services, int userId) { synchronized (mLock) { @@ -1355,6 +1366,7 @@ public class ComponentResolver { return super.queryIntent(intent, resolvedType, defaultOnly, userId); } + @Nullable List queryIntent(Intent intent, String resolvedType, int flags, int userId) { if (!sUserManager.exists(userId)) { @@ -1366,6 +1378,7 @@ public class ComponentResolver { userId); } + @Nullable List queryIntentForPackage(Intent intent, String resolvedType, int flags, List packageProviders, int userId) { if (!sUserManager.exists(userId)) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d07e2d232ea6c..f53b16d0aaea9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6977,7 +6977,7 @@ public class PackageManagerService extends IPackageManager.Stub * @param intent * @return A filtered list of resolved activities. */ - private List applyPostResolutionFilter(List resolveInfos, + private List applyPostResolutionFilter(@NonNull List resolveInfos, String ephemeralPkgName, boolean allowDynamicSplits, int filterCallingUid, boolean resolveForStart, int userId, Intent intent) { final boolean blockInstant = intent.isWebIntent() && areWebInstantAppsDisabled(userId); @@ -7634,6 +7634,9 @@ public class PackageManagerService extends IPackageManager.Stub if (pkgName == null) { final List result = mComponentResolver.queryReceivers(intent, resolvedType, flags, userId); + if (result == null) { + return Collections.emptyList(); + } return applyPostResolutionFilter( result, instantAppPkgName, allowDynamicSplits, callingUid, false, userId, intent); @@ -7642,6 +7645,9 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg != null) { final List result = mComponentResolver.queryReceivers( intent, resolvedType, flags, pkg.receivers, userId); + if (result == null) { + return Collections.emptyList(); + } return applyPostResolutionFilter( result, instantAppPkgName, allowDynamicSplits, callingUid, false, userId, intent); @@ -7736,15 +7742,25 @@ public class PackageManagerService extends IPackageManager.Stub synchronized (mLock) { String pkgName = intent.getPackage(); if (pkgName == null) { + final List resolveInfos = mComponentResolver.queryServices(intent, + resolvedType, flags, userId); + if (resolveInfos == null) { + return Collections.emptyList(); + } return applyPostServiceResolutionFilter( - mComponentResolver.queryServices(intent, resolvedType, flags, userId), + resolveInfos, instantAppPkgName); } final PackageParser.Package pkg = mPackages.get(pkgName); if (pkg != null) { + final List resolveInfos = mComponentResolver.queryServices(intent, + resolvedType, flags, pkg.services, + userId); + if (resolveInfos == null) { + return Collections.emptyList(); + } return applyPostServiceResolutionFilter( - mComponentResolver.queryServices(intent, resolvedType, flags, pkg.services, - userId), + resolveInfos, instantAppPkgName); } return Collections.emptyList(); @@ -7854,15 +7870,25 @@ public class PackageManagerService extends IPackageManager.Stub synchronized (mLock) { String pkgName = intent.getPackage(); if (pkgName == null) { + final List resolveInfos = mComponentResolver.queryProviders(intent, + resolvedType, flags, userId); + if (resolveInfos == null) { + return Collections.emptyList(); + } return applyPostContentProviderResolutionFilter( - mComponentResolver.queryProviders(intent, resolvedType, flags, userId), + resolveInfos, instantAppPkgName); } final PackageParser.Package pkg = mPackages.get(pkgName); if (pkg != null) { + final List resolveInfos = mComponentResolver.queryProviders(intent, + resolvedType, flags, + pkg.providers, userId); + if (resolveInfos == null) { + return Collections.emptyList(); + } return applyPostContentProviderResolutionFilter( - mComponentResolver.queryProviders(intent, resolvedType, flags, - pkg.providers, userId), + resolveInfos, instantAppPkgName); } return Collections.emptyList();