From 44950032f7f6498252cb29e56549910586da39df Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sat, 8 Nov 2025 16:17:33 -0500 Subject: [PATCH] Use alternative storage dir if user-accessible one is null (#2392) --- lib/providers/apps_provider.dart | 16 ++++++++-------- lib/providers/settings_provider.dart | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 7770cce..9f87a7d 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -498,6 +498,10 @@ Future getInstalledInfo( return null; } +Future getAppStorageDir() async => + await getExternalStorageDirectory() ?? + await getApplicationDocumentsDirectory(); + class AppsProvider with ChangeNotifier { // In memory App state (should always be kept in sync with local storage versions) Map apps = {}; @@ -534,15 +538,11 @@ class AppsProvider with ChangeNotifier { iconsCacheDir.createSync(); } } else { - APKDir = Directory( - '${(await getExternalStorageDirectory())!.path}/apks', - ); + APKDir = Directory('${(await getAppStorageDir()).path}/apks'); if (!APKDir.existsSync()) { APKDir.createSync(); } - iconsCacheDir = Directory( - '${(await getExternalStorageDirectory())!.path}/icons', - ); + iconsCacheDir = Directory('${(await getAppStorageDir()).path}/icons'); if (!iconsCacheDir.existsSync()) { iconsCacheDir.createSync(); } @@ -1002,7 +1002,7 @@ class AppsProvider with ChangeNotifier { } Future getStorageRootPath() async { - return '/${(await getExternalStorageDirectory())!.uri.pathSegments.sublist(0, 3).join('/')}'; + return '/${(await getAppStorageDir()).uri.pathSegments.sublist(0, 3).join('/')}'; } Future moveObbFile(File file, String appId) async { @@ -1449,7 +1449,7 @@ class AppsProvider with ChangeNotifier { Future getAppsDir() async { Directory appsDir = Directory( - '${(await getExternalStorageDirectory())!.path}/app_data', + '${(await getAppStorageDir()).path}/app_data', ); if (!appsDir.existsSync()) { appsDir.createSync(); diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 43f4b70..933de5f 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -9,7 +9,6 @@ import 'package:obtainium/app_sources/github.dart'; import 'package:obtainium/main.dart'; import 'package:obtainium/providers/apps_provider.dart'; import 'package:obtainium/providers/source_provider.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_storage/shared_storage.dart' as saf; @@ -35,7 +34,7 @@ class SettingsProvider with ChangeNotifier { // Not done in constructor as we want to be able to await it Future initializeSettings() async { prefs = await SharedPreferences.getInstance(); - defaultAppDir = (await getExternalStorageDirectory())!.path; + defaultAppDir = (await getAppStorageDir()).path; notifyListeners(); }