feat(app): OS session-expiry enforcement, session persistence, support sync

Enforce session expiry at the OS level (AlarmManager + handler) so the tunnel dies even if the UI process is killed; persist the session so a START_STICKY restart re-establishes it; sync immediately after a support top-up; slow the session beacon 5s/30s -> 60s/60s; drop the Always-on-VPN deep-link and the legacy 'ass' migration. Docs: CHANGELOG 3.3.4, privacy-policy log disclosure, README.
This commit is contained in:
esefxdz committed 2026-09-02 20:33:33 +03:00
1 parent dfeb7f161c
commit 9ac236a981
15 files changed
+447 -383

No files matched your search

@@ -55,14 +55,6 @@ class _BackgroundReliabilityTileState extends State<BackgroundReliabilityTile>
);
}
Future<void> _openVpnSettings() async {
final opened = await PowerSettings.openVpnSettings();
if (!mounted || opened) return;
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Could not open VPN settings.')),
);
}
@override
Widget build(BuildContext context) {
final exempt = _batteryExempt;
@@ -76,8 +68,8 @@ class _BackgroundReliabilityTileState extends State<BackgroundReliabilityTile>
style: TextStyle(color: AppColors.textWhite, fontSize: 15),
),
subtitle: Text(
'Android stops background apps to save power. These two settings '
'are what keep the VPN running when the app is closed.',
'Android stops background apps to save power. Disabling battery '
'optimisation is what keeps the VPN running when the app is closed.',
style: TextStyle(color: AppColors.textDim, fontSize: 12),
),
),
@@ -106,20 +98,6 @@ class _BackgroundReliabilityTileState extends State<BackgroundReliabilityTile>
label: const Text('Allow background activity'),
),
],
const SizedBox(height: 16),
const Text(
'Always-on VPN keeps the tunnel up even after the app is closed '
'or the phone restarts. Turn it on for Revolt VPN in Android\'s '
'VPN settings, and enable "Block connections without VPN" if you '
'want traffic to stop rather than leak when it drops.',
style: TextStyle(color: AppColors.textMuted, fontSize: 12),
),
const SizedBox(height: 8),
OutlinedButton.icon(
onPressed: _openVpnSettings,
icon: const Icon(Icons.settings),
label: const Text('Open VPN settings'),
),
],
),
),