Browse Source

Fix for too many thumbnails in autoupload settings

This patch is twofold:
- Keep using SQL limit until android 11 (which is where it becomes mandatory to not use it)
- Force MediaProvider to stop querying images after limit has been reached, even if cursor contains more.
This handles the edge case of Android versions over 11 which don't properly implement the limit argument

Signed-off-by: Álvaro Brey Vilas <alvaro.brey@nextcloud.com>
Álvaro Brey Vilas 3 years ago
parent
commit
9c7d212d52

+ 2 - 2
src/main/java/com/owncloud/android/datamodel/ContentResolverHelper.kt

@@ -58,7 +58,7 @@ object ContentResolverHelper {
             "Invalid sort direction"
         }
         return when {
-            Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
+            Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
                 val queryArgs = getQueryArgsBundle(selection, sortColumn, sortDirection, limit)
                 contentResolver.query(uri, projection, queryArgs, cancellationSignal)
             }
@@ -90,7 +90,7 @@ object ContentResolverHelper {
         return sortOrderBuilder.toString()
     }
 
-    @RequiresApi(Build.VERSION_CODES.O)
+    @RequiresApi(Build.VERSION_CODES.R)
     private fun
     getQueryArgsBundle(selection: String?, sortColumn: String?, sortDirection: String?, limit: Int?): Bundle {
         return Bundle().apply {

+ 8 - 3
src/main/java/com/owncloud/android/datamodel/MediaProvider.java

@@ -123,8 +123,8 @@ public final class MediaProvider {
 
                 if (cursorImages != null) {
                     String filePath;
-
-                    while (cursorImages.moveToNext()) {
+                    int imageCount = 0;
+                    while (cursorImages.moveToNext() && imageCount < itemLimit) {
                         filePath = cursorImages.getString(cursorImages.getColumnIndexOrThrow(
                             MediaStore.MediaColumns.DATA));
 
@@ -133,6 +133,8 @@ public final class MediaProvider {
                             mediaFolder.filePaths.add(filePath);
                             mediaFolder.absolutePath = filePath.substring(0, filePath.lastIndexOf('/'));
                         }
+                        // ensure we don't go over the limit due to faulty android implementations
+                        imageCount++;
                     }
                     cursorImages.close();
 
@@ -241,7 +243,8 @@ public final class MediaProvider {
 
                 if (cursorVideos != null) {
                     String filePath;
-                    while (cursorVideos.moveToNext()) {
+                    int videoCount = 0;
+                    while (cursorVideos.moveToNext() && videoCount < itemLimit) {
                         filePath = cursorVideos.getString(cursorVideos.getColumnIndexOrThrow(
                             MediaStore.MediaColumns.DATA));
 
@@ -249,6 +252,8 @@ public final class MediaProvider {
                             mediaFolder.filePaths.add(filePath);
                             mediaFolder.absolutePath = filePath.substring(0, filePath.lastIndexOf('/'));
                         }
+                        // ensure we don't go over the limit due to faulty android implementations
+                        videoCount++;
                     }
                     cursorVideos.close();