esefxdzandClaude Opus 5 eab43b0420 fix(session): deliver the expiry warning when the app is closed
The five-minute warning did not arrive in the one case it exists for.

The deadline is enforced by two things - a main-looper Handler and an
alarm - while the warning had only the alarm, and that alarm is inexact
on purpose so the app can stay off SCHEDULE_EXACT_ALARM. Doze defers an
inexact alarm freely, and with the app closed it deferred this one past
the end of the session it was warning about.

Measured on an emulator, app swiped from recents and its process killed,
screen off, deviceidle forced to IDLE, 7-minute session:

  before  warning never fired; request code 1002 never delivered and
          handleSessionWarningAlarm never ran. Expiry was still punctual
          (16:00:55 against a 16:00:54 deadline) because the deadline has
          its Handler.
  after   warning posted as the session crossed 300 s remaining, app
          still closed and device still IDLE; expiry unchanged.

So give the warning the same backstop that already makes the deadline
reliable. postDelayed runs on uptimeMillis, so a genuinely suspended
device still fires it late - handleSessionWarningAlarm then drops it on
the existing window check instead of claiming "5 minutes" with seconds
left. The alarm stays for the case where the process was restarted and
no Handler callback survives.

Note this does not make the warning punctual under true suspend; only
SCHEDULE_EXACT_ALARM would, and that permission is deliberately not
declared.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-17 16:14:48 +03:00
2026-10-17 00:50:36 +03:00
2026-09-06 13:07:37 +03:00
2026-10-17 00:50:36 +03:00
2026-07-28 20:56:08 +03:00
2026-07-28 21:37:59 +03:00
2026-10-08 13:20:52 +03:00

ReVoltVPN banner

ReVoltVPN

A free VPN app for Android. Open-source client, transparent infrastructure. Watch an ad, get 2 hours of full-speed traffic — no accounts, no logs, no subscriptions.


How it works

  1. Watch a short rewarded ad
  2. Server creates a temporary VLESS session (2 hours / 10 GB)
  3. Your traffic routes through a single server in Finland at full speed
  4. When time or data runs out, session ends — watch another ad to continue
  5. No throttling, no slow lane, no mid-session punishment

No email. No password. No payment. The ad pays for the server.


Protocol

  • Transport — VLESS over XHTTP (HTTP/2 multiplexed, path-hidden behind /revolt)
  • Obfuscation — Xray Reality spoofs a real website's TLS. To any DPI box, your tunnel looks like a browser visiting that website
  • Encryption — TLS 1.3 with borrowed certificate (Reality). No certbot, no domain ownership required
  • API — Standard HTTPS to a separate domain. Tunnel destination is IP-pinned — domain compromise is DoS only

Stack

Layer Technology
App Flutter (Android)
VPN VLESS + Xray Reality + XHTTP
Backend Python Flask ("Hivemind") — session management, quotas, stats
Ads Google AdMob rewarded, verified server-side
Server Debian, single Hetzner box in Finland

Limitations

  • One server, one location (Finland)
  • 2 vCPU / 4 GB RAM — not built for thousands of concurrent users
  • Android only

Privacy

Your traffic routes through Finland. We don't log it, inspect it, or sell it. Hivemind tracks only session liveness and byte counters for quota enforcement — no packet contents, no destination IPs, no DNS queries.

Full privacy policy: PRIVACY_POLICY.md


ReVoltVPN is not affiliated with any VPN company.

S
Description
A simple vless client built with flutter
Readme GPL-3.0
12 MiB
0 Stars 1 Watchers 0 Forks
3.3.8
Latest
2026-10-17 18:55:59 +03:00
Languages
Dart 59.5%
Kotlin 38.2%
Shell 2.3%