diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 799408295..8068ac306 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -3,8 +3,21 @@
package="deckers.thibault.aves"
android:installLocation="auto">
+
+
-
+
+
diff --git a/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java b/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java
index 5230ed873..082e9c9ba 100644
--- a/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java
+++ b/android/app/src/main/java/deckers/thibault/aves/model/provider/MediaStoreImageProvider.java
@@ -33,6 +33,7 @@ public class MediaStoreImageProvider extends ImageProvider {
MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE,
MediaStore.MediaColumns.SIZE,
+ // TODO TLAD use `DISPLAY_NAME` instead/along `TITLE`?
MediaStore.MediaColumns.TITLE,
MediaStore.MediaColumns.WIDTH,
MediaStore.MediaColumns.HEIGHT,
@@ -192,12 +193,15 @@ public class MediaStoreImageProvider extends ImageProvider {
return;
}
- if (activity.getContentResolver().delete(uri, null, null) > 0) {
- Log.d(LOG_TAG, "deleted from content resolver uri=" + uri);
- callback.onSuccess(null);
- return;
+ try {
+ if (activity.getContentResolver().delete(uri, null, null) > 0) {
+ Log.d(LOG_TAG, "deleted from content resolver uri=" + uri);
+ callback.onSuccess(null);
+ return;
+ }
+ } catch (Exception e) {
+ Log.e(LOG_TAG, "failed to delete entry", e);
}
-
callback.onFailure();
}
diff --git a/lib/main.dart b/lib/main.dart
index 0b473fc78..0f7c9d046 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -101,11 +101,13 @@ class _HomePageState extends State {
if (snapshot.hasError) return const Icon(OMIcons.error);
if (snapshot.connectionState != ConnectionState.done) return const SizedBox.shrink();
debugPrint('$runtimeType app setup future complete');
- return _sharedEntry != null
- ? SingleFullscreenPage(
- entry: _sharedEntry,
- )
- : CollectionPage(_mediaStore.collection);
+ if (_sharedEntry != null) {
+ return SingleFullscreenPage(entry: _sharedEntry);
+ }
+ if (_mediaStore != null) {
+ return CollectionPage(_mediaStore.collection);
+ }
+ return const SizedBox.shrink();
});
}
}
diff --git a/lib/utils/android_file_utils.dart b/lib/utils/android_file_utils.dart
index c14187243..8c94ea034 100644
--- a/lib/utils/android_file_utils.dart
+++ b/lib/utils/android_file_utils.dart
@@ -84,7 +84,7 @@ class StorageVolume {
isPrimary: map['isPrimary'] ?? false,
isRemovable: map['isRemovable'] ?? false,
path: map['path'] ?? '',
- state: map['string'] ?? '',
+ state: map['state'] ?? '',
);
}
}
diff --git a/lib/widgets/common/action_delegates/selection_action_delegate.dart b/lib/widgets/common/action_delegates/selection_action_delegate.dart
index d70c34bf2..d2936c189 100644
--- a/lib/widgets/common/action_delegates/selection_action_delegate.dart
+++ b/lib/widgets/common/action_delegates/selection_action_delegate.dart
@@ -68,7 +68,8 @@ class SelectionActionDelegate with PermissionAwareMixin {
final deletedCount = deletedUris.length;
final selectionCount = selection.length;
if (deletedCount < selectionCount) {
- _showFeedback(context, 'Failed to delete ${selectionCount - deletedCount} items');
+ final count = selectionCount - deletedCount;
+ _showFeedback(context, 'Failed to delete ${Intl.plural(count, one: '${count} item', other: '${count} items')}');
}
if (deletedCount > 0) {
collection.source.removeEntries(selection.where((e) => deletedUris.contains(e.uri)));