From 8ec91182b54600e2322ba0b04107591e560897b4 Mon Sep 17 00:00:00 2001 From: Rohit Verma Date: Sat, 24 Aug 2024 20:56:31 +0530 Subject: [PATCH] refactor: prevent app from crashing for SDKs >= 34 --- .../commons/customselector/ui/adapter/FolderAdapter.kt | 10 ++++++---- .../commons/customselector/ui/adapter/ImageAdapter.kt | 2 +- .../customselector/ui/selector/FolderFragment.kt | 7 +++++-- .../customselector/ui/selector/ImageFragment.kt | 5 ++++- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt index 60d299491..abebc8944 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/FolderAdapter.kt @@ -62,13 +62,15 @@ class FolderAdapter( folder.images.removeAll(toBeRemoved) val count = folder.images.size - if(count == 0) { + if(count == 0 && folders.size > 0) { // Folder is empty, remove folder from the adapter. holder.itemView.post{ val updatePosition = folders.indexOf(folder) - folders.removeAt(updatePosition) - notifyItemRemoved(updatePosition) - notifyItemRangeChanged(updatePosition, folders.size) + if(updatePosition != -1) { + folders.removeAt(updatePosition) + notifyItemRemoved(updatePosition) + notifyItemRangeChanged(updatePosition, folders.size) + } } } else { val previewImage = folder.images[0] diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt index 47784153e..58f4c8385 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt @@ -122,7 +122,7 @@ class ImageAdapter( * Bind View holder, load image, selected view, click listeners. */ override fun onBindViewHolder(holder: ImageViewHolder, position: Int) { - + if(images.size == 0) { return } var image=images[position] holder.image.setImageDrawable (null) if (context.contentResolver.getType(image.uri) == null) { diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt index 0f546e788..95f427f49 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt @@ -116,11 +116,14 @@ class FolderFragment : CommonsDaggerSupportFragment() { private fun handleResult(result: Result) { if(result.status is CallbackStatus.SUCCESS){ val images = result.images - if(images.isNullOrEmpty()) - { + if(images.isEmpty()){ binding?.emptyText?.let { it.visibility = View.VISIBLE } + } else { + binding?.emptyText?.let { + it.visibility = View.GONE + } } folders = ImageHelper.folderListFromImages(result.images) folderAdapter.init(folders) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt index 842531dd2..c5e5de4f6 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt @@ -39,6 +39,7 @@ import fr.free.nrw.commons.upload.FileUtilsWrapper import io.reactivex.schedulers.Schedulers import java.util.* import javax.inject.Inject +import kotlin.collections.ArrayList /** * Custom Selector Image Fragment. @@ -279,6 +280,8 @@ class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDat } } } else { + filteredImages = ArrayList() + allImages = filteredImages binding?.emptyText?.let { it.visibility = View.VISIBLE } @@ -324,7 +327,7 @@ class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDat .findFirstVisibleItemPosition() // Check for empty RecyclerView. - if (position != -1) { + if (position != -1 && filteredImages.size > 0) { context?.let { context -> context.getSharedPreferences( "CustomSelector",