Merge pull request #9853 from brave/share_list_fix

[Android] Add share intent handler
This commit is contained in:
wchen342
2021-08-30 21:50:38 +02:00
committed by GitHub
5 changed files with 81 additions and 0 deletions
@@ -8,6 +8,9 @@ package org.chromium.chrome.browser;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import org.chromium.base.IntentUtils;
public class BraveIntentHandler extends IntentHandler {
private static final String CONNECTION_INFO_HELP_URL =
@@ -28,4 +31,43 @@ public class BraveIntentHandler extends IntentHandler {
}
return super.onNewIntent(intent);
}
/**
* Helper method to extract the raw URL from the intent, without further processing.
* The URL may be in multiple locations.
* @param intent Intent to examine.
* @return Raw URL from the intent, or null if raw URL could't be found.
*/
protected static String extractUrlFromIntent(Intent intent) {
if (intent == null) return null;
String url = getUrlFromVoiceSearchResult(intent);
if (url == null) url = getUrlForCustomTab(intent);
if (url == null) url = getUrlForWebapp(intent);
if (url == null) url = intent.getDataString();
if (url == null) url = getUrlFromText(intent);
if (url == null) return null;
url = url.trim();
return TextUtils.isEmpty(url) ? null : url;
}
protected static String getUrlFromText(Intent intent) {
if (intent == null) return null;
String text = IntentUtils.safeGetStringExtra(intent, Intent.EXTRA_TEXT);
return (text == null || isJavascriptSchemeOrInvalidUrl(text)) ? null : text;
}
private static String getUrlForCustomTab(Intent intent) {
assert (false);
return null;
}
private static String getUrlForWebapp(Intent intent) {
assert (false);
return null;
}
private static boolean isJavascriptSchemeOrInvalidUrl(String url) {
assert (false);
return false;
}
}
+1
View File
@@ -22,6 +22,7 @@ java_binary("java_bytecode_rewriter") {
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveFreIntentCreatorClassAdapter.java",
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveHomepageManagerClassAdapter.java",
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveIncognitoToggleTabLayoutClassAdapter.java",
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveIntentHandlerClassAdapter.java",
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveLaunchIntentDispatcherClassAdapter.java",
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveLayoutManagerChromeClassAdapter.java",
"//brave/build/android/bytecode/java/org/brave/bytecode/BraveMainPreferenceBaseClassAdapter.java",
@@ -21,6 +21,7 @@ public class BraveClassAdapter {
chain = new BraveFreIntentCreatorClassAdapter(chain);
chain = new BraveHomepageManagerClassAdapter(chain);
chain = new BraveIncognitoToggleTabLayoutClassAdapter(chain);
chain = new BraveIntentHandlerClassAdapter(chain);
chain = new BraveLaunchIntentDispatcherClassAdapter(chain);
chain = new BraveLayoutManagerChromeClassAdapter(chain);
chain = new BraveMainPreferenceBaseClassAdapter(chain);
@@ -0,0 +1,29 @@
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.brave.bytecode;
import org.objectweb.asm.ClassVisitor;
public class BraveIntentHandlerClassAdapter extends BraveClassVisitor {
static String sIntentHandlerClassName = "org/chromium/chrome/browser/IntentHandler";
static String sBraveIntentHandlerClassName = "org/chromium/chrome/browser/BraveIntentHandler";
public BraveIntentHandlerClassAdapter(ClassVisitor visitor) {
super(visitor);
makePublicMethod(sIntentHandlerClassName, "getUrlForCustomTab");
changeMethodOwner(
sBraveIntentHandlerClassName, "getUrlForCustomTab", sIntentHandlerClassName);
makePublicMethod(sIntentHandlerClassName, "getUrlForWebapp");
changeMethodOwner(sBraveIntentHandlerClassName, "getUrlForWebapp", sIntentHandlerClassName);
makePublicMethod(sIntentHandlerClassName, "isJavascriptSchemeOrInvalidUrl");
changeMethodOwner(sBraveIntentHandlerClassName, "isJavascriptSchemeOrInvalidUrl",
sIntentHandlerClassName);
changeMethodOwner(
sIntentHandlerClassName, "extractUrlFromIntent", sBraveIntentHandlerClassName);
}
}
@@ -57,6 +57,14 @@ index 563055a2311f4ac4888eb18b21bf90b2f1d0358e..5d2ec4d4cd6aeeeb4af390f8d96d2821
android:icon="@drawable/ic_launcher"
android:roundIcon="@drawable/ic_launcher_round"
android:label="{% block application_label %}@string/app_name{% endblock %}"
@@ -328,6 +341,7 @@ by a child template that "extends" this file.
<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>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity-alias>
@@ -1190,6 +1203,7 @@ by a child template that "extends" this file.
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" >
</activity>