Skip to content

Commit 3e5424e

Browse files
Fix Custom image selector (commons-app#5576)
* Custom Image Selector Fix * Custom Image Selector Fix * code cleanup * fixes * Renamed yue-hant * added java docs * fix
1 parent f73c9dc commit 3e5424e

File tree

4 files changed

+68
-17
lines changed

4 files changed

+68
-17
lines changed

app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ class ImageAdapter(
119119
* Bind View holder, load image, selected view, click listeners.
120120
*/
121121
override fun onBindViewHolder(holder: ImageViewHolder, position: Int) {
122+
122123
var image=images[position]
123124
holder.image.setImageDrawable (null)
124125
if (context.contentResolver.getType(image.uri) == null) {
@@ -174,9 +175,11 @@ class ImageAdapter(
174175
// inside map, so it will fetch the image from the map and load in the holder
175176
} else {
176177
val actionableImages: List<Image> = ArrayList(actionableImagesMap.values)
177-
image = actionableImages[position]
178-
Glide.with(holder.image).load(image.uri)
179-
.thumbnail(0.3f).into(holder.image)
178+
if(actionableImages.size > position) {
179+
image = actionableImages[position]
180+
Glide.with(holder.image).load(image.uri)
181+
.thumbnail(0.3f).into(holder.image)
182+
}
180183
}
181184

182185
// If switch is turned off, it just fetches the image from all images without any
@@ -364,6 +367,48 @@ class ImageAdapter(
364367
notifyDataSetChanged()
365368
}
366369

370+
/**
371+
* Clear selected images and empty the list.
372+
*/
373+
fun clearSelectedImages(){
374+
numberOfSelectedImagesMarkedAsNotForUpload = 0
375+
selectedImages.clear()
376+
selectedImages = arrayListOf()
377+
}
378+
379+
380+
/**
381+
* Remove image from actionable images map.
382+
*/
383+
fun removeImageFromActionableImageMap(image: Image) {
384+
val sharedPreferences: SharedPreferences =
385+
context.getSharedPreferences(CUSTOM_SELECTOR_PREFERENCE_KEY, 0)
386+
val showAlreadyActionedImages =
387+
sharedPreferences.getBoolean(SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
388+
389+
if(showAlreadyActionedImages) {
390+
refresh(allImages, allImages)
391+
} else {
392+
val iterator = actionableImagesMap.entries.iterator()
393+
var index = 0
394+
395+
while (iterator.hasNext()) {
396+
val entry = iterator.next()
397+
if (entry.value == image) {
398+
imagePositionAsPerIncreasingOrder -= 2
399+
iterator.remove()
400+
alreadyAddedPositions.removeAt(alreadyAddedPositions.size - 1)
401+
notifyItemRemoved(index)
402+
notifyItemRangeChanged(index, itemCount )
403+
break
404+
}
405+
index++
406+
}
407+
}
408+
409+
}
410+
411+
367412
/**
368413
* Returns the total number of items in the data set held by the adapter.
369414
*
@@ -511,4 +556,4 @@ class ImageAdapter(
511556
return images[position].date
512557
}
513558

514-
}
559+
}

app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,10 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
276276
imageSHA1
277277
)
278278
)
279-
}
279+
imageFragment!!.removeImage(it)
280280

281+
}
282+
imageFragment!!.clearSelectedImages()
281283
// if all images is already marked as not for upload, delete all images from
282284
// not for upload table
283285
} else {
@@ -290,9 +292,9 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
290292
)
291293
notForUploadStatusDao.deleteNotForUploadWithImageSHA1(imageSHA1)
292294
}
295+
imageFragment!!.refresh()
293296
}
294297

295-
imageFragment!!.refresh()
296298
imageFragment!!.dismissMarkUnmarkProgressDialog()
297299

298300
val bottomLayout: ConstraintLayout = findViewById(R.id.bottom_layout)
@@ -497,4 +499,4 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
497499
const val FOLDER_NAME: String = "FolderName"
498500
const val ITEM_ID: String = "ItemId"
499501
}
500-
}
502+
}

app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,19 @@ class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDat
339339
imageAdapter.refresh(filteredImages, allImages)
340340
}
341341

342+
/**
343+
* Removes the image from the actionable image map
344+
*/
345+
fun removeImage(image : Image){
346+
imageAdapter.removeImageFromActionableImageMap(image)
347+
}
348+
349+
/**
350+
* Clears the selected images
351+
*/
352+
fun clearSelectedImages() {
353+
imageAdapter.clearSelectedImages()
354+
}
342355
/**
343356
* Passes selected images and other information from Activity to Fragment and connects it with
344357
* the adapter
@@ -371,4 +384,4 @@ class ImageFragment : CommonsDaggerSupportFragment(), RefreshUIListener, PassDat
371384
}
372385
}
373386

374-
}
387+
}

app/src/main/res/values-yue-hant/error.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)