From 3e5424e18debdf466509669637ceefa365908195 Mon Sep 17 00:00:00 2001 From: Shashank Kumar <126143257+shashankiitbhu@users.noreply.github.com> Date: Sat, 16 Mar 2024 18:45:21 +0530 Subject: [PATCH] Fix Custom image selector (#5576) * Custom Image Selector Fix * Custom Image Selector Fix * code cleanup * fixes * Renamed yue-hant * added java docs * fix --- .../customselector/ui/adapter/ImageAdapter.kt | 53 +++++++++++++++++-- .../ui/selector/CustomSelectorActivity.kt | 8 +-- .../ui/selector/ImageFragment.kt | 15 +++++- app/src/main/res/values-yue-hant/error.xml | 9 ---- 4 files changed, 68 insertions(+), 17 deletions(-) delete mode 100644 app/src/main/res/values-yue-hant/error.xml 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 99e394e72..4ce246002 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 @@ -119,6 +119,7 @@ class ImageAdapter( * Bind View holder, load image, selected view, click listeners. */ override fun onBindViewHolder(holder: ImageViewHolder, position: Int) { + var image=images[position] holder.image.setImageDrawable (null) if (context.contentResolver.getType(image.uri) == null) { @@ -174,9 +175,11 @@ class ImageAdapter( // inside map, so it will fetch the image from the map and load in the holder } else { val actionableImages: List = ArrayList(actionableImagesMap.values) - image = actionableImages[position] - Glide.with(holder.image).load(image.uri) - .thumbnail(0.3f).into(holder.image) + if(actionableImages.size > position) { + image = actionableImages[position] + Glide.with(holder.image).load(image.uri) + .thumbnail(0.3f).into(holder.image) + } } // If switch is turned off, it just fetches the image from all images without any @@ -364,6 +367,48 @@ class ImageAdapter( notifyDataSetChanged() } + /** + * Clear selected images and empty the list. + */ + fun clearSelectedImages(){ + numberOfSelectedImagesMarkedAsNotForUpload = 0 + selectedImages.clear() + selectedImages = arrayListOf() + } + + + /** + * Remove image from actionable images map. + */ + fun removeImageFromActionableImageMap(image: Image) { + val sharedPreferences: SharedPreferences = + context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0) + val showAlreadyActionedImages = + sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true) + + if(showAlreadyActionedImages) { + refresh(allImages, allImages) + } else { + val iterator = actionableImagesMap.entries.iterator() + var index = 0 + + while (iterator.hasNext()) { + val entry = iterator.next() + if (entry.value == image) { + imagePositionAsPerIncreasingOrder -= 2 + iterator.remove() + alreadyAddedPositions.removeAt(alreadyAddedPositions.size - 1) + notifyItemRemoved(index) + notifyItemRangeChanged(index, itemCount ) + break + } + index++ + } + } + + } + + /** * Returns the total number of items in the data set held by the adapter. * @@ -511,4 +556,4 @@ class ImageAdapter( return images[position].date } -} \ No newline at end of file +} diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt index d7e81ab73..019dd60ee 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt @@ -276,8 +276,10 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL imageSHA1 ) ) - } + imageFragment!!.removeImage(it) + } + imageFragment!!.clearSelectedImages() // if all images is already marked as not for upload, delete all images from // not for upload table } else { @@ -290,9 +292,9 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL ) notForUploadStatusDao.deleteNotForUploadWithImageSHA1(imageSHA1) } + imageFragment!!.refresh() } - imageFragment!!.refresh() imageFragment!!.dismissMarkUnmarkProgressDialog() val bottomLayout: ConstraintLayout = findViewById(R.id.bottom_layout) @@ -497,4 +499,4 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL const val FOLDER_NAME: String = "FolderName" const val ITEM_ID: String = "ItemId" } -} \ No newline at end of file +} 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 c919e50a4..cab63ad2d 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 @@ -339,6 +339,19 @@ class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDat imageAdapter.refresh(filteredImages, allImages) } + /** + * Removes the image from the actionable image map + */ + fun removeImage(image : Image){ + imageAdapter.removeImageFromActionableImageMap(image) + } + + /** + * Clears the selected images + */ + fun clearSelectedImages() { + imageAdapter.clearSelectedImages() + } /** * Passes selected images and other information from Activity to Fragment and connects it with * the adapter @@ -371,4 +384,4 @@ class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDat } } -} \ No newline at end of file +} diff --git a/app/src/main/res/values-yue-hant/error.xml b/app/src/main/res/values-yue-hant/error.xml deleted file mode 100644 index 68579e4a0..000000000 --- a/app/src/main/res/values-yue-hant/error.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 同享壞咗 - 哎呀。出咗錯! - 多謝你! -