diff --git a/android/java/AndroidManifest_intent_filters.xml b/android/java/AndroidManifest_intent_filters.xml new file mode 100644 index 000000000000..48d72ce04414 --- /dev/null +++ b/android/java/AndroidManifest_intent_filters.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/android/java/org/chromium/chrome/browser/BraveIntentHandler.java b/android/java/org/chromium/chrome/browser/BraveIntentHandler.java index 1258c7ed3d98..0317a921158f 100644 --- a/android/java/org/chromium/chrome/browser/BraveIntentHandler.java +++ b/android/java/org/chromium/chrome/browser/BraveIntentHandler.java @@ -6,13 +6,22 @@ package org.chromium.chrome.browser; import android.app.Activity; +import android.app.SearchManager; import android.content.Intent; import android.net.Uri; import android.text.TextUtils; import org.chromium.base.IntentUtils; +import org.chromium.base.Log; +import org.chromium.base.ThreadUtils; +import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; public class BraveIntentHandler extends IntentHandler { + private static final String TAG = "BraveIntentHandler"; + private static final String CONNECTION_INFO_HELP_URL = "https://support.google.com/chrome?p=android_connection_info"; private static final String BRAVE_CONNECTION_INFO_HELP_URL = @@ -45,6 +54,7 @@ protected static String extractUrlFromIntent(Intent intent) { if (url == null) url = getUrlForWebapp(intent); if (url == null) url = intent.getDataString(); if (url == null) url = getUrlFromText(intent); + if (url == null) url = getWebSearchUrl(intent); if (url == null) return null; url = url.trim(); return TextUtils.isEmpty(url) ? null : url; @@ -56,6 +66,30 @@ protected static String getUrlFromText(Intent intent) { return (text == null || isJavascriptSchemeOrInvalidUrl(text)) ? null : text; } + protected static String getWebSearchUrl(Intent intent) { + final String action = intent.getAction(); + if (!Intent.ACTION_WEB_SEARCH.equals(action)) { + return null; + } + + String query = IntentUtils.safeGetStringExtra(intent, SearchManager.QUERY); + if (query == null || TextUtils.isEmpty(query)) { + return null; + } + + try { + return ThreadUtils.runOnUiThreadBlocking(new Callable() { + @Override + public String call() { + return TemplateUrlServiceFactory.get().getUrlForSearchQuery(query); + } + }); + } catch (ExecutionException e) { + Log.e(TAG, "Could not retrieve search query: " + e); + } + return null; + } + private static String getUrlForCustomTab(Intent intent) { assert (false); return null; diff --git a/build/android/config.gni b/build/android/config.gni index c8e22aae8f88..37227fa1abb8 100644 --- a/build/android/config.gni +++ b/build/android/config.gni @@ -6,7 +6,10 @@ declare_args() { brave_android_manifest_includes = [] } -brave_android_manifest_includes = [ "//brave/android/java/AndroidManifest.xml" ] +brave_android_manifest_includes = [ + "//brave/android/java/AndroidManifest.xml", + "//brave/android/java/AndroidManifest_intent_filters.xml", +] brave_chrome_java_deps = [ "//brave/android/java/org/chromium/chrome/browser/search_engines/settings:java", diff --git a/patches/chrome-android-java-AndroidManifest.xml.patch b/patches/chrome-android-java-AndroidManifest.xml.patch index dd4cd11b82b9..169a39cb7ca1 100644 --- a/patches/chrome-android-java-AndroidManifest.xml.patch +++ b/patches/chrome-android-java-AndroidManifest.xml.patch @@ -1,5 +1,5 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml -index 64bea5349783a7a0b13540bd40662b4575437ca3..9c88e501f0a1b953fce8183fa2b4ad3eb697738e 100644 +index 64bea5349783a7a0b13540bd40662b4575437ca3..146b7f2349ef1cf494786c922266bdfbc74bdd0e 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml @@ -59,7 +59,9 @@ by a child template that "extends" this file. @@ -61,7 +61,7 @@ index 64bea5349783a7a0b13540bd40662b4575437ca3..9c88e501f0a1b953fce8183fa2b4ad3e -+ ++ {% include "//brave/android/java/AndroidManifest_intent_filters.xml" %}