summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Patrick Baumann <patb@google.com> 2020-03-17 10:40:49 -0700
committer Patrick Baumann <patb@google.com> 2020-03-18 15:07:54 -0700
commit28a68105e1510a151121eba8b159d5d79e8e6134 (patch)
tree96f508513f968c5c41fe5acd109f5c881ed45770
parent0fc5b145cc0d793916c1a2d957020a1218464fe4 (diff)
Fixes wildcard intent filter matching logic
Fixes: 151638510 Test: atest IntentFilterTests AppEnumerationTests Change-Id: I5f0297b5f1ca0458bc6d9ada5ac6d623b7b9a89f
-rw-r--r--core/java/android/content/IntentFilter.java11
-rw-r--r--core/java/android/content/pm/parsing/ParsingPackageUtils.java16
2 files changed, 22 insertions, 5 deletions
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index f19ab0105d5b..f951d2b89958 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -274,8 +274,13 @@ public class IntentFilter implements Parcelable {
*/
public static final String SCHEME_HTTPS = "https";
- /** The value to indicate a wildcard for incoming match arguments. */
- private static final String WILDCARD = "*";
+ /**
+ * The value to indicate a wildcard for incoming match arguments.
+ * @hide
+ */
+ public static final String WILDCARD = "*";
+ /** @hide */
+ public static final String WILDCARD_PATH = "/" + WILDCARD;
private int mPriority;
@UnsupportedAppUsage
@@ -1439,7 +1444,7 @@ public class IntentFilter implements Parcelable {
if (mDataPaths == null) {
return false;
}
- if (wildcardSupported && WILDCARD.equals(data)) {
+ if (wildcardSupported && WILDCARD_PATH.equals(data)) {
return true;
}
final int numDataPaths = mDataPaths.size();
diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
index e41ed85d2438..7f4c9e28b3c2 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
@@ -40,7 +40,6 @@ import android.content.pm.ConfigurationInfo;
import android.content.pm.FeatureGroupInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageInfo;
-import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.content.pm.PackageParser.PackageParserException;
@@ -1390,7 +1389,7 @@ public class ParsingPackageUtils {
Uri data = null;
String dataType = null;
- String host = "";
+ String host = IntentFilter.WILDCARD;
final int numActions = intentInfo.countActions();
final int numSchemes = intentInfo.countDataSchemes();
final int numTypes = intentInfo.countDataTypes();
@@ -1421,10 +1420,23 @@ public class ParsingPackageUtils {
data = new Uri.Builder()
.scheme(intentInfo.getDataScheme(0))
.authority(host)
+ .path(IntentFilter.WILDCARD_PATH)
.build();
}
if (numTypes == 1) {
dataType = intentInfo.getDataType(0);
+ // The dataType may have had the '/' removed for the dynamic mimeType feature.
+ // If we detect that case, we add the * back.
+ if (!dataType.contains("/")) {
+ dataType = dataType + "/*";
+ }
+ if (data == null) {
+ data = new Uri.Builder()
+ .scheme("content")
+ .authority(IntentFilter.WILDCARD)
+ .path(IntentFilter.WILDCARD_PATH)
+ .build();
+ }
}
intent.setDataAndType(data, dataType);
if (numActions == 1) {