mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Fix #6409: Add listener call in ImageAdapter to update UI and upload button on deselection
This commit is contained in:
parent
730f314200
commit
ef0477d98c
1 changed files with 7 additions and 49 deletions
|
|
@ -10,6 +10,7 @@ import androidx.constraintlayout.widget.Group
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
|
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
|
||||||
import fr.free.nrw.commons.R
|
import fr.free.nrw.commons.R
|
||||||
import fr.free.nrw.commons.contributions.Contribution
|
import fr.free.nrw.commons.contributions.Contribution
|
||||||
|
|
@ -165,13 +166,9 @@ class ImageAdapter(
|
||||||
val selectedIndex: Int =
|
val selectedIndex: Int =
|
||||||
if (showAlreadyActionedImages) {
|
if (showAlreadyActionedImages) {
|
||||||
ImageHelper.getIndex(selectedImages, image)
|
ImageHelper.getIndex(selectedImages, image)
|
||||||
|
|
||||||
// Getting selected index when switch is off
|
|
||||||
} else if (actionableImagesMap.size > position) {
|
} else if (actionableImagesMap.size > position) {
|
||||||
ImageHelper
|
ImageHelper
|
||||||
.getIndex(selectedImages, ArrayList(actionableImagesMap.values)[position])
|
.getIndex(selectedImages, ArrayList(actionableImagesMap.values)[position])
|
||||||
|
|
||||||
// For any other case return -1
|
|
||||||
} else {
|
} else {
|
||||||
-1
|
-1
|
||||||
}
|
}
|
||||||
|
|
@ -204,8 +201,6 @@ class ImageAdapter(
|
||||||
uploadingContributionList
|
uploadingContributionList
|
||||||
)
|
)
|
||||||
_isLoadingImages.value = false
|
_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 {
|
} else {
|
||||||
val actionableImages: List<Image> = ArrayList(actionableImagesMap.values)
|
val actionableImages: List<Image> = ArrayList(actionableImagesMap.values)
|
||||||
if (actionableImages.size > position) {
|
if (actionableImages.size > position) {
|
||||||
|
|
@ -214,17 +209,16 @@ class ImageAdapter(
|
||||||
.with(holder.image)
|
.with(holder.image)
|
||||||
.load(image.uri)
|
.load(image.uri)
|
||||||
.thumbnail(0.3f)
|
.thumbnail(0.3f)
|
||||||
|
.apply(RequestOptions().override(300, 300)) // Downscale to 300x300
|
||||||
.into(holder.image)
|
.into(holder.image)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If switch is turned off, it just fetches the image from all images without any
|
|
||||||
// further operations
|
|
||||||
} else {
|
} else {
|
||||||
Glide
|
Glide
|
||||||
.with(holder.image)
|
.with(holder.image)
|
||||||
.load(image.uri)
|
.load(image.uri)
|
||||||
.thumbnail(0.3f)
|
.thumbnail(0.3f)
|
||||||
|
.apply(RequestOptions().override(300, 300)) // Downscale to 300x300
|
||||||
.into(holder.image)
|
.into(holder.image)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -276,13 +270,11 @@ class ImageAdapter(
|
||||||
.with(holder.image)
|
.with(holder.image)
|
||||||
.load(allImages[next].uri)
|
.load(allImages[next].uri)
|
||||||
.thumbnail(0.3f)
|
.thumbnail(0.3f)
|
||||||
|
.apply(RequestOptions().override(300, 300)) // Downscale to 300x300
|
||||||
.into(holder.image)
|
.into(holder.image)
|
||||||
notifyItemInserted(position)
|
notifyItemInserted(position)
|
||||||
notifyItemRangeChanged(position, itemCount + 1)
|
notifyItemRangeChanged(position, itemCount + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If next actionable image is not found, that means searching is
|
|
||||||
// complete till end, and it will stop searching.
|
|
||||||
} else {
|
} else {
|
||||||
reachedEndOfFolder = true
|
reachedEndOfFolder = true
|
||||||
notifyItemRemoved(position)
|
notifyItemRemoved(position)
|
||||||
|
|
@ -296,39 +288,14 @@ class ImageAdapter(
|
||||||
private fun onThumbnailClicked(
|
private fun onThumbnailClicked(
|
||||||
position: Int,
|
position: Int,
|
||||||
holder: ImageViewHolder,
|
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 =
|
val sharedPreferences: SharedPreferences =
|
||||||
context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0)
|
context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0)
|
||||||
val showAlreadyActionedImages =
|
val showAlreadyActionedImages =
|
||||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||||
|
|
||||||
// Getting clicked index from all images index when show_already_actioned_images
|
// Single Selection mode
|
||||||
// switch is on
|
|
||||||
if (singleSelection) {
|
if (singleSelection) {
|
||||||
// If single selection mode, clear previous selection and select only the new one
|
|
||||||
if (selectedImages.isNotEmpty() && (selectedImages[0] != images[position])) {
|
if (selectedImages.isNotEmpty() && (selectedImages[0] != images[position])) {
|
||||||
val prevIndex = images.indexOf(selectedImages[0])
|
val prevIndex = images.indexOf(selectedImages[0])
|
||||||
selectedImages.clear()
|
selectedImages.clear()
|
||||||
|
|
@ -348,6 +315,7 @@ class ImageAdapter(
|
||||||
numberOfSelectedImagesMarkedAsNotForUpload--
|
numberOfSelectedImagesMarkedAsNotForUpload--
|
||||||
}
|
}
|
||||||
notifyItemChanged(position, ImageUnselected())
|
notifyItemChanged(position, ImageUnselected())
|
||||||
|
imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload) // Added this line to notify the activity
|
||||||
} else {
|
} else {
|
||||||
val image = images[position]
|
val image = images[position]
|
||||||
scope.launch(ioDispatcher) {
|
scope.launch(ioDispatcher) {
|
||||||
|
|
@ -474,8 +442,6 @@ class ImageAdapter(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the total number of items in the data set held by the adapter.
|
* Returns the total number of items in the data set held by the adapter.
|
||||||
*
|
|
||||||
* @return The total number of items in this adapter.
|
|
||||||
*/
|
*/
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
val sharedPreferences: SharedPreferences =
|
val sharedPreferences: SharedPreferences =
|
||||||
|
|
@ -483,17 +449,10 @@ class ImageAdapter(
|
||||||
val showAlreadyActionedImages =
|
val showAlreadyActionedImages =
|
||||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
||||||
|
|
||||||
// While switch is on initializes the holder with all images size
|
|
||||||
return if (showAlreadyActionedImages) {
|
return if (showAlreadyActionedImages) {
|
||||||
allImages.size
|
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) {
|
} else if (actionableImagesMap.size == allImages.size || reachedEndOfFolder) {
|
||||||
actionableImagesMap.size
|
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 {
|
} else {
|
||||||
actionableImagesMap.size + 1
|
actionableImagesMap.size + 1
|
||||||
}
|
}
|
||||||
|
|
@ -611,7 +570,6 @@ class ImageAdapter(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by the DiffUtil when it wants to check whether two items have the same data.
|
* Called by the DiffUtil when it wants to check whether two items have the same data.
|
||||||
* DiffUtil uses this information to detect if the contents of an item has changed.
|
|
||||||
*/
|
*/
|
||||||
override fun areContentsTheSame(
|
override fun areContentsTheSame(
|
||||||
oldItemPosition: Int,
|
oldItemPosition: Int,
|
||||||
|
|
@ -632,4 +590,4 @@ class ImageAdapter(
|
||||||
fun setSingleSelection(single: Boolean) {
|
fun setSingleSelection(single: Boolean) {
|
||||||
singleSelection = single
|
singleSelection = single
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue