From 0030b5ce5a11ec564a9e3b3fc1f7f4342996bad3 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Sat, 17 Oct 2026 13:29:48 +0200 Subject: feat(android): tell the page when the phone changes network Co-Authored-By: Claude Opus 5.5 --- .../app/src/main/kotlin/org/meshbay/client/MainActivity.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'packages/meshbay-android/app/src/main/kotlin') diff --git a/packages/meshbay-android/app/src/main/kotlin/org/meshbay/client/MainActivity.kt b/packages/meshbay-android/app/src/main/kotlin/org/meshbay/client/MainActivity.kt index 7ec81693..75ac0156 100644 --- a/packages/meshbay-android/app/src/main/kotlin/org/meshbay/client/MainActivity.kt +++ b/packages/meshbay-android/app/src/main/kotlin/org/meshbay/client/MainActivity.kt @@ -353,11 +353,25 @@ class MainActivity : Activity() { * Tells the page when the network becomes unmetered or stops being: a * backup waiting for Wi-Fi starts, one running on it stops. An event on the * window, carrying the one boolean and nothing about the network. + * + * And when the phone moves to another network altogether, mobile data to + * Wi-Fi or back: a connection to a node may be running over the one just + * left, and the page checks it (transport.js onNetworkChange). Nothing + * about either network goes with it. */ private fun watchNetwork() { val cm = getSystemService(android.net.ConnectivityManager::class.java) var last: Boolean? = null + var current: android.net.Network? = null val callback = object : android.net.ConnectivityManager.NetworkCallback() { + override fun onAvailable(n: android.net.Network) { + val moved = current != null && current != n + current = n + if (moved) runOnUiThread { + if (::web.isInitialized) web.evaluateJavascript( + "window.dispatchEvent(new Event('meshbay-default-network'));", null) + } + } override fun onCapabilitiesChanged(n: android.net.Network, caps: android.net.NetworkCapabilities) = tell() override fun onLost(n: android.net.Network) = tell() private fun tell() { -- cgit v1.2.3