Merge pull request #9853 from brave/share_list_fix
[Android] Add share intent handler
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user