OSDN Git Service

Make ResolverActivity respect selector intent when making filters
authorHenrik Engström <henrik.engstrom@sonymobile.com>
Thu, 17 Jul 2014 10:18:29 +0000 (12:18 +0200)
committerAdam Powell <adamp@google.com>
Wed, 13 Apr 2016 15:45:29 +0000 (08:45 -0700)
When the ResolverActivity makes a filter after an intent is chosen,
either for remembering last used or an "always use" choice for the
user it doesn't consider the selector in the intent if present.

This means that when a resolver activity is launched for an intent
with a selector, the selector is used for resolving preferred
activities, and for populating the list, but when the same intent
is sent again it doesn't match the filter created by the previous
ResolverActivity.

This in turn means that the user will get another ResolverActivity
even if "Always Use" was chosen the last time.

Bug: 28129216

Change-Id: I29be7010e7c890caf9789673b3c3f821ba362761

core/java/com/android/internal/app/ResolverActivity.java

index 3fc02a7..085e159 100644 (file)
@@ -668,12 +668,19 @@ public class ResolverActivity extends Activity {
                 && mAdapter.mOrigResolveList != null) {
             // Build a reasonable intent filter, based on what matched.
             IntentFilter filter = new IntentFilter();
-            String action = intent.getAction();
+            Intent filterIntent;
 
+            if (intent.getSelector() != null) {
+                filterIntent = intent.getSelector();
+            } else {
+                filterIntent = intent;
+            }
+
+            String action = filterIntent.getAction();
             if (action != null) {
                 filter.addAction(action);
             }
-            Set<String> categories = intent.getCategories();
+            Set<String> categories = filterIntent.getCategories();
             if (categories != null) {
                 for (String cat : categories) {
                     filter.addCategory(cat);
@@ -682,9 +689,9 @@ public class ResolverActivity extends Activity {
             filter.addCategory(Intent.CATEGORY_DEFAULT);
 
             int cat = ri.match & IntentFilter.MATCH_CATEGORY_MASK;
-            Uri data = intent.getData();
+            Uri data = filterIntent.getData();
             if (cat == IntentFilter.MATCH_CATEGORY_TYPE) {
-                String mimeType = intent.resolveType(this);
+                String mimeType = filterIntent.resolveType(this);
                 if (mimeType != null) {
                     try {
                         filter.addDataType(mimeType);