diff --git a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java index da25f9011..b6f62cbea 100644 --- a/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java @@ -39,6 +39,7 @@ import com.b44t.messenger.DcEvent; import com.b44t.messenger.DcMsg; import com.b44t.messenger.rpc.Rpc; import com.b44t.messenger.rpc.RpcException; +import com.google.common.base.Charsets; import org.json.JSONObject; import org.thoughtcrime.securesms.connect.AccountManager; @@ -53,6 +54,8 @@ import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -62,6 +65,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE private static final String EXTRA_ACCOUNT_ID = "accountId"; private static final String EXTRA_APP_MSG_ID = "appMessageId"; private static final String EXTRA_HIDE_ACTION_BAR = "hideActionBar"; + private static final String EXTRA_HREF = "href"; private static final int REQUEST_CODE_FILE_PICKER = 51426; private ValueCallback filePathCallback; @@ -91,29 +95,34 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE return; } } - openWebxdcActivity(context, msgId, true); + openWebxdcActivity(context, msgId, true, ""); } public static void openWebxdcActivity(Context context, DcMsg instance) { - openWebxdcActivity(context, instance.getId(), false); + openWebxdcActivity(context, instance, ""); } - public static void openWebxdcActivity(Context context, int msgId, boolean hideActionBar) { + public static void openWebxdcActivity(Context context, DcMsg instance, String href) { + openWebxdcActivity(context, instance.getId(), false, href); + } + + public static void openWebxdcActivity(Context context, int msgId, boolean hideActionBar, String href) { if (!Util.isClickedRecently()) { if (Prefs.isDeveloperModeEnabled(context)) { WebView.setWebContentsDebuggingEnabled(true); } - context.startActivity(getWebxdcIntent(context, msgId, hideActionBar)); + context.startActivity(getWebxdcIntent(context, msgId, hideActionBar, href)); } } - private static Intent getWebxdcIntent(Context context, int msgId, boolean hideActionBar) { + private static Intent getWebxdcIntent(Context context, int msgId, boolean hideActionBar, String href) { DcContext dcContext = DcHelper.getContext(context); Intent intent = new Intent(context, WebxdcActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.putExtra(EXTRA_ACCOUNT_ID, dcContext.getAccountId()); intent.putExtra(EXTRA_APP_MSG_ID, msgId); intent.putExtra(EXTRA_HIDE_ACTION_BAR, hideActionBar); + intent.putExtra(EXTRA_HREF, href); return intent; } @@ -124,7 +133,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE .putExtra(ConversationActivity.CHAT_ID_EXTRA, dcContext.getMsg(msgId).getChatId()) .setAction(Intent.ACTION_VIEW); - final Intent webxdcIntent = getWebxdcIntent(context, msgId, false); + final Intent webxdcIntent = getWebxdcIntent(context, msgId, false, ""); return TaskStackBuilder.create(context) .addNextIntentWithParentStack(chatIntent) @@ -205,7 +214,15 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE webView.setNetworkAvailable(internetAccess); // this does not block network but sets `window.navigator.isOnline` in js land webView.addJavascriptInterface(new InternalJSApi(), "InternalJSApi"); - webView.loadUrl(this.baseURL + (internetAccess? "/index.html" : "/webxdc_bootstrap324567869.html")); + String href = b.getString(EXTRA_HREF, ""); + String encodedHref = ""; + try { + encodedHref = URLEncoder.encode(href, Charsets.UTF_8.name()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + webView.loadUrl(this.baseURL + "/webxdc_bootstrap324567869.html?i=" + (internetAccess? "1" : "0") + "&href=" + encodedHref); Util.runOnAnyBackgroundThread(() -> { final DcChat chat = dcContext.getChat(dcAppMsg.getChatId()); diff --git a/src/main/res/raw/webxdc_wrapper.html b/src/main/res/raw/webxdc_wrapper.html index 9dd7898c6..69a756342 100644 --- a/src/main/res/raw/webxdc_wrapper.html +++ b/src/main/res/raw/webxdc_wrapper.html @@ -42,11 +42,12 @@ style="display: none" >