Skip to content

Commit c2fae37

Browse files
committed
add MANAGE_EXTERNAL_STORAGE permission for directory change
1 parent f62e169 commit c2fae37

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

android/app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
88
<!-- Needed for reading files opened with the app -->
99
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
10+
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
11+
1012

1113
<!-- Install update APKs -->
1214
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

lib/components/settings/settings_directory_selector.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:saber/data/file_manager/file_manager.dart';
1010
import 'package:saber/data/nextcloud/saber_syncer.dart';
1111
import 'package:saber/data/prefs.dart';
1212
import 'package:saber/i18n/strings.g.dart';
13+
import 'package:saber/main_common.dart';
1314

1415
class SettingsDirectorySelector extends StatelessWidget {
1516
const SettingsDirectorySelector({
@@ -114,7 +115,7 @@ class _DirectorySelectorState extends State<DirectorySelector> {
114115

115116
final dir = Directory(directory);
116117
_directory = directory;
117-
_isEmpty = dir.existsSync() ? dir.listSync().isEmpty : true;
118+
_isEmpty = (dir.existsSync() ? dir.listSync().isEmpty : true) || true;
118119

119120
if (!mounted) return;
120121
setState(() {});
@@ -123,6 +124,9 @@ class _DirectorySelectorState extends State<DirectorySelector> {
123124
void _onConfirm() {
124125
Prefs.customDataDir.value = _directory;
125126
context.pop();
127+
if (Platform.isAndroid) {
128+
requestStoragePermission();
129+
}
126130
}
127131

128132
@override

lib/main_common.dart

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ import 'package:saber/pages/user/login.dart';
2828
import 'package:window_manager/window_manager.dart';
2929
import 'package:worker_manager/worker_manager.dart';
3030
import 'package:workmanager/workmanager.dart';
31+
import 'package:permission_handler/permission_handler.dart';
32+
33+
Future<void> requestStoragePermission() async {
34+
final status = await Permission.manageExternalStorage.request();
35+
if (status.isGranted) {
36+
// Permission is granted
37+
} else if (status.isDenied) {
38+
// Permission is denied
39+
} else if (status.isPermanentlyDenied) {
40+
// Permission is permanently denied
41+
openAppSettings(); // Open app settings to manually grant permission
42+
}
43+
}
3144

3245
Future<void> main(
3346
List<String> args, {
@@ -36,7 +49,6 @@ Future<void> main(
3649
void Function(Widget) runApp = runApp,
3750
}) async {
3851
initWidgetsBinding();
39-
4052
final parser = ArgParser()..addFlag('verbose', abbr: 'v', negatable: false);
4153
final parsedArgs = parser.parse(args);
4254

0 commit comments

Comments
 (0)