connect() on non-Linux platforms now treats Android GATT status 133
(ANDROID_SPECIFIC_ERROR) as the transient failure it usually is: clean
close, 800 ms delay, one bounded retry, then surface. The scanner's
connect-failure snackbar no longer shows raw exception text: it maps
133, timeouts and everything else to localized plain-language messages,
persists until dismissed, and sends the raw detail to the app log
(#522 presentation acceptance).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
"scanner_bluetoothOffMessage": "Please turn on Bluetooth to scan for devices",
"scanner_connectFailedTransient": "The radio refused the connection (a common transient Bluetooth error). It was already retried; wait a few seconds and try again.",
"@scanner_connectFailedTransient": {
"description": "Human-readable text for an Android GATT 133 connect failure after the bounded retry also failed (#698)."
},
"scanner_connectFailedTimeout": "The connection timed out. Check that the radio is powered, in range, and not already connected to another device.",
"@scanner_connectFailedTimeout": {
"description": "Human-readable text for a connect timeout (#698)."
},
"scanner_connectFailedGeneric": "Could not connect to the radio. Details are in the App Debug Log.",
"@scanner_connectFailedGeneric": {
"description": "Human-readable fallback for any other connect failure; the raw exception goes to the log only (#522/#698)."
},
"scanner_bleReleaseWarning": "Radio may still be held by this device",
"@scanner_bleReleaseWarning": {
"description": "Persistent banner title when a BLE disconnect was never confirmed by the OS, so the radio may stay latched and stop advertising (#697)."