From f3d0bfaa4c0e8509e5b82ddc9d4c3fa5d3869c6c Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Fri, 22 Apr 2022 13:41:07 -0700 Subject: [PATCH] Use a com.android prefix for hidden intent actions CtsIntentSignatureTestCases asserts system apps' intent filters shouldn't have any "android.*" intent actions that are not public/system APIs. So let's just use a com.android prefix. Bug: 230099874 Test: atest ComponentAliasTests ComponentAliasTests1 ComponentAliasTests2 Change-Id: Ife697a58abb220cebce1ffda393f20cbe821a13a --- .../server/am/ComponentAliasResolver.java | 15 ++++++++++++-- .../AndroidManifest_service_aliases.xml | 20 +++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/am/ComponentAliasResolver.java b/services/core/java/com/android/server/am/ComponentAliasResolver.java index cf910d45b6322..2db3b15e719de 100644 --- a/services/core/java/com/android/server/am/ComponentAliasResolver.java +++ b/services/core/java/com/android/server/am/ComponentAliasResolver.java @@ -104,7 +104,10 @@ public class ComponentAliasResolver { private static final String OPT_IN_PROPERTY = "com.android.EXPERIMENTAL_COMPONENT_ALIAS_OPT_IN"; - private static final String ALIAS_FILTER_ACTION = "android.intent.action.EXPERIMENTAL_IS_ALIAS"; + private static final String ALIAS_FILTER_ACTION = + "com.android.intent.action.EXPERIMENTAL_IS_ALIAS"; + private static final String ALIAS_FILTER_ACTION_ALT = + "android.intent.action.EXPERIMENTAL_IS_ALIAS"; private static final String META_DATA_ALIAS_TARGET = "alias_target"; private static final int PACKAGE_QUERY_FLAGS = @@ -223,8 +226,16 @@ public class ComponentAliasResolver { @GuardedBy("mLock") private void loadFromMetadataLocked() { if (DEBUG) Slog.d(TAG, "Scanning service aliases..."); - Intent i = new Intent(ALIAS_FILTER_ACTION); + // PM.queryInetntXxx() doesn't support "OR" queries, so we search for + // both the com.android... action and android... action on by one. + // It's okay if a single component handles both actions because the resulting aliases + // will be stored in a map and duplicates will naturally be removed. + loadFromMetadataLockedInner(new Intent(ALIAS_FILTER_ACTION_ALT)); + loadFromMetadataLockedInner(new Intent(ALIAS_FILTER_ACTION)); + } + + private void loadFromMetadataLockedInner(Intent i) { final List services = mContext.getPackageManager().queryIntentServicesAsUser( i, PACKAGE_QUERY_FLAGS, UserHandle.USER_SYSTEM); diff --git a/tests/componentalias/AndroidManifest_service_aliases.xml b/tests/componentalias/AndroidManifest_service_aliases.xml index e73bb6102fbf5..c96f1736c6840 100644 --- a/tests/componentalias/AndroidManifest_service_aliases.xml +++ b/tests/componentalias/AndroidManifest_service_aliases.xml @@ -23,57 +23,57 @@ --> - + - + - + - + - + - + - + - + - + - +