Commit fecc4b6f authored by Colin Blundell's avatar Colin Blundell Committed by Commit Bot

[Android] Abstract ExternalNavHandler getting specialized handlers

This is a direct dependency on ExternalNavigationDelegateImpl, which
will stay in //chrome after ExternalNavigationHandler is componentized.
This CL abstracts the method through ExternalNavigationDelegate.

Bug: 1031465
Change-Id: Ia307d675d08af0492a1bad658c95f76ae8778111
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2095547
Commit-Queue: Colin Blundell <blundell@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#749577}
parent 266bdcd8
......@@ -13,6 +13,7 @@ import org.chromium.base.PackageManagerUtils;
import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult;
import org.chromium.components.external_intents.ExternalNavigationParams;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -44,6 +45,11 @@ interface ExternalNavigationDelegate {
*/
int countSpecializedHandlers(List<ResolveInfo> infos);
/**
* Returns the subset of {@params infos} that are specialized intent handlers.
*/
ArrayList<String> getSpecializedHandlers(List<ResolveInfo> infos);
/**
* Start an activity for the intent. Used for intents that must be handled externally.
* @param intent The intent we want to send.
......
......@@ -247,6 +247,11 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
return getSpecializedHandlersWithFilter(infos, null).size();
}
@Override
public ArrayList<String> getSpecializedHandlers(List<ResolveInfo> infos) {
return getSpecializedHandlersWithFilter(infos, null);
}
@VisibleForTesting
public static ArrayList<String> getSpecializedHandlersWithFilter(
List<ResolveInfo> infos, String filterPackageName) {
......
......@@ -1066,9 +1066,7 @@ public class ExternalNavigationHandler {
*/
private boolean launchWebApkIfSoleIntentHandler(
List<ResolveInfo> resolvingInfos, Intent targetIntent) {
ArrayList<String> packages =
ExternalNavigationDelegateImpl.getSpecializedHandlersWithFilter(
resolvingInfos, null);
ArrayList<String> packages = mDelegate.getSpecializedHandlers(resolvingInfos);
if (packages.size() != 1 || !mDelegate.isValidWebApk(packages.get(0))) return false;
Intent webApkIntent = new Intent(targetIntent);
webApkIntent.setPackage(packages.get(0));
......
......@@ -1778,14 +1778,20 @@ public class ExternalNavigationHandlerTest {
@Override
public int countSpecializedHandlers(List<ResolveInfo> infos) {
int count = 0;
return getSpecializedHandlers(infos).size();
}
@Override
public ArrayList<String> getSpecializedHandlers(List<ResolveInfo> infos) {
ArrayList<String> result = new ArrayList<>();
List<IntentActivity> matchingIntentActivities = findMatchingIntentActivities(infos);
for (IntentActivity intentActivity : matchingIntentActivities) {
if (intentActivity.isSpecialized()) {
++count;
result.add(intentActivity.packageName());
}
}
return count;
return result;
}
private ArrayList<IntentActivity> findMatchingIntentActivities(List<ResolveInfo> infos) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment