mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Enforce 5-image selection limit with warning dialog on click
This commit is contained in:
parent
b8d340fbe8
commit
c3bb460ae9
1 changed files with 31 additions and 45 deletions
|
|
@ -188,55 +188,38 @@ class ImageAdapter(
|
||||||
defaultDispatcher,
|
defaultDispatcher,
|
||||||
uploadingContributionList,
|
uploadingContributionList,
|
||||||
)
|
)
|
||||||
scope.launch {
|
holder.itemView.setOnClickListener {
|
||||||
val sharedPreferences: SharedPreferences =
|
if (!holder.isItemUploaded() && !holder.isItemNotForUpload()) {
|
||||||
context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0)
|
if (selectedImages.size >= 5 && !isSelected) { //enforce the 5-image limit
|
||||||
val showAlreadyActionedImages =
|
Toast.makeText(context, "Cannot select more than 5 images", Toast.LENGTH_SHORT).show()
|
||||||
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
|
return@setOnClickListener
|
||||||
if (!showAlreadyActionedImages) {
|
}
|
||||||
// If the position is not already visited, that means the position is new then
|
if (isSelected) {
|
||||||
// finds the next actionable image position from all images
|
selectedImages.removeAt(selectedIndex)
|
||||||
if (!alreadyAddedPositions.contains(position)) {
|
holder.itemUnselected()
|
||||||
processThumbnailForActionedImage(
|
notifyItemChanged(position, ImageUnselected())
|
||||||
holder,
|
imageSelectListener.onSelectedImagesChanged(selectedImages, selectedImages.size)
|
||||||
position,
|
} else {
|
||||||
uploadingContributionList
|
selectedImages.add(image)
|
||||||
)
|
holder.itemSelected()
|
||||||
_isLoadingImages.value = false
|
notifyItemChanged(position, ImageSelectedOrUpdated())
|
||||||
// If the position is already visited, that means the image is already present
|
imageSelectListener.onSelectedImagesChanged(selectedImages, selectedImages.size)
|
||||||
// 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) {
|
|
||||||
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
|
|
||||||
// further operations
|
|
||||||
} else {
|
|
||||||
Glide
|
|
||||||
.with(holder.image)
|
|
||||||
.load(image.uri)
|
|
||||||
.thumbnail(0.3f)
|
|
||||||
.into(holder.image)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.itemView.setOnClickListener {
|
|
||||||
onThumbnailClicked(position, holder)
|
|
||||||
}
|
|
||||||
|
|
||||||
// launch media preview on long click.
|
|
||||||
holder.itemView.setOnLongClickListener {
|
holder.itemView.setOnLongClickListener {
|
||||||
imageSelectListener.onLongPress(images.indexOf(image), images, selectedImages)
|
imageSelectListener.onLongPress(position, images, ArrayList(selectedImages))
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
//handle close button click for deselection
|
||||||
|
holder.closeButton.setOnClickListener {
|
||||||
|
if (isSelected) {
|
||||||
|
selectedImages.removeAt(selectedIndex)
|
||||||
|
holder.itemUnselected()
|
||||||
|
notifyItemChanged(position, ImageUnselected())
|
||||||
|
imageSelectListener.onSelectedImagesChanged(selectedImages, selectedImages.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -417,7 +400,7 @@ class ImageAdapter(
|
||||||
* Set new selected images
|
* Set new selected images
|
||||||
*/
|
*/
|
||||||
fun setSelectedImages(newSelectedImages: ArrayList<Image>) {
|
fun setSelectedImages(newSelectedImages: ArrayList<Image>) {
|
||||||
selectedImages = ArrayList(newSelectedImages)
|
selectedImages = ArrayList(newSelectedImages.take(5)) // enforce 5-image limit
|
||||||
imageSelectListener.onSelectedImagesChanged(selectedImages, 0)
|
imageSelectListener.onSelectedImagesChanged(selectedImages, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -431,7 +414,7 @@ class ImageAdapter(
|
||||||
) {
|
) {
|
||||||
numberOfSelectedImagesMarkedAsNotForUpload = 0
|
numberOfSelectedImagesMarkedAsNotForUpload = 0
|
||||||
images.clear()
|
images.clear()
|
||||||
selectedImages = arrayListOf()
|
selectedImages = ArrayList(selectedImages.take(5)) // enforce the 5-image limit
|
||||||
init(newImages, fixedImages, TreeMap(), uploadingImages)
|
init(newImages, fixedImages, TreeMap(), uploadingImages)
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
@ -523,12 +506,14 @@ class ImageAdapter(
|
||||||
private val uploadingGroup: Group = itemView.findViewById(R.id.uploading_group)
|
private val uploadingGroup: Group = itemView.findViewById(R.id.uploading_group)
|
||||||
private val notForUploadGroup: Group = itemView.findViewById(R.id.not_for_upload_group)
|
private val notForUploadGroup: Group = itemView.findViewById(R.id.not_for_upload_group)
|
||||||
private val selectedGroup: Group = itemView.findViewById(R.id.selected_group)
|
private val selectedGroup: Group = itemView.findViewById(R.id.selected_group)
|
||||||
|
val closeButton: ImageView = itemView.findViewById(R.id.close_button) // Added for close button
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item selected view.
|
* Item selected view.
|
||||||
*/
|
*/
|
||||||
fun itemSelected() {
|
fun itemSelected() {
|
||||||
selectedGroup.visibility = View.VISIBLE
|
selectedGroup.visibility = View.VISIBLE
|
||||||
|
closeButton.visibility = View.VISIBLE // Show close button when selected
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -536,6 +521,7 @@ class ImageAdapter(
|
||||||
*/
|
*/
|
||||||
fun itemUnselected() {
|
fun itemUnselected() {
|
||||||
selectedGroup.visibility = View.GONE
|
selectedGroup.visibility = View.GONE
|
||||||
|
closeButton.visibility = View.GONE // Hide close button when unselected
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue