mirror of
https://github.com/FossifyOrg/Gallery.git
synced 2024-11-23 13:08:00 +01:00
make sure the proper items are marked at long click
This commit is contained in:
parent
4581ea7a40
commit
192d963986
2 changed files with 39 additions and 17 deletions
|
@ -36,12 +36,21 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
var actMode: ActionMode? = null
|
var actMode: ActionMode? = null
|
||||||
|
val markedItems = HashSet<Int>()
|
||||||
|
|
||||||
fun toggleItemSelection(itemView: View, select: Boolean) {
|
fun toggleItemSelection(itemView: View, select: Boolean, pos: Int = -1) {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
||||||
itemView.dir_frame.isSelected = select
|
itemView.dir_frame.isSelected = select
|
||||||
else
|
else
|
||||||
itemView.dir_thumbnail.isSelected = select
|
itemView.dir_thumbnail.isSelected = select
|
||||||
|
|
||||||
|
if (pos == -1)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (select)
|
||||||
|
markedItems.add(pos)
|
||||||
|
else
|
||||||
|
markedItems.remove(pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,6 +117,7 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
|
||||||
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
||||||
super.onDestroyActionMode(actionMode)
|
super.onDestroyActionMode(actionMode)
|
||||||
views.forEach { toggleItemSelection(it, false) }
|
views.forEach { toggleItemSelection(it, false) }
|
||||||
|
markedItems.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,21 +208,22 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
|
||||||
return paths
|
return paths
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
|
||||||
views.add(holder.bindView(activity, multiSelectorMode, multiSelector, dirs[position]))
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||||
val view = LayoutInflater.from(parent?.context).inflate(R.layout.directory_item, parent, false)
|
val view = LayoutInflater.from(parent?.context).inflate(R.layout.directory_item, parent, false)
|
||||||
return ViewHolder(view, itemClick)
|
return ViewHolder(view, itemClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
|
views.add(holder.bindView(activity, multiSelectorMode, multiSelector, dirs[position], position))
|
||||||
|
}
|
||||||
|
|
||||||
override fun getItemCount() = dirs.size
|
override fun getItemCount() = dirs.size
|
||||||
|
|
||||||
class ViewHolder(view: View, val itemClick: (Directory) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
class ViewHolder(view: View, val itemClick: (Directory) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(activity: SimpleActivity, multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, directory: Directory): View {
|
fun bindView(activity: SimpleActivity, multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, directory: Directory, pos: Int): View {
|
||||||
itemView.dir_name.text = directory.name
|
itemView.dir_name.text = directory.name
|
||||||
itemView.photo_cnt.text = directory.mediaCnt.toString()
|
itemView.photo_cnt.text = directory.mediaCnt.toString()
|
||||||
|
toggleItemSelection(itemView, markedItems.contains(pos), pos)
|
||||||
|
|
||||||
val tmb = directory.thumbnail
|
val tmb = directory.thumbnail
|
||||||
val timestampSignature = StringSignature(directory.timestamp.toString())
|
val timestampSignature = StringSignature(directory.timestamp.toString())
|
||||||
|
@ -224,13 +235,13 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
|
||||||
.placeholder(R.color.tmb_background).centerCrop().crossFade().into(itemView.dir_thumbnail)
|
.placeholder(R.color.tmb_background).centerCrop().crossFade().into(itemView.dir_thumbnail)
|
||||||
}
|
}
|
||||||
|
|
||||||
itemView.setOnClickListener { viewClicked(multiSelector, directory) }
|
itemView.setOnClickListener { viewClicked(multiSelector, directory, pos) }
|
||||||
itemView.setOnLongClickListener {
|
itemView.setOnLongClickListener {
|
||||||
if (!multiSelector.isSelectable) {
|
if (!multiSelector.isSelectable) {
|
||||||
activity.startSupportActionMode(multiSelectorCallback)
|
activity.startSupportActionMode(multiSelectorCallback)
|
||||||
multiSelector.setSelected(this, true)
|
multiSelector.setSelected(this, true)
|
||||||
actMode?.title = multiSelector.selectedPositions.size.toString()
|
actMode?.title = multiSelector.selectedPositions.size.toString()
|
||||||
toggleItemSelection(itemView, true)
|
toggleItemSelection(itemView, true, pos)
|
||||||
actMode?.invalidate()
|
actMode?.invalidate()
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
|
@ -238,11 +249,11 @@ class DirectoryAdapter(val activity: SimpleActivity, val dirs: MutableList<Direc
|
||||||
return itemView
|
return itemView
|
||||||
}
|
}
|
||||||
|
|
||||||
fun viewClicked(multiSelector: MultiSelector, directory: Directory) {
|
fun viewClicked(multiSelector: MultiSelector, directory: Directory, pos: Int) {
|
||||||
if (multiSelector.isSelectable) {
|
if (multiSelector.isSelectable) {
|
||||||
val isSelected = multiSelector.selectedPositions.contains(layoutPosition)
|
val isSelected = multiSelector.selectedPositions.contains(layoutPosition)
|
||||||
multiSelector.setSelected(this, !isSelected)
|
multiSelector.setSelected(this, !isSelected)
|
||||||
toggleItemSelection(itemView, !isSelected)
|
toggleItemSelection(itemView, !isSelected, pos)
|
||||||
|
|
||||||
val selectedCnt = multiSelector.selectedPositions.size
|
val selectedCnt = multiSelector.selectedPositions.size
|
||||||
if (selectedCnt == 0) {
|
if (selectedCnt == 0) {
|
||||||
|
|
|
@ -36,12 +36,21 @@ class MediaAdapter(val activity: SimpleActivity, val media: MutableList<Medium>,
|
||||||
companion object {
|
companion object {
|
||||||
var actMode: ActionMode? = null
|
var actMode: ActionMode? = null
|
||||||
var displayFilenames = false
|
var displayFilenames = false
|
||||||
|
val markedItems = HashSet<Int>()
|
||||||
|
|
||||||
fun toggleItemSelection(itemView: View, select: Boolean) {
|
fun toggleItemSelection(itemView: View, select: Boolean, pos: Int = -1) {
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
||||||
itemView.medium_thumbnail_holder.isSelected = select
|
itemView.medium_thumbnail_holder.isSelected = select
|
||||||
else
|
else
|
||||||
itemView.medium_thumbnail.isSelected = select
|
itemView.medium_thumbnail.isSelected = select
|
||||||
|
|
||||||
|
if (pos == -1)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (select)
|
||||||
|
markedItems.add(pos)
|
||||||
|
else
|
||||||
|
markedItems.remove(pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,6 +89,7 @@ class MediaAdapter(val activity: SimpleActivity, val media: MutableList<Medium>,
|
||||||
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
||||||
super.onDestroyActionMode(actionMode)
|
super.onDestroyActionMode(actionMode)
|
||||||
views.forEach { toggleItemSelection(it, false) }
|
views.forEach { toggleItemSelection(it, false) }
|
||||||
|
markedItems.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +164,7 @@ class MediaAdapter(val activity: SimpleActivity, val media: MutableList<Medium>,
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
views.add(holder.bindView(activity, multiSelectorMode, multiSelector, media[position]))
|
views.add(holder.bindView(activity, multiSelectorMode, multiSelector, media[position], position))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount() = media.size
|
override fun getItemCount() = media.size
|
||||||
|
@ -165,10 +175,11 @@ class MediaAdapter(val activity: SimpleActivity, val media: MutableList<Medium>,
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewHolder(view: View, val itemClick: (Medium) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
class ViewHolder(view: View, val itemClick: (Medium) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(activity: SimpleActivity, multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, medium: Medium): View {
|
fun bindView(activity: SimpleActivity, multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, medium: Medium, pos: Int): View {
|
||||||
itemView.play_outline.visibility = if (medium.isVideo) View.VISIBLE else View.GONE
|
itemView.play_outline.visibility = if (medium.isVideo) View.VISIBLE else View.GONE
|
||||||
itemView.file_name.beVisibleIf(displayFilenames)
|
itemView.file_name.beVisibleIf(displayFilenames)
|
||||||
itemView.file_name.text = medium.name
|
itemView.file_name.text = medium.name
|
||||||
|
toggleItemSelection(itemView, markedItems.contains(pos), pos)
|
||||||
|
|
||||||
val path = medium.path
|
val path = medium.path
|
||||||
val timestampSignature = StringSignature(medium.timestamp.toString())
|
val timestampSignature = StringSignature(medium.timestamp.toString())
|
||||||
|
@ -179,13 +190,13 @@ class MediaAdapter(val activity: SimpleActivity, val media: MutableList<Medium>,
|
||||||
.placeholder(R.color.tmb_background).centerCrop().crossFade().into(itemView.medium_thumbnail)
|
.placeholder(R.color.tmb_background).centerCrop().crossFade().into(itemView.medium_thumbnail)
|
||||||
}
|
}
|
||||||
|
|
||||||
itemView.setOnClickListener { viewClicked(multiSelector, medium) }
|
itemView.setOnClickListener { viewClicked(multiSelector, medium, pos) }
|
||||||
itemView.setOnLongClickListener {
|
itemView.setOnLongClickListener {
|
||||||
if (!multiSelector.isSelectable) {
|
if (!multiSelector.isSelectable) {
|
||||||
activity.startSupportActionMode(multiSelectorCallback)
|
activity.startSupportActionMode(multiSelectorCallback)
|
||||||
multiSelector.setSelected(this, true)
|
multiSelector.setSelected(this, true)
|
||||||
actMode?.title = multiSelector.selectedPositions.size.toString()
|
actMode?.title = multiSelector.selectedPositions.size.toString()
|
||||||
toggleItemSelection(itemView, true)
|
toggleItemSelection(itemView, true, pos)
|
||||||
actMode?.invalidate()
|
actMode?.invalidate()
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
|
@ -194,11 +205,11 @@ class MediaAdapter(val activity: SimpleActivity, val media: MutableList<Medium>,
|
||||||
return itemView
|
return itemView
|
||||||
}
|
}
|
||||||
|
|
||||||
fun viewClicked(multiSelector: MultiSelector, medium: Medium) {
|
fun viewClicked(multiSelector: MultiSelector, medium: Medium, pos: Int) {
|
||||||
if (multiSelector.isSelectable) {
|
if (multiSelector.isSelectable) {
|
||||||
val isSelected = multiSelector.selectedPositions.contains(layoutPosition)
|
val isSelected = multiSelector.selectedPositions.contains(layoutPosition)
|
||||||
multiSelector.setSelected(this, !isSelected)
|
multiSelector.setSelected(this, !isSelected)
|
||||||
toggleItemSelection(itemView, !isSelected)
|
toggleItemSelection(itemView, !isSelected, pos)
|
||||||
|
|
||||||
val selectedCnt = multiSelector.selectedPositions.size
|
val selectedCnt = multiSelector.selectedPositions.size
|
||||||
if (selectedCnt == 0) {
|
if (selectedCnt == 0) {
|
||||||
|
|
Loading…
Reference in a new issue