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; ...@@ -13,6 +13,7 @@ import org.chromium.base.PackageManagerUtils;
import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult; import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult;
import org.chromium.components.external_intents.ExternalNavigationParams; import org.chromium.components.external_intents.ExternalNavigationParams;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
...@@ -44,6 +45,11 @@ interface ExternalNavigationDelegate { ...@@ -44,6 +45,11 @@ interface ExternalNavigationDelegate {
*/ */
int countSpecializedHandlers(List<ResolveInfo> infos); 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. * Start an activity for the intent. Used for intents that must be handled externally.
* @param intent The intent we want to send. * @param intent The intent we want to send.
......
...@@ -247,6 +247,11 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat ...@@ -247,6 +247,11 @@ public class ExternalNavigationDelegateImpl implements ExternalNavigationDelegat
return getSpecializedHandlersWithFilter(infos, null).size(); return getSpecializedHandlersWithFilter(infos, null).size();
} }
@Override
public ArrayList<String> getSpecializedHandlers(List<ResolveInfo> infos) {
return getSpecializedHandlersWithFilter(infos, null);
}
@VisibleForTesting @VisibleForTesting
public static ArrayList<String> getSpecializedHandlersWithFilter( public static ArrayList<String> getSpecializedHandlersWithFilter(
List<ResolveInfo> infos, String filterPackageName) { List<ResolveInfo> infos, String filterPackageName) {
......
...@@ -1066,9 +1066,7 @@ public class ExternalNavigationHandler { ...@@ -1066,9 +1066,7 @@ public class ExternalNavigationHandler {
*/ */
private boolean launchWebApkIfSoleIntentHandler( private boolean launchWebApkIfSoleIntentHandler(
List<ResolveInfo> resolvingInfos, Intent targetIntent) { List<ResolveInfo> resolvingInfos, Intent targetIntent) {
ArrayList<String> packages = ArrayList<String> packages = mDelegate.getSpecializedHandlers(resolvingInfos);
ExternalNavigationDelegateImpl.getSpecializedHandlersWithFilter(
resolvingInfos, null);
if (packages.size() != 1 || !mDelegate.isValidWebApk(packages.get(0))) return false; if (packages.size() != 1 || !mDelegate.isValidWebApk(packages.get(0))) return false;
Intent webApkIntent = new Intent(targetIntent); Intent webApkIntent = new Intent(targetIntent);
webApkIntent.setPackage(packages.get(0)); webApkIntent.setPackage(packages.get(0));
......
...@@ -1778,14 +1778,20 @@ public class ExternalNavigationHandlerTest { ...@@ -1778,14 +1778,20 @@ public class ExternalNavigationHandlerTest {
@Override @Override
public int countSpecializedHandlers(List<ResolveInfo> infos) { 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); List<IntentActivity> matchingIntentActivities = findMatchingIntentActivities(infos);
for (IntentActivity intentActivity : matchingIntentActivities) { for (IntentActivity intentActivity : matchingIntentActivities) {
if (intentActivity.isSpecialized()) { if (intentActivity.isSpecialized()) {
++count; result.add(intentActivity.packageName());
} }
} }
return count;
return result;
} }
private ArrayList<IntentActivity> findMatchingIntentActivities(List<ResolveInfo> infos) { 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