瀏覽代碼

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 年之前
父節點
當前提交
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();