@@ -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