Skip to content

Commit cdb60a4

Browse files
committed
make sure only the proper items are selected
1 parent 732fca7 commit cdb60a4

File tree

1 file changed

+24
-8
lines changed
  • app/src/main/kotlin/com/simplemobiletools/filemanager/adapters

1 file changed

+24
-8
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/adapters/ItemsAdapter.kt

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,17 @@ class ItemsAdapter(val activity: SimpleActivity, val mItems: List<FileDirItem>,
3030

3131
companion object {
3232
var actMode: ActionMode? = null
33+
val markedItems = HashSet<Int>()
3334

34-
fun toggleItemSelection(itemView: View, select: Boolean) {
35+
fun toggleItemSelection(itemView: View, select: Boolean, pos: Int = -1) {
3536
itemView.item_frame.isSelected = select
37+
if (pos == -1)
38+
return
39+
40+
if (select)
41+
markedItems.add(pos)
42+
else
43+
markedItems.remove(pos)
3644
}
3745
}
3846

@@ -58,11 +66,17 @@ class ItemsAdapter(val activity: SimpleActivity, val mItems: List<FileDirItem>,
5866
return true
5967
}
6068

61-
override fun onPrepareActionMode(actionMode: ActionMode?, menu: Menu) = true
69+
override fun onPrepareActionMode(actionMode: ActionMode?, menu: Menu): Boolean {
70+
val menuItem = menu.findItem(R.id.cab_rename)
71+
menuItem.isVisible = multiSelector.selectedPositions.size <= 1
72+
73+
return true
74+
}
6275

6376
override fun onDestroyActionMode(actionMode: ActionMode?) {
6477
super.onDestroyActionMode(actionMode)
6578
views.forEach { toggleItemSelection(it, false) }
79+
markedItems.clear()
6680
}
6781
}
6882

@@ -110,14 +124,15 @@ class ItemsAdapter(val activity: SimpleActivity, val mItems: List<FileDirItem>,
110124
}
111125

112126
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
113-
views.add(holder.bindView(multiSelectorMode, multiSelector, mItems[position]))
127+
views.add(holder.bindView(multiSelectorMode, multiSelector, mItems[position], position))
114128
}
115129

116130
override fun getItemCount() = mItems.size
117131

118132
class ViewHolder(val activity: SimpleActivity, view: View, val itemClick: (FileDirItem) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
119-
fun bindView(multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, fileDirItem: FileDirItem): View {
133+
fun bindView(multiSelectorCallback: ModalMultiSelectorCallback, multiSelector: MultiSelector, fileDirItem: FileDirItem, pos: Int): View {
120134
itemView.item_name.text = fileDirItem.name
135+
toggleItemSelection(itemView, markedItems.contains(pos), pos)
121136

122137
if (fileDirItem.isDirectory) {
123138
Glide.with(activity).load(R.mipmap.directory).diskCacheStrategy(getCacheStrategy(fileDirItem)).centerCrop().crossFade().into(itemView.item_icon)
@@ -127,13 +142,14 @@ class ItemsAdapter(val activity: SimpleActivity, val mItems: List<FileDirItem>,
127142
itemView.item_details.text = fileDirItem.size.formatSize()
128143
}
129144

130-
itemView.setOnClickListener { viewClicked(multiSelector, fileDirItem) }
145+
itemView.setOnClickListener { viewClicked(multiSelector, fileDirItem, pos) }
131146
itemView.setOnLongClickListener {
132147
if (!multiSelector.isSelectable) {
133148
activity.startSupportActionMode(multiSelectorCallback)
134149
multiSelector.setSelected(this, true)
135150
actMode?.title = multiSelector.selectedPositions.size.toString()
136-
toggleItemSelection(itemView, true)
151+
toggleItemSelection(itemView, true, pos)
152+
markedItems.add(pos)
137153
actMode?.invalidate()
138154
}
139155
true
@@ -149,11 +165,11 @@ class ItemsAdapter(val activity: SimpleActivity, val mItems: List<FileDirItem>,
149165
return activity.resources.getQuantityString(R.plurals.items, children, children)
150166
}
151167

152-
fun viewClicked(multiSelector: MultiSelector, fileDirItem: FileDirItem) {
168+
fun viewClicked(multiSelector: MultiSelector, fileDirItem: FileDirItem, pos: Int) {
153169
if (multiSelector.isSelectable) {
154170
val isSelected = multiSelector.selectedPositions.contains(layoutPosition)
155171
multiSelector.setSelected(this, !isSelected)
156-
toggleItemSelection(itemView, !isSelected)
172+
toggleItemSelection(itemView, !isSelected, pos)
157173

158174
val selectedCnt = multiSelector.selectedPositions.size
159175
if (selectedCnt == 0) {

0 commit comments

Comments
 (0)