allow to open deep-link to webxdc

This commit is contained in:
adbenitez
2024-11-23 02:13:52 +01:00
parent 1a5e062dac
commit 3118dbd32b
2 changed files with 47 additions and 12 deletions
@@ -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<Uri[]> 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());
+23 -5
View File
@@ -42,11 +42,12 @@
style="display: none"
></iframe>
<script>
const thisUnchangable = (async () => {
const loadingDiv = document.getElementById("loading");
const iframe = document.getElementById("frame");
let fill500 = async (href) => {
const connections = [];
const loadingProgress = document.getElementById("progress");
const loadingDiv = document.getElementById("loading");
const iframe = document.getElementById("frame");
const isolatedContextTest = document.getElementById(
"test-isolated-sandbox-context"
);
@@ -131,7 +132,7 @@
} else {
loadingDiv.innerHTML = "";
iframe.style.display = 'block';
iframe.src = "index.html";
iframe.src = href;
}
}
@@ -140,7 +141,24 @@
return connections.length;
},
});
})();
};
const params = new URLSearchParams(document.location.search);
const internetAccess = (params.get("i") || "0") === "1";
let href = params.get("href") || "";
if (!href || href.startsWith("#")) {
href = "index.html" + href;
}
if (internetAccess) { // fill500 not needed, just load the frame
fill500 = (href) => {
loadingDiv.innerHTML = "";
iframe.style.display = 'block';
iframe.src = href;
}
}
const thisUnchangable = fill500(href)
</script>
</body>
</html>