Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Android] Added handling of the web search intent #11604

Merged
merged 2 commits into from
Dec 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions android/java/AndroidManifest_intent_filters.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<intent-filter>
<action android:name="android.intent.action.WEB_SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="multipart/related" />
<data android:mimeType="message/rfc822" />
</intent-filter>
34 changes: 34 additions & 0 deletions android/java/org/chromium/chrome/browser/BraveIntentHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down Expand Up @@ -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;
Expand All @@ -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<String>() {
@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;
Expand Down
5 changes: 4 additions & 1 deletion build/android/config.gni
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions patches/chrome-android-java-AndroidManifest.xml.patch
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -61,7 +61,7 @@ index 64bea5349783a7a0b13540bd40662b4575437ca3..9c88e501f0a1b953fce8183fa2b4ad3e
<action android:name="android.web.action.APP_ATTRIBUTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
+ <intent-filter><action android:name="android.intent.action.SEND" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="text/plain" /><data android:mimeType="multipart/related" /><data android:mimeType="message/rfc822" /></intent-filter>
+ {% include "//brave/android/java/AndroidManifest_intent_filters.xml" %}
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity-alias>
Expand Down