feat(app): add secure routing and runtime resilience
Add explicit TUN and SOCKS5 connection modes, app routing controls, authenticated per-session local SOCKS5, Android network monitoring, persistent haptics, resilient session recovery, notification hardening and client-side Hivemind cleanup. Keep the hosted flutter_vless_android 1.1.5 runtime as the base and apply the Android compatibility/security patches at build time instead of restoring the unstable vendored runtime.
This commit is contained in:
1 parent
371db8da9f
commit
8ead3ff249
30 files changed
+3959
-484
No files matched your search
@@ -1,27 +1,34 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:revoltvpn/logic/app_colors.dart';
|
||||
import 'package:revoltvpn/logic/connection_settings.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/app_routing.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/connection_mode.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/haptic.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/rain.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/lightning.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/rain.dart';
|
||||
import 'package:revoltvpn/screens/settings/in_settings/resilience.dart';
|
||||
|
||||
// ── lib/screens/settings/settings_screen.dart ────────────────────────────────
|
||||
// Settings shell — full-screen page reached from the sidebar.
|
||||
//
|
||||
// Folder layout:
|
||||
// lib/screens/settings/ ← this folder: settings family
|
||||
// settings_screen.dart ← shell: Scaffold + AppBar + ListView (this file)
|
||||
// *_tile.dart ← one file per setting feature (add below)
|
||||
// lib/components/sidebar_contents/
|
||||
// settings.dart ← thin sidebar row that navigates here
|
||||
//
|
||||
// To add a setting:
|
||||
// 1. Create a new file in this folder, e.g. appearance_tile.dart
|
||||
// 2. Import it below
|
||||
// 3. Append it to the children list
|
||||
|
||||
class SettingsScreen extends StatelessWidget {
|
||||
class SettingsScreen extends StatefulWidget {
|
||||
const SettingsScreen({super.key});
|
||||
|
||||
@override
|
||||
State<SettingsScreen> createState() => _SettingsScreenState();
|
||||
}
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen> {
|
||||
ConnectionMode _mode = ConnectionSettings.mode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_loadMode();
|
||||
}
|
||||
|
||||
Future<void> _loadMode() async {
|
||||
await ConnectionSettings.initialize();
|
||||
if (mounted) setState(() => _mode = ConnectionSettings.mode);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -43,12 +50,15 @@ class SettingsScreen extends StatelessWidget {
|
||||
),
|
||||
body: ListView(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8),
|
||||
children: const [
|
||||
HapticFeedbackTile(),
|
||||
RainToggleTile(),
|
||||
LightningToggleTile(),
|
||||
// ── Add setting tiles here ────────────────────────────────────────
|
||||
// Each tile imports from its own file in this folder.
|
||||
children: [
|
||||
ConnectionModeTile(
|
||||
onChanged: (mode) => setState(() => _mode = mode),
|
||||
),
|
||||
const ResilienceModeTile(),
|
||||
AppRoutingTile(connectionMode: _mode),
|
||||
const HapticFeedbackTile(),
|
||||
const RainToggleTile(),
|
||||
const LightningToggleTile(),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user