From b83110a8dccb9615ff56787e4358323151ffc453 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 9 Mar 2026 08:30:41 -0700 Subject: use JavascriptInterface for HCE instead of Capacitor plugin --- .../app/src/main/java/io/coinos/MainActivity.java | 20 ++++++++++++++++++++ src/routes/(app)/fund/[id]/+page.svelte | 6 +++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/io/coinos/MainActivity.java b/android/app/src/main/java/io/coinos/MainActivity.java index 3a5654a3..83b731a3 100644 --- a/android/app/src/main/java/io/coinos/MainActivity.java +++ b/android/app/src/main/java/io/coinos/MainActivity.java @@ -5,6 +5,8 @@ import android.view.View; import android.view.WindowInsets; import android.view.WindowManager; import androidx.core.view.ViewCompat; +import androidx.webkit.WebSettingsCompat; +import androidx.webkit.WebViewFeature; import com.getcapacitor.BridgeActivity; import com.getcapacitor.Bridge; @@ -25,6 +27,8 @@ import java.util.Arrays; import io.coinos.nfcwriter.NfcWriterPlugin; import io.coinos.hce.HcePlugin; +import io.coinos.hce.HceApduService; +import android.webkit.JavascriptInterface; public class MainActivity extends BridgeActivity { private NfcAdapter nfcAdapter; @@ -52,6 +56,22 @@ public class MainActivity extends BridgeActivity { }); } + // Enable WebAuthn/passkey support in WebView + if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_AUTHENTICATION)) { + WebSettingsCompat.setWebAuthenticationSupport( + webView.getSettings(), + WebSettingsCompat.WEB_AUTHENTICATION_SUPPORT_FOR_APP + ); + } + + // Expose HCE control to JavaScript + webView.addJavascriptInterface(new Object() { + @JavascriptInterface + public void setUrl(String url) { HceApduService.setUrl(url); } + @JavascriptInterface + public String getUrl() { return HceApduService.getUrl(); } + }, "CoinosHce"); + // Other app setup CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); diff --git a/src/routes/(app)/fund/[id]/+page.svelte b/src/routes/(app)/fund/[id]/+page.svelte index fc3e9bc8..8bd8489a 100644 --- a/src/routes/(app)/fund/[id]/+page.svelte +++ b/src/routes/(app)/fund/[id]/+page.svelte @@ -16,7 +16,7 @@ import { copy, sats, loc, post } from "$lib/utils"; import { loginRedirect } from "$lib/store"; - const Hce = (window as any).Capacitor?.registerPlugin?.("Hce"); + const Hce = (window as any).CoinosHce; let { data }: any = $props(); @@ -43,14 +43,14 @@ function enableHce() { if (!Hce) return; const url = `${$page.url.origin}/api/lnurlw/${id}`; - Hce.setUrl({ url }); + Hce.setUrl(url); hceActive = true; toast.push("NFC armed — ready to tap"); } function disableHce() { if (!Hce) return; - Hce.setUrl({ url: "https://coinos.io" }); + Hce.setUrl("https://coinos.io"); hceActive = false; } -- cgit v1.2.3