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);