Rebrand: PaladinVPN -> ReVoltVPN — all references, package names, Android namespace

This commit is contained in:
esefxdz committed 2026-07-24 21:03:18 +03:00
1 parent aaf9887f49
commit 3531671d3d
26 files changed
+75 -274

No files matched your search

+5 -5
View File
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:paladinvpn/logic/vpn_connection.dart';
import 'package:paladinvpn/logic/session_timer.dart';
import 'package:paladinvpn/logic/ad_manager.dart';
import 'package:paladinvpn/components/online_dot.dart';
import 'package:paladinvpn/components/watch_ad_button.dart';
import 'package:revoltvpn/logic/vpn_connection.dart';
import 'package:revoltvpn/logic/session_timer.dart';
import 'package:revoltvpn/logic/ad_manager.dart';
import 'package:revoltvpn/components/online_dot.dart';
import 'package:revoltvpn/components/watch_ad_button.dart';
/// BottomBar is the bottom utility panel that surfaces server connectivity status
/// and offers the user an option to support the server when the VPN tunnel is active.
+1 -1
View File
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:paladinvpn/logic/session_timer.dart';
import 'package:revoltvpn/logic/session_timer.dart';
/// ClockDisplay renders inside the ConnectButton circle when the VPN is active.
///
+6 -6
View File
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:paladinvpn/logic/vpn_connection.dart';
import 'package:paladinvpn/logic/session_timer.dart';
import 'package:paladinvpn/components/clock_display.dart';
import 'package:revoltvpn/logic/vpn_connection.dart';
import 'package:revoltvpn/logic/session_timer.dart';
import 'package:revoltvpn/components/clock_display.dart';
class ConnectButton extends StatefulWidget {
const ConnectButton({super.key});
@@ -108,13 +108,13 @@ class _ConnectButtonState extends State<ConnectButton>
title: const Text('VPN Permission Required',
style: TextStyle(color: Colors.white)),
content: const Text(
'PaladinVPN needs permission to set up a VPN connection.\n\n'
'ReVoltVPN needs permission to set up a VPN connection.\n\n'
'Since the permission was denied once, Android won\'t ask again. '
'To grant it manually:\n\n'
'1. Open your device Settings\n'
'2. Go to Apps → PaladinVPN\n'
'2. Go to Apps → ReVoltVPN\n'
'3. Tap "VPN" and enable it\n'
'4. Return to PaladinVPN and tap connect',
'4. Return to ReVoltVPN and tap connect',
style: TextStyle(color: Color(0xFFA0AEC0)),
),
actions: [
+1 -1
View File
@@ -72,7 +72,7 @@ class GdprButton extends StatelessWidget {
void _fallbackToPrivacyPolicy() async {
final Uri url = Uri.parse(
'https://github.com/esefxdz/PaladinVPN/blob/main/PRIVACY_POLICY.md',
'https://github.com/esefxdz/ReVoltVPN/blob/main/PRIVACY_POLICY.md',
);
if (!await launchUrl(url, mode: LaunchMode.externalApplication)) {
debugPrint('Could not launch $url');
+3 -3
View File
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart';
/// Header displays the Paladin brand logo, title, and subtitle.
/// Header displays the ReVolt brand logo, title, and subtitle.
///
/// It represents the top branding portion of the main dashboard and is designed
/// with clean proportions, consistent typography, and a modern cyberpunk-inspired color scheme.
class Header extends StatelessWidget {
const Header({super.key});
// Cyber-paladin cyan glow accent color used as a fallback for the shield icon
// cyber-revolt cyan glow accent color used as a fallback for the shield icon
static const Color _cyanGlow = Color(0xFF00E5FF);
@override
@@ -30,7 +30,7 @@ class Header extends StatelessWidget {
// Brand primary name
const Text(
'Paladin',
'ReVolt',
style: TextStyle(
fontSize: 22,
fontWeight: FontWeight.w800,
+2 -2
View File
@@ -5,7 +5,7 @@ class InfoButton extends StatelessWidget {
const InfoButton({super.key});
Future<void> _launchGitHub() async {
final Uri url = Uri.parse('https://github.com/esefxdz/PaladinVPN');
final Uri url = Uri.parse('https://github.com/esefxdz/ReVoltVPN');
if (!await launchUrl(url, mode: LaunchMode.externalApplication)) {
debugPrint('Could not launch $url');
}
@@ -16,7 +16,7 @@ class InfoButton extends StatelessWidget {
return IconButton(
icon: const Icon(Icons.help_outline, color: Colors.white, size: 28),
onPressed: _launchGitHub,
tooltip: 'About PaladinVPN',
tooltip: 'About ReVoltVPN',
splashRadius: 24,
);
}
+3 -3
View File
@@ -46,7 +46,7 @@ class VpnNotificationManager {
// the old channel was created without 'ongoing: true', users would be
// stuck with a swipeable notification forever.
const androidDetails = AndroidNotificationDetails(
'paladin_vpn_status_v2',
'revolt_vpn_status_v2',
'VPN Status',
channelDescription: 'Shown while VPN is active — non-dismissable',
importance: Importance.low,
@@ -72,7 +72,7 @@ class VpnNotificationManager {
try {
await _plugin.show(
888, // Fixed ID — always updates the same notification
'Paladin VPN Active',
'REVOLT VPN Active',
'Time: $timeLeft • $speedKbps',
notificationDetails,
);
@@ -84,7 +84,7 @@ class VpnNotificationManager {
await init();
await _plugin.show(
888,
'Paladin VPN Active',
'REVOLT VPN Active',
'Time: $timeLeft • $speedKbps',
notificationDetails,
);
+1 -1
View File
@@ -5,7 +5,7 @@ class PrivacyPolicyButton extends StatelessWidget {
const PrivacyPolicyButton({super.key});
Future<void> _launchPrivacyPolicy() async {
final Uri url = Uri.parse('https://github.com/esefxdz/PaladinVPN/blob/main/PRIVACY_POLICY.md');
final Uri url = Uri.parse('https://github.com/esefxdz/ReVoltVPN/blob/main/PRIVACY_POLICY.md');
if (!await launchUrl(url, mode: LaunchMode.externalApplication)) {
debugPrint('Could not launch $url');
}
+1 -1
View File
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:paladinvpn/logic/vpn_connection.dart';
import 'package:revoltvpn/logic/vpn_connection.dart';
/// StatusText displays the status of the VPN tunnel.
///
+2 -2
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:paladinvpn/logic/session_timer.dart';
import 'package:paladinvpn/logic/ad_manager.dart';
import 'package:revoltvpn/logic/session_timer.dart';
import 'package:revoltvpn/logic/ad_manager.dart';
/// WatchAdButton is a voluntary option allowing the user to watch a rewarded video ad
/// and extend their active VPN tunnel session by 30 minutes as a reward.
+3 -3
View File
@@ -3,9 +3,9 @@ import 'dart:convert';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:paladinvpn/logic/crypto_service.dart';
import 'package:paladinvpn/logic/hivemind_service.dart';
import 'package:paladinvpn/logic/app_config.dart';
import 'package:revoltvpn/logic/crypto_service.dart';
import 'package:revoltvpn/logic/hivemind_service.dart';
import 'package:revoltvpn/logic/app_config.dart';
/// AdManager manages the lifecycle of rewarded video ads.
///
+3 -3
View File
@@ -3,8 +3,8 @@ import 'dart:convert';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:paladinvpn/logic/app_config.dart';
import 'package:paladinvpn/logic/crypto_service.dart';
import 'package:revoltvpn/logic/app_config.dart';
import 'package:revoltvpn/logic/crypto_service.dart';
class HivemindService {
/// Nonce generated at the start of a connect cycle.
@@ -76,7 +76,7 @@ class HivemindService {
'&security=${AppConfig.vlessSecurity}'
'&type=${AppConfig.vlessType}'
'&flow=${AppConfig.vlessFlow}'
'#PaladinVPN';
'#ReVoltVPN';
_expectedNonce = null; // consumed successfully
return vlessUrl;
+4 -4
View File
@@ -2,10 +2,10 @@ import 'dart:async';
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:paladinvpn/logic/app_config.dart';
import 'package:paladinvpn/logic/vpn_connection.dart';
import 'package:paladinvpn/logic/crypto_service.dart';
import 'package:paladinvpn/components/notification.dart';
import 'package:revoltvpn/logic/app_config.dart';
import 'package:revoltvpn/logic/vpn_connection.dart';
import 'package:revoltvpn/logic/crypto_service.dart';
import 'package:revoltvpn/components/notification.dart';
/// SessionTimer is the client-side session authority for the VPN tunnel.
///
+3 -3
View File
@@ -5,7 +5,7 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter_vless/flutter_vless.dart';
import 'package:paladinvpn/logic/hivemind_service.dart';
import 'package:revoltvpn/logic/hivemind_service.dart';
// ── VPN States ────────────────────────────────────────────────────────────────
enum VpnStatus {
@@ -50,7 +50,7 @@ class VpnConnection extends ChangeNotifier {
try {
await _vless.initializeVless(
providerBundleIdentifier: 'com.paladinvpn.app',
providerBundleIdentifier: 'com.revoltvpn.app',
);
_initialized = true;
} catch (e) {
@@ -148,7 +148,7 @@ class VpnConnection extends ChangeNotifier {
final config = parsed.getFullConfiguration();
await _vless.startVless(
remark: parsed.remark.isNotEmpty ? parsed.remark : 'PaladinVPN',
remark: parsed.remark.isNotEmpty ? parsed.remark : 'ReVoltVPN',
config: config,
);
+10 -10
View File
@@ -3,13 +3,13 @@ import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
import 'package:paladinvpn/logic/vpn_connection.dart';
import 'package:paladinvpn/logic/session_timer.dart';
import 'package:paladinvpn/logic/ad_manager.dart';
import 'package:paladinvpn/logic/consent_manager.dart';
import 'package:paladinvpn/screens/intro.dart';
import 'package:revoltvpn/logic/vpn_connection.dart';
import 'package:revoltvpn/logic/session_timer.dart';
import 'package:revoltvpn/logic/ad_manager.dart';
import 'package:revoltvpn/logic/consent_manager.dart';
import 'package:revoltvpn/screens/intro.dart';
/// The entry point for the Paladin VPN application.
/// The entry point for the REVOLT VPN application.
void main() async {
// Ensure that the Flutter engine is fully initialized before using platform channels
// (e.g., for SystemChrome or MobileAds).
@@ -39,12 +39,12 @@ void main() async {
await MobileAds.instance.initialize();
// Inflate the root widget
runApp(const PaladinApp());
runApp(const ReVoltApp());
}
/// The root application widget wrapping the app in necessary state providers and themes.
class PaladinApp extends StatelessWidget {
const PaladinApp({super.key});
class ReVoltApp extends StatelessWidget {
const ReVoltApp({super.key});
@override
Widget build(BuildContext context) {
@@ -69,7 +69,7 @@ class PaladinApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => AdManager()),
],
child: MaterialApp(
title: 'Paladin VPN',
title: 'ReVolt VPN',
debugShowCheckedModeBanner: false,
theme: _buildDarkTheme(),
home: const IntroScreen(),
+2 -2
View File
@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:paladinvpn/screens/main_screen.dart';
import 'package:revoltvpn/screens/main_screen.dart';
class IntroScreen extends StatefulWidget {
const IntroScreen({super.key});
@@ -77,7 +77,7 @@ class _IntroScreenState extends State<IntroScreen> with WidgetsBindingObserver {
),
const SizedBox(height: 30),
const Text(
'PALADIN VPN',
'REVOLT VPN',
style: TextStyle(
color: Colors.white,
fontSize: 28,
+8 -8
View File
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart';
import 'package:paladinvpn/components/header.dart';
import 'package:paladinvpn/components/status_text.dart';
import 'package:paladinvpn/components/connect_button.dart';
import 'package:paladinvpn/components/bottom_bar.dart';
import 'package:paladinvpn/components/info_button.dart';
import 'package:paladinvpn/components/privacy_policy_button.dart';
import 'package:paladinvpn/components/gdpr_button.dart';
import 'package:revoltvpn/components/header.dart';
import 'package:revoltvpn/components/status_text.dart';
import 'package:revoltvpn/components/connect_button.dart';
import 'package:revoltvpn/components/bottom_bar.dart';
import 'package:revoltvpn/components/info_button.dart';
import 'package:revoltvpn/components/privacy_policy_button.dart';
import 'package:revoltvpn/components/gdpr_button.dart';
/// MainScreen serves as the primary home screen for Paladin VPN.
/// MainScreen serves as the primary home screen for REVOLT VPN.
///
/// It provides a dark mode, cyberpunk-inspired visual layout displaying:
/// - Logo and Branding at the top (`Header`)