diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 535a429..1e2f4d3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -51,4 +51,7 @@ + \ No newline at end of file diff --git a/assets/translations/de.json b/assets/translations/de.json index 441421c..9b0208d 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -209,6 +209,7 @@ "addCategory": "Kategorie hinzufügen", "label": "Bezeichnung", "language": "Sprache", + "storagePermissionDenied": "Storage permission denied", "tooManyRequestsTryAgainInMinutes": { "one": "Zu viele Anfragen (Rate begrenzt) - versuchen Sie es in {} Minute erneut", "other": "Zu viele Anfragen (Rate begrenzt) - versuchen Sie es in {} Minuten erneut" diff --git a/assets/translations/en.json b/assets/translations/en.json index 8231108..c9925cf 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -209,6 +209,7 @@ "addCategory": "Add Category", "label": "Label", "language": "Language", + "storagePermissionDenied": "Storage permission denied", "tooManyRequestsTryAgainInMinutes": { "one": "Too many requests (rate limited) - try again in {} minute", "other": "Too many requests (rate limited) - try again in {} minutes" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 320b229..ebf0698 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -207,6 +207,8 @@ "categoryDeleteWarning": "A(z) {} összes app kategorizálatlan állapotba kerül.", "addCategory": "Új kategória", "label": "Címke", + "language": "Language", + "storagePermissionDenied": "Storage permission denied", "tooManyRequestsTryAgainInMinutes": { "one": "Túl sok kérés (korlátozott arány) – próbálja újra {} perc múlva", "other": "Túl sok kérés (korlátozott arány) – próbálja újra {} perc múlva" diff --git a/assets/translations/it.json b/assets/translations/it.json index 30b1d1b..31c657c 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -209,6 +209,7 @@ "addCategory": "Aggiungi categoria", "label": "Etichetta", "language": "Lingua", + "storagePermissionDenied": "Storage permission denied", "tooManyRequestsTryAgainInMinutes": { "one": "Troppe richieste (traffico limitato) - riprova tra {} minuto", "other": "Troppe richieste (traffico limitato) - riprova tra {} minuti" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 86c9b3f..bab4d54 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -209,6 +209,7 @@ "addCategory": "カテゴリを追加", "label": "ラベル", "language": "言語", + "storagePermissionDenied": "Storage permission denied", "tooManyRequestsTryAgainInMinutes": { "one": "リクエストが多すぎます(レート制限)- {}分後に再試行してください", "other": "リクエストが多すぎます(レート制限)- {}分後に再試行してください" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 36cf8c2..510c76d 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -209,6 +209,7 @@ "addCategory": "Add Category", "label": "Label", "language": "Language", + "storagePermissionDenied": "Storage permission denied", "tooManyRequestsTryAgainInMinutes": { "one": "请求过多 (API 限制) - 在 {} 分钟后重试", "other": "请求过多 (API 限制) - 在 {} 分钟后重试" diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 556e017..5d09d00 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -66,6 +66,8 @@ class _ImportExportPageState extends State { showError( tr('exportedTo', args: [path]), context); + }).catchError((e) { + showError(e, context); }); }, child: Text(tr('obtainiumExport')))), diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 67ff3f3..aa5c2fd 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -17,6 +17,7 @@ import 'package:obtainium/providers/logs_provider.dart'; import 'package:obtainium/providers/notifications_provider.dart'; import 'package:obtainium/providers/settings_provider.dart'; import 'package:package_archive_info/package_archive_info.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; import 'package:path_provider/path_provider.dart'; import 'package:flutter_fgbg/flutter_fgbg.dart'; @@ -706,6 +707,14 @@ class AppsProvider with ChangeNotifier { exportDir = await getExternalStorageDirectory(); path = exportDir!.path; } + if ((await DeviceInfoPlugin().androidInfo).version.sdkInt <= 28) { + if (await Permission.storage.isDenied) { + await Permission.storage.request(); + } + if (await Permission.storage.isDenied) { + throw ObtainiumError(tr('storagePermissionDenied')); + } + } File export = File( '${exportDir.path}/${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().millisecondsSinceEpoch}.json'); export.writeAsStringSync(