Rebrand: PaladinVPN -> ReVoltVPN — all references, package names, Android namespace
This commit is contained in:
1 parent
aaf9887f49
commit
3531671d3d
26 files changed
+75
-274
No files matched your search
@@ -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,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.
|
||||
///
|
||||
|
||||
@@ -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: [
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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,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.
|
||||
///
|
||||
|
||||
@@ -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,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,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;
|
||||
|
||||
@@ -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.
|
||||
///
|
||||
|
||||
@@ -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
@@ -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(),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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`)
|
||||
|
||||
Reference in new issue
Block a user