Skip to content

Commit b2e376d

Browse files
committed
add base
1 parent 0b20ebe commit b2e376d

4 files changed

Lines changed: 55 additions & 41 deletions

File tree

android/app/src/main/kotlin/com/pira/omid/AppList.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,9 @@ class AppListMethodChannel(private val context: Context) : MethodCallHandler {
4242
val appList = mutableListOf<Map<String, Any>>()
4343

4444
for (appInfo in installedApps) {
45-
// Skip system apps if they don't have a launcher
46-
if ((appInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0) {
47-
val launchIntent = packageManager.getLaunchIntentForPackage(appInfo.packageName)
48-
if (launchIntent == null) {
49-
continue
50-
}
45+
// Check if app is enabled
46+
if (!appInfo.enabled) {
47+
continue
5148
}
5249

5350
val appName = packageManager.getApplicationLabel(appInfo).toString()

lib/ui/bypass_apps/bypass_apps_screen.dart

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,15 @@ class _BypassAppsScreenState extends ConsumerState<BypassAppsScreen> {
6060
}
6161
}
6262

63-
void _loadSelectedPackages() {
64-
final selectedPackages = ref.read(bypassPackagesProvider);
65-
setState(() {
66-
_selectedPackages = List<String>.from(selectedPackages);
67-
});
63+
Future<void> _loadSelectedPackages() async {
64+
try {
65+
final selectedPackages = await ref.read(bypassPackagesProvider);
66+
setState(() {
67+
_selectedPackages = List<String>.from(selectedPackages);
68+
});
69+
} catch (e) {
70+
debugPrint('Error loading selected packages: $e');
71+
}
6872
}
6973

7074
List<Map<String, dynamic>> get _filteredApps {
@@ -92,19 +96,31 @@ class _BypassAppsScreenState extends ConsumerState<BypassAppsScreen> {
9296
}
9397

9498
void _saveSelectedPackages() async {
95-
// Save the selected packages
96-
await ref
97-
.read(bypassPackagesProvider.notifier)
98-
.setBypassPackages(_selectedPackages);
99-
100-
// Show toast message
101-
if (mounted) {
102-
ScaffoldMessenger.of(context).showSnackBar(
103-
SnackBar(
104-
content: Text('Saved successfully'),
105-
duration: Duration(seconds: 2),
106-
),
107-
);
99+
try {
100+
// Save the selected packages
101+
await ref
102+
.read(bypassPackagesProvider.notifier)
103+
.setBypassPackages(_selectedPackages);
104+
105+
// Show toast message
106+
if (mounted) {
107+
ScaffoldMessenger.of(context).showSnackBar(
108+
SnackBar(
109+
content: Text('Saved successfully'),
110+
duration: Duration(seconds: 2),
111+
),
112+
);
113+
}
114+
} catch (e) {
115+
// Show error message
116+
if (mounted) {
117+
ScaffoldMessenger.of(context).showSnackBar(
118+
SnackBar(
119+
content: Text('Failed to save: $e'),
120+
duration: Duration(seconds: 2),
121+
),
122+
);
123+
}
108124
}
109125
}
110126

@@ -192,4 +208,4 @@ class _BypassAppsScreenState extends ConsumerState<BypassAppsScreen> {
192208
),
193209
);
194210
}
195-
}
211+
}
Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,53 @@
11
import 'package:flutter_riverpod/flutter_riverpod.dart';
22
import 'package:shared_preferences/shared_preferences.dart';
33

4-
class BypassPackagesNotifier extends Notifier<List<String>> {
4+
class BypassPackagesNotifier extends Notifier<Future<List<String>>> {
55
@override
6-
List<String> build() {
6+
Future<List<String>> build() {
77
// Load initial state asynchronously
8-
_loadFromPreferences();
9-
return [];
8+
return _loadFromPreferences();
109
}
1110

1211
static const String _prefsKey = 'bypass_packages';
1312

14-
Future<void> _loadFromPreferences() async {
13+
Future<List<String>> _loadFromPreferences() async {
1514
try {
1615
final prefs = await SharedPreferences.getInstance();
1716
final List<String>? packages = prefs.getStringList(_prefsKey);
1817
if (packages != null) {
19-
// Update state after loading
20-
state = packages;
18+
return packages;
2119
}
20+
return [];
2221
} catch (e) {
2322
// Handle error silently
24-
state = [];
23+
return [];
2524
}
2625
}
2726

2827
Future<void> setBypassPackages(List<String> packages) async {
29-
state = packages;
3028
final prefs = await SharedPreferences.getInstance();
3129
await prefs.setStringList(_prefsKey, packages);
30+
state = Future.value(packages);
3231
}
3332

3433
Future<void> addBypassPackage(String packageName) async {
35-
if (!state.contains(packageName)) {
36-
final newPackages = List<String>.from(state)..add(packageName);
34+
final currentPackages = await state;
35+
if (!currentPackages.contains(packageName)) {
36+
final newPackages = List<String>.from(currentPackages)..add(packageName);
3737
await setBypassPackages(newPackages);
3838
}
3939
}
4040

4141
Future<void> removeBypassPackage(String packageName) async {
42-
if (state.contains(packageName)) {
43-
final newPackages = List<String>.from(state)..remove(packageName);
42+
final currentPackages = await state;
43+
if (currentPackages.contains(packageName)) {
44+
final newPackages = List<String>.from(currentPackages)..remove(packageName);
4445
await setBypassPackages(newPackages);
4546
}
4647
}
4748
}
4849

4950
final bypassPackagesProvider =
50-
NotifierProvider<BypassPackagesNotifier, List<String>>(
51+
NotifierProvider<BypassPackagesNotifier, Future<List<String>>>(
5152
BypassPackagesNotifier.new,
52-
);
53+
);

lib/ui/home/controller/home_handler.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ mixin HomeHandler {
6161
}
6262

6363
// Get bypass packages
64-
final bypassPackages = ref.read(bypassPackagesProvider);
64+
final bypassPackages = await ref.read(bypassPackagesProvider);
6565

6666
// Connect to VPN with bypass packages
6767
(await ref.read(

0 commit comments

Comments
 (0)