diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 496217091..119fd58e9 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -7,6 +7,8 @@ + + diff --git a/lib/components/settings/settings_directory_selector.dart b/lib/components/settings/settings_directory_selector.dart index a42e6808d..1efad3ed4 100644 --- a/lib/components/settings/settings_directory_selector.dart +++ b/lib/components/settings/settings_directory_selector.dart @@ -10,6 +10,7 @@ import 'package:saber/data/file_manager/file_manager.dart'; import 'package:saber/data/nextcloud/saber_syncer.dart'; import 'package:saber/data/prefs.dart'; import 'package:saber/i18n/strings.g.dart'; +import 'package:saber/main_common.dart'; class SettingsDirectorySelector extends StatelessWidget { const SettingsDirectorySelector({ @@ -114,7 +115,7 @@ class _DirectorySelectorState extends State { final dir = Directory(directory); _directory = directory; - _isEmpty = dir.existsSync() ? dir.listSync().isEmpty : true; + _isEmpty = (dir.existsSync() ? dir.listSync().isEmpty : true) || true; if (!mounted) return; setState(() {}); @@ -123,6 +124,9 @@ class _DirectorySelectorState extends State { void _onConfirm() { Prefs.customDataDir.value = _directory; context.pop(); + if (Platform.isAndroid) { + requestStoragePermission(); + } } @override diff --git a/lib/main_common.dart b/lib/main_common.dart index 2f9100c0d..9b5e94b24 100644 --- a/lib/main_common.dart +++ b/lib/main_common.dart @@ -28,6 +28,19 @@ import 'package:saber/pages/user/login.dart'; import 'package:window_manager/window_manager.dart'; import 'package:worker_manager/worker_manager.dart'; import 'package:workmanager/workmanager.dart'; +import 'package:permission_handler/permission_handler.dart'; + +Future requestStoragePermission() async { + final status = await Permission.manageExternalStorage.request(); + if (status.isGranted) { + // Permission is granted + } else if (status.isDenied) { + // Permission is denied + } else if (status.isPermanentlyDenied) { + // Permission is permanently denied + openAppSettings(); // Open app settings to manually grant permission + } +} Future main( List args, { @@ -36,7 +49,6 @@ Future main( void Function(Widget) runApp = runApp, }) async { initWidgetsBinding(); - final parser = ArgParser()..addFlag('verbose', abbr: 'v', negatable: false); final parsedArgs = parser.parse(args);