Use MATCH_ALL to query available browsers.

Browser intent resolution has been special for a long time, and we
need to pass MATCH_ALL to get all the candidates, then do manual
filtering later.

Bug: 116216651
Test: manual
Change-Id: I5e9b7b907005f73b7c54c3253c872d85ef7c4863
This commit is contained in:
Hai Zhang
2019-02-20 11:23:15 -08:00
parent 7646786cd3
commit 7bd98d2519
2 changed files with 9 additions and 5 deletions

View File

@@ -45,7 +45,8 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
static final Intent BROWSE_PROBE = new Intent()
.setAction(Intent.ACTION_VIEW)
.addCategory(Intent.CATEGORY_BROWSABLE)
.setData(Uri.parse("http:"));
.setData(Uri.parse("http:"))
.addFlags(Intent.FLAG_IGNORE_EPHEMERAL);
public DefaultBrowserPreferenceController(Context context) {
super(context);
@@ -112,11 +113,13 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
final List<ResolveInfo> candidates = new ArrayList<>();
// Resolve that intent and check that the handleAllWebDataURI boolean is set
final List<ResolveInfo> list = packageManager.queryIntentActivitiesAsUser(
BROWSE_PROBE, 0 /* flags */, userId);
BROWSE_PROBE, PackageManager.MATCH_ALL, userId);
if (list != null) {
final Set<String> addedPackages = new ArraySet<>();
for (ResolveInfo info : list) {
if (info.activityInfo == null || !info.handleAllWebDataURI) {
if (!info.handleAllWebDataURI || info.activityInfo == null
|| !info.activityInfo.enabled
|| !info.activityInfo.applicationInfo.enabled) {
continue;
}
final String packageName = info.activityInfo.packageName;