feat(session): warn before a session ends and say when protection stops
Review findings #1-#3 in internal/APP_REVIEW_2026-10-16.md: every session end dropped the user onto their real IP with no warning, and the app showed no errors at all. - RevoltAlerts (vendored runtime) owns both alerts: a high-importance channel, ids 2 and 3, posted from whichever process is alive - XrayVPNService schedules a 5-minute warning off the deadline it already holds, best effort (a warning that cannot be armed never stops a tunnel), with its own request code so it cannot clobber the expiry alarm - the warning intent is handled above the command dispatch: without that it would fall through to the final else and stop the tunnel 5 minutes early - SessionTimer._doDisconnect takes endedMessage: set for ends the user did not ask for, which both posts the alert and gives the UI a sentence - the API being unreachable no longer disconnects a working tunnel; it is a display state now, with expiry still enforced natively and server-side - status_bar.dart renders connect errors, connecting progress and the session-end reason flutter analyze clean; debug APK builds (Kotlin compiles). Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
1 parent
37753c6396
commit
742f37683e
7 files changed
+401
-26
No files matched your search
@@ -7,6 +7,24 @@ Versions follow [semver](https://semver.org/): MAJOR.MINOR.PATCH
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- **Five-minute warning before a session ends.** The VPN service schedules it
|
||||
off the same deadline it already enforces, so the warning still arrives when
|
||||
the app is closed, and a support top-up moves it with the deadline.
|
||||
- **"Disconnected — not protected" notification** whenever a session ends for
|
||||
any reason other than you tapping disconnect: expiry, the data limit, the
|
||||
server ending the session, or the tunnel stopping on its own.
|
||||
- **The app now shows what went wrong.** Connect errors, the reason a session
|
||||
ended, and progress while connecting appear under the status bar instead of
|
||||
the button silently going back to idle.
|
||||
|
||||
### Changed
|
||||
- **A control-plane outage no longer tears down a working tunnel.** The app used
|
||||
to disconnect itself after about two minutes of failed status polls, putting
|
||||
you back on your real IP; it now keeps the tunnel up and shows
|
||||
"Can't reach the server — still connected". Expiry is still enforced by the
|
||||
VPN service's own deadline and by the server.
|
||||
|
||||
### Fixed
|
||||
- **Rewarded ads no longer break connecting.** With ads enabled, the ad's
|
||||
server-side-verification nonce and the nonce the connect flow waited for were
|
||||
|
||||
Reference in new issue
Block a user