Fix incorrect default browser summary.

- move the logic to retrieve browser candidates with unique package name
from default browser picker to the controller, so that both uses the
same logic to get the candidate list. When there is only 1 package that
can handle the web but it has multiple resolved activities, it should
be considered as the only app, and hence be set as default.

Change-Id: I945bcef3f7de586b19f65ceada3abf7addb0b26e
Fixes: 109882811
Test: make RunSettingsRoboTests
This commit is contained in:
Doris Ling
2018-06-14 11:26:40 -07:00
parent 50b0daf0c8
commit a177e51b18
4 changed files with 100 additions and 71 deletions

View File

@@ -17,11 +17,9 @@
package com.android.settings.applications.defaultapps;
import android.content.Context;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.util.ArraySet;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
@@ -29,7 +27,6 @@ import com.android.settingslib.applications.DefaultAppInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Fragment for choosing default browser.
@@ -61,24 +58,13 @@ public class DefaultBrowserPicker extends DefaultAppPickerFragment {
final List<DefaultAppInfo> candidates = new ArrayList<>();
final Context context = getContext();
// Resolve that intent and check that the handleAllWebDataURI boolean is set
final List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(
DefaultBrowserPreferenceController.BROWSE_PROBE, PackageManager.MATCH_ALL, mUserId);
final List<ResolveInfo> list =
DefaultBrowserPreferenceController.getCandidates(mPm, mUserId);
final int count = list.size();
final Set<String> addedPackages = new ArraySet<>();
for (int i = 0; i < count; i++) {
ResolveInfo info = list.get(i);
if (info.activityInfo == null || !info.handleAllWebDataURI) {
continue;
}
final String packageName = info.activityInfo.packageName;
if (addedPackages.contains(packageName)) {
continue;
}
for (ResolveInfo info : list) {
try {
candidates.add(new DefaultAppInfo(context, mPm,
mPm.getApplicationInfoAsUser(packageName, 0, mUserId)));
addedPackages.add(packageName);
mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId)));
} catch (PackageManager.NameNotFoundException e) {
// Skip unknown packages.
}