Tick icon in place of number of images selected in custom picker (#5331)

* tick in place of number of images selected in custom picker

* fixes tests, dark mode visibility, bold tick icon for better visibility
This commit is contained in:
Srishti Rohatgi 2023-10-09 19:38:00 +05:30 committed by GitHub
parent f69ecde713
commit 0d90ac3c53
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 36 additions and 23 deletions

View file

@ -151,7 +151,7 @@ class ImageAdapter(
val isSelected = selectedIndex != -1
if (isSelected) {
holder.itemSelected(selectedImages.size)
holder.itemSelected()
} else {
holder.itemUnselected()
}
@ -407,7 +407,6 @@ class ImageAdapter(
*/
class ImageViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
val image: ImageView = itemView.findViewById(R.id.image_thumbnail)
private val selectedNumber: TextView = itemView.findViewById(R.id.selected_count)
private val uploadedGroup: Group = itemView.findViewById(R.id.uploaded_group)
private val notForUploadGroup: Group = itemView.findViewById(R.id.not_for_upload_group)
private val selectedGroup: Group = itemView.findViewById(R.id.selected_group)
@ -415,9 +414,8 @@ class ImageAdapter(
/**
* Item selected view.
*/
fun itemSelected(index: Int) {
fun itemSelected() {
selectedGroup.visibility = View.VISIBLE
selectedNumber.text = index.toString()
}
/**

View file

@ -28,6 +28,7 @@ import fr.free.nrw.commons.media.ZoomableActivity
import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.upload.FileUtilsWrapper
import fr.free.nrw.commons.utils.CustomSelectorUtils
import kotlinx.android.synthetic.main.activity_login.view.title
import kotlinx.coroutines.*
import java.io.File
import javax.inject.Inject
@ -142,7 +143,7 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
data!!
.getParcelableArrayListExtra(CustomSelectorConstants.NEW_SELECTED_IMAGES)!!
val shouldRefresh = data.getBooleanExtra(SHOULD_REFRESH, false)
imageFragment!!.passSelectedImages(selectedImages, shouldRefresh)
imageFragment?.passSelectedImages(selectedImages, shouldRefresh)
}
}
@ -280,6 +281,7 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
val bottomLayout: ConstraintLayout = findViewById(R.id.bottom_layout)
bottomLayout.visibility = View.GONE
}
changeTitle(bucketName, 0)
}
/**
@ -292,10 +294,17 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
/**
* Change the title of the toolbar.
*/
private fun changeTitle(title: String) {
val titleText = findViewById<TextView>(R.id.title)
if (titleText != null) {
titleText.text = title
private fun changeTitle(title: String, selectedImageCount:Int) {
if (title.isNotEmpty()){
val titleText = findViewById<TextView>(R.id.title)
var titleWithAppendedImageCount = title
if (selectedImageCount > 0) {
titleWithAppendedImageCount += " (${resources.getQuantityString(R.plurals.custom_picker_images_selected_title_appendix,
selectedImageCount, selectedImageCount)})"
}
if (titleText != null) {
titleText.text = titleWithAppendedImageCount
}
}
}
@ -316,7 +325,7 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
.addToBackStack(null)
.commit()
changeTitle(folderName)
changeTitle(folderName, 0)
bucketId = folderId
bucketName = folderName
@ -331,6 +340,7 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
selectedNotForUploadImages: Int
) {
viewModel.selectedImages.value = selectedImages
changeTitle(bucketName, selectedImages.size)
if (selectedNotForUploadImages > 0) {
bottomSheetBinding.upload.isEnabled = false
@ -418,7 +428,7 @@ class CustomSelectorActivity : BaseActivity(), FolderClickListener, ImageSelectL
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
if (fragment != null && fragment is FolderFragment) {
isImageFragmentOpen = false
changeTitle(getString(R.string.custom_selector_title))
changeTitle(getString(R.string.custom_selector_title), 0)
}
}

View file

@ -2,9 +2,10 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
android:viewportHeight="24">
<path
android:fillColor="@android:color/black"
android:strokeWidth="2"
android:strokeColor="@color/black"
android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
</vector>

View file

@ -33,18 +33,14 @@
android:background="@color/divider_grey"
/>
<TextView
android:id="@+id/selected_count"
<ImageView
android:id="@+id/selected_image"
android:layout_width="@dimen/dimen_20"
android:layout_height="@dimen/dimen_20"
app:layout_constraintDimensionRatio="H,1:1"
android:textSize="11sp"
android:textStyle="bold"
android:textColor="@color/black"
android:src="@drawable/ic_done_black"
android:layout_margin="@dimen/dimen_6"
android:gravity="center|center_vertical"
style="@style/TextAppearance.AppCompat.Small"
android:text="12"
android:background="@drawable/circle_shape"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
@ -55,7 +51,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="selected_overlay,selected_count"/>
app:constraint_referenced_ids="selected_overlay,selected_image"/>
<View

View file

@ -775,4 +775,8 @@ Upload your first media by tapping on the add button.</string>
<string name="full_screen_mode_features_info">Swipe fast and long to perform these actions: \n- Left/Right: Go to previous/next \n- Up: Select\n- Down: Mark as not for upload.</string>
<string name="set_up_avatar_toast_string">To set up your leaderboard avatar, tap \"Set as avatar\" in the three-dots menu of any image.</string>
<string name="similar_coordinate_description_auto_set">The coordinates are not the exact coordinates, but the person who uploaded this picture thinks they are close enough.</string>
<plurals name="custom_picker_images_selected_title_appendix">
<item quantity="one">%d image selected</item>
<item quantity="other">%d images selected</item>
</plurals>
</resources>

View file

@ -73,9 +73,10 @@ class CustomSelectorActivityTest {
@Test
@Throws(Exception::class)
fun testChangeTitle() {
val func = activity.javaClass.getDeclaredMethod("changeTitle", String::class.java)
activity.onFolderClick(1, "test", 0)
val func = activity.javaClass.getDeclaredMethod("changeTitle", String::class.java, Int::class.java)
func.isAccessible = true
func.invoke(activity, "test")
func.invoke(activity, "test", 0)
}
/**
@ -141,6 +142,7 @@ class CustomSelectorActivityTest {
@Test
@Throws(Exception::class)
fun testOnSelectedImagesChanged() {
activity.onFolderClick(1, "test", 0)
activity.onSelectedImagesChanged(ArrayList(), 0)
}
@ -151,6 +153,7 @@ class CustomSelectorActivityTest {
@Throws(Exception::class)
fun testOnDone() {
activity.onDone()
activity.onFolderClick(1, "test", 0)
activity.onSelectedImagesChanged(
ArrayList(arrayListOf(Image(1, "test", Uri.parse("test"), "test", 1))),
1
@ -164,6 +167,7 @@ class CustomSelectorActivityTest {
@Test
@Throws(Exception::class)
fun testOnClickNotForUpload() {
activity.onFolderClick(1, "test", 0)
val method: Method = CustomSelectorActivity::class.java.getDeclaredMethod(
"onClickNotForUpload"
)