Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c468dad
refactoring
Anton-Dodonov Apr 27, 2025
fb1ddcf
Change vpn link to 5.35.98.91
kongkha May 10, 2025
18afe04
Add settings page
kongkha May 12, 2025
71fe09a
added base structure to creating vpn profile
ginterloper May 19, 2025
b2216a8
build fix
ginterloper May 19, 2025
9086172
added links to dimension
ginterloper May 20, 2025
8d4d919
Bullet proof-localized-feature
WishyutC May 23, 2025
60560d8
Bullet proof-localized-feature
WishyutC May 23, 2025
ad9299f
Use flutter instead of dart for format CI
kongkha May 23, 2025
6915f77
Merge branch 'development' into bugfix/localization-no-synthetic-package
kongkha May 29, 2025
ef43782
feat: change Android status bar to white background with black icons
Anton-Dodonov Jun 15, 2025
d5a5d6d
fix: update l10n configuration to use new format
Anton-Dodonov Jun 15, 2025
3f7b957
chore: update dependencies
Anton-Dodonov Jun 15, 2025
06886be
Use flutter instead of dart for format CI (#29)
kongkha Jul 11, 2025
130df0e
Refactor localization implementation and remove unused ARB files
WishyutC May 29, 2025
56f0bab
Apply PR #27: refactor search dialog, improve localization, update de…
Anton-Dodonov Jul 12, 2025
5205140
Update generated Flutter files
Anton-Dodonov Jul 12, 2025
8762d86
Apply all PRs: merge feature/pr-27-integration and update l10n struct…
Anton-Dodonov Jul 12, 2025
9851e1e
Merge development into main: resolve plugin registrant conflicts, kee…
Anton-Dodonov Jul 12, 2025
6d14edc
debug ci
WishyutC Jun 5, 2025
f5de478
debug ci
WishyutC Jun 5, 2025
71c6e40
Merge dodonov branch: resolve pubspec conflicts and update dependencies
Anton-Dodonov Jul 12, 2025
e3a8051
Merge feat/setting_page+adapter_telegrambot: resolve localization and…
Anton-Dodonov Jul 12, 2025
eaba4f6
Merge bugfix/localization-no-synthetic-package: resolve all conflicts
Anton-Dodonov Jul 12, 2025
f61b728
Merge bugfix/vpnclient-engine-dependency: resolve all conflicts, keep…
Anton-Dodonov Jul 12, 2025
a042365
Update CHANGELOG: summarize all merged PRs and conflict resolutions
Anton-Dodonov Jul 12, 2025
6b4db31
Merge refactoring-branch: add new functionality and resolve conflicts
Anton-Dodonov Jul 13, 2025
67c195a
Merge hotfix/temporary-vpn-uri: update VPN URI configuration
Anton-Dodonov Jul 13, 2025
5745150
Merge feat/vpn-link-selector: resolve conflicts and keep HEAD versions
Anton-Dodonov Jul 13, 2025
b1ca6c8
Merge feat/dimensions: add dimension links and improvements
Anton-Dodonov Jul 13, 2025
45d22d7
Merge feat/adding-ios-VPN-profile: resolve conflicts and keep HEAD ve…
Anton-Dodonov Jul 13, 2025
98a0ce9
Merge ci/use-flutter-instead-dart-format: update CI configuration
Anton-Dodonov Jul 13, 2025
df5af5d
Update CHANGELOG: add all additional merged PRs
Anton-Dodonov Jul 13, 2025
7a19f3d
Change vpn link to 5.35.98.91
kongkha May 10, 2025
a48b3a6
Merge development branch: update VPN link configuration
Anton-Dodonov Jul 13, 2025
614688b
Update CHANGELOG: add development branch merge
Anton-Dodonov Jul 13, 2025
299ae1b
Merge branch 'main' into development
WishyutC Jul 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"IDX.aI.enableInlineCompletion": true,
"IDX.aI.enableCodebaseIndexing": true
}
54 changes: 54 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Changelog


## [Unreleased]

### Added
- Run scripts for different platforms (Android device/emulator, iOS device/simulator)
- Flutter Gen integration for better asset management
- Improved localization with proper l10n configuration
- Enhanced search dialog UI and state management

### Changed
- Replaced flutter_v2ray with vpnclient_engine_flutter
- Updated dependencies and removed unused code
- Improved UI responsiveness and overflow handling
- Refactored main.dart for better localization support

### Fixed
- Resolved potential UI overflow issues in search dialog
- Enhanced state initialization and lifecycle management
- Improved layout responsiveness and SafeArea integration

### Merged
- Merged branch `development`: updated VPN link configuration to use 5.35.98.91
- Merged branch `dodonov`: updated dependencies, improved l10n configuration, changed Android status bar style
- Merged branch `feat/setting_page+adapter_telegrambot`: added settings page adapter, improved localization, updated plugin registrants, switched to JSON localization assets
- Merged branch `bugfix/localization-no-synthetic-package`: resolved localization package issues, merged latest development changes
- Merged branch `bugfix/vpnclient-engine-dependency`: improved VPN engine dependency handling, resolved localization and UI conflicts
- Merged branch `refactoring-branch`: added new functionality including settings page, speed page, VPN provider, and navigation improvements
- Merged branch `hotfix/temporary-vpn-uri`: updated VPN URI configuration to use temporary server
- Merged branch `feat/vpn-link-selector`: added VPN link selector functionality
- Merged branch `feat/dimensions`: added dimension links and UI improvements
- Merged branch `feat/adding-ios-VPN-profile`: added iOS VPN profile support structure
- Merged branch `ci/use-flutter-instead-dart-format`: updated CI configuration to use Flutter instead of dart format

### Conflict Resolution
- Resolved multiple merge conflicts in pubspec.yaml, pubspec.lock, localization files, and generated plugin registrants
- Kept latest HEAD versions for all major Dart and localization files to ensure stability and consistency

## [1.0.12] - 2025-01-XX

### Added
- Initial release of VPN Client app
- Basic VPN functionality
- Multi-language support (English, Russian, Thai, Chinese)
- Dark/Light theme support
- Server selection interface
- Apps management page

### Changed
- Initial project structure and architecture

### Fixed
- Various UI improvements and bug fixes
2 changes: 2 additions & 0 deletions android/app/src/main/res/values-night/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
<item name="android:statusBarColor">@android:color/white</item>
<item name="android:windowLightStatusBar">true</item>
</style>
</resources>
2 changes: 2 additions & 0 deletions android/app/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
<item name="android:statusBarColor">@android:color/white</item>
<item name="android:windowLightStatusBar">true</item>
</style>
</resources>
4 changes: 4 additions & 0 deletions assets/lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"disconnected": "DISCONNECTED",
"reconnecting": "RECONNECTING",
"connecting": "CONNECTING",
<<<<<<< HEAD
"disconnecting": "DISCONNECTING",
"settings": "Settings",
"version": "Version",
Expand All @@ -38,4 +39,7 @@
"connection_reset": "Connection settings have been reset",
"failed_open_telegram": "Failed to open Telegram bot",
"about_app": "About App"
=======
"disconnecting": "DISCONNECTING"
>>>>>>> origin/bugfix/vpnclient-engine-dependency
}
6 changes: 3 additions & 3 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_native_splash: df59bb2e1421aa0282cb2e95618af4dcb0c56c29
flutter_v2ray: 21ee520e013877941e2e67b3b48aed9c6870e8dc
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf
flutter_v2ray: 1190bb389b67a1dc9f28ece1d4b308101e38395e
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7

PODFILE CHECKSUM: f8e15f817b1bf5846cb6aad560a31cf33c165196

Expand Down
2 changes: 1 addition & 1 deletion ios/Runner.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

103 changes: 64 additions & 39 deletions ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -1,50 +1,75 @@
import Flutter
import UIKit
///VPN
///import Foundation
import NetworkExtension

class VpnConfigurator {
static func setupTunnel() {
let manager = NEVPNManager.shared()
manager.loadFromPreferences { error in
if let error = error {
print("Failed to load VPN preferences: \(error)")
return
}
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)

let proto = NETunnelProviderProtocol()
proto.providerBundleIdentifier = "com.vpnclient.VPNclientTunnel"
proto.serverAddress = "VPNclient"
let controller = window?.rootViewController as! FlutterViewController
let vpnChannel = FlutterMethodChannel(
name: "com.vpnclient/vpn_control",
binaryMessenger: controller.binaryMessenger
)

manager.protocolConfiguration = proto
manager.localizedDescription = "VPNclient"
manager.isEnabled = true
vpnChannel.setMethodCallHandler { [weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) in
guard let self = self else { return }
switch call.method {
case "setupVPN":
guard let args = call.arguments as? [String: String],
let tunAddr = args["tunAddr"],
let tunMask = args["tunMask"],
let tunDns = args["tunDns"],
let socks5Proxy = args["socks5Proxy"] else {
result(FlutterError(code: "INVALID_ARGS", message: "Invalid arguments", details: nil))
return
}
print("AppDelegate: Setting up VPN with tunAddr=\(tunAddr), socks5Proxy=\(socks5Proxy)")
let vpnManager = VPNManager.sharedInstance ?? VPNManager()
vpnManager.setupVPNConfiguration(tunAddr: tunAddr, tunMask: tunMask, tunDns: tunDns, socks5Proxy: socks5Proxy) { error in
if let error = error {
print("AppDelegate: Setup VPN failed: \(error.localizedDescription)")
result(FlutterError(code: "SETUP_FAILED", message: error.localizedDescription, details: nil))
} else {
print("AppDelegate: Setup VPN succeeded")
result(nil)
}
}

manager.saveToPreferences { error in
if let error = error {
print("Failed to save VPN configuration: \(error)")
} else {
print("VPN configuration saved successfully.")
case "startVPN":
let vpnManager = VPNManager.sharedInstance ?? VPNManager()
vpnManager.startVPN { error in
if let error = error {
print("AppDelegate: Start VPN failed: \(error.localizedDescription)")
result(FlutterError(code: "START_FAILED", message: error.localizedDescription, details: nil))
} else {
print("AppDelegate: Start VPN succeeded")
result(nil)
}
}
}
}
}
}
///VPN

case "stopVPN":
let vpnManager = VPNManager.sharedInstance ?? VPNManager()
vpnManager.stopVPN {
print("AppDelegate: Stop VPN succeeded")
result(nil)
}

case "getVPNStatus":
let vpnManager = VPNManager.sharedInstance ?? VPNManager()
let status = vpnManager.vpnStatus.description
print("AppDelegate: VPN status: \(status)")
result(status)

@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
///vpn
VpnConfigurator.setupTunnel()
///vpn
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
default:
result(FlutterMethodNotImplemented)
}
}

return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
13 changes: 8 additions & 5 deletions ios/Runner/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
Expand All @@ -14,13 +16,14 @@
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-16" y="-40"/>
</scene>
</scenes>
</document>
9 changes: 9 additions & 0 deletions ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@
</dict>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
Expand All @@ -50,5 +55,9 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>com.apple.developer.networking.vpn.api</key>
<array>
<string>allow-vpn</string>
</array>
</dict>
</plist>
10 changes: 10 additions & 0 deletions ios/Runner/Runner.entitlements
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>packet-tunnel-provider</string>
</array>
</dict>
</plist>
15 changes: 1 addition & 14 deletions ios/Runner/RunnerRelease.entitlements
Original file line number Diff line number Diff line change
@@ -1,18 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>dns-settings</string>
<string>packet-tunnel-provider</string>
<string>dns-proxy</string>
<string>app-proxy-provider</string>
<string>content-filter-provider</string>
</array>
<key>com.apple.developer.networking.vpn.api</key>
<array>
<string>allow-vpn</string>
</array>
</dict>
<dict/>
</plist>
Loading
Loading