app: learn probe durations per device; stop claiming VPN after teardown
The ETA table was fixed at compile time, but real durations are a property of this phone and the network it stands in - ICMPv6 answers in milliseconds where IPv6 works and waits out its timeout where it does not. Estimates now prefer an EMA (70/30) of what this device actually measured, seeded by the old constants on first run. VPN detection had two lies in it, both found on hardware: a disconnected tunnel lingers in allNetworks while tearing down, so 'VPN active' is now judged from the ACTIVE network only; and any bind failure counted as 'per-network blocked', so a network dying mid-run flipped a healthy run to INCONCLUSIVE - now only a genuine EPERM refusal counts. Banner and finding split three ways (VPN + blocked / blocked only / VPN only) so the app never names a VPN the user just turned off. App version 0.2.3. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3214cc877a
commit
c5f3c2e7af
@@ -15,7 +15,7 @@ plugins {
|
||||
//
|
||||
// major*1_000_000 + minor*10_000 + patch*10 leaves room for 9 patch-level rebuilds (the trailing
|
||||
// digit) without disturbing the mapping, and stays inside the 2_100_000_000 ceiling until major 2100.
|
||||
val appVersionName = "0.2.2"
|
||||
val appVersionName = "0.2.3"
|
||||
|
||||
fun versionCodeOf(semver: String): Int {
|
||||
val (major, minor, patch) = semver.substringBefore('-').split(".").map(String::toInt)
|
||||
|
||||
Reference in New Issue
Block a user