mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Fix image deselection issue in ImageAdapter to update UI correctly (#6409)
This commit is contained in:
parent
b2341c8d9e
commit
633210dbab
1 changed files with 29 additions and 29 deletions
|
|
@ -165,13 +165,8 @@ class ImageAdapter(
|
|||
val selectedIndex: Int =
|
||||
if (showAlreadyActionedImages) {
|
||||
ImageHelper.getIndex(selectedImages, image)
|
||||
|
||||
// Getting selected index when switch is off
|
||||
} else if (actionableImagesMap.size > position) {
|
||||
ImageHelper
|
||||
.getIndex(selectedImages, ArrayList(actionableImagesMap.values)[position])
|
||||
|
||||
// For any other case return -1
|
||||
ImageHelper.getIndex(selectedImages, ArrayList(actionableImagesMap.values)[position])
|
||||
} else {
|
||||
-1
|
||||
}
|
||||
|
|
@ -204,8 +199,6 @@ class ImageAdapter(
|
|||
uploadingContributionList
|
||||
)
|
||||
_isLoadingImages.value = false
|
||||
// If the position is already visited, that means the image is already present
|
||||
// inside map, so it will fetch the image from the map and load in the holder
|
||||
} else {
|
||||
val actionableImages: List<Image> = ArrayList(actionableImagesMap.values)
|
||||
if (actionableImages.size > position) {
|
||||
|
|
@ -217,9 +210,6 @@ class ImageAdapter(
|
|||
.into(holder.image)
|
||||
}
|
||||
}
|
||||
|
||||
// If switch is turned off, it just fetches the image from all images without any
|
||||
// further operations
|
||||
} else {
|
||||
Glide
|
||||
.with(holder.image)
|
||||
|
|
@ -263,10 +253,6 @@ class ImageAdapter(
|
|||
// finding next actionable image will start from this position
|
||||
if (next > -1) {
|
||||
nextImagePosition = next + 1
|
||||
|
||||
// If map doesn't contains the next actionable image, that means it's a
|
||||
// new actionable image, it will put it to the map as actionable images
|
||||
// and it will load the new image in the view holder
|
||||
if (!actionableImagesMap.containsKey(next)) {
|
||||
actionableImagesMap[next] = allImages[next]
|
||||
alreadyAddedPositions.add(imagePositionAsPerIncreasingOrder)
|
||||
|
|
@ -280,9 +266,6 @@ class ImageAdapter(
|
|||
notifyItemInserted(position)
|
||||
notifyItemRangeChanged(position, itemCount + 1)
|
||||
}
|
||||
|
||||
// If next actionable image is not found, that means searching is
|
||||
// complete till end, and it will stop searching.
|
||||
} else {
|
||||
reachedEndOfFolder = true
|
||||
notifyItemRemoved(position)
|
||||
|
|
@ -296,14 +279,39 @@ class ImageAdapter(
|
|||
private fun onThumbnailClicked(
|
||||
position: Int,
|
||||
holder: ImageViewHolder,
|
||||
) {
|
||||
val sharedPreferences: SharedPreferences =
|
||||
context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0)
|
||||
val switchState =
|
||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||
|
||||
// While switch is turned off, lets user click on image only if the position is
|
||||
// added inside map
|
||||
if (!switchState) {
|
||||
if (actionableImagesMap.size > position) {
|
||||
selectOrRemoveImage(holder, position)
|
||||
}
|
||||
} else {
|
||||
selectOrRemoveImage(holder, position)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle click event on an image, update counter on images.
|
||||
*/
|
||||
private fun selectOrRemoveImage(
|
||||
holder: ImageViewHolder,
|
||||
position: Int,
|
||||
) {
|
||||
val sharedPreferences: SharedPreferences =
|
||||
context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0)
|
||||
val showAlreadyActionedImages =
|
||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||
|
||||
// Single Selection mode
|
||||
// Getting clicked index from all images index when show_already_actioned_images
|
||||
// switch is on
|
||||
if (singleSelection) {
|
||||
// If single selection mode, clear previous selection and select only the new one
|
||||
if (selectedImages.isNotEmpty() && (selectedImages[0] != images[position])) {
|
||||
val prevIndex = images.indexOf(selectedImages[0])
|
||||
selectedImages.clear()
|
||||
|
|
@ -323,7 +331,8 @@ class ImageAdapter(
|
|||
numberOfSelectedImagesMarkedAsNotForUpload--
|
||||
}
|
||||
notifyItemChanged(position, ImageUnselected())
|
||||
imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload) // Added this line to notify the activity
|
||||
// Notify listener of deselection to update UI
|
||||
imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload)
|
||||
} else {
|
||||
val image = images[position]
|
||||
scope.launch(ioDispatcher) {
|
||||
|
|
@ -349,7 +358,6 @@ class ImageAdapter(
|
|||
}
|
||||
selectedImages.add(image)
|
||||
notifyItemChanged(position, ImageSelectedOrUpdated())
|
||||
|
||||
imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload)
|
||||
}
|
||||
}
|
||||
|
|
@ -431,7 +439,6 @@ class ImageAdapter(
|
|||
} else {
|
||||
val iterator = actionableImagesMap.entries.iterator()
|
||||
var index = 0
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
val entry = iterator.next()
|
||||
if (entry.value == image) {
|
||||
|
|
@ -459,17 +466,10 @@ class ImageAdapter(
|
|||
val showAlreadyActionedImages =
|
||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||
|
||||
// While switch is on initializes the holder with all images size
|
||||
return if (showAlreadyActionedImages) {
|
||||
allImages.size
|
||||
|
||||
// While switch is off and searching for next actionable has ended, initializes the holder
|
||||
// with size of all actionable images
|
||||
} else if (actionableImagesMap.size == allImages.size || reachedEndOfFolder) {
|
||||
actionableImagesMap.size
|
||||
|
||||
// While switch is off, initializes the holder with and extra view holder so that finding
|
||||
// and addition of the next actionable image in the adapter can be continued
|
||||
} else {
|
||||
actionableImagesMap.size + 1
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue