@@ -124,20 +124,27 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
124
124
125
125
private var footerProgressView: View ? = null
126
126
private var tracker: SelectionTracker <Long >? = null
127
- private var keyProvider: CustomStableIdKeyProvider ? = null
128
127
private var actionMode: ActionMode ? = null
129
128
private var activeMsgEntity: MessageEntity ? = null
130
129
private val currentFolder: LocalFolder ?
131
130
get() = labelsViewModel.activeFolderLiveData.value
132
131
133
132
private val adapter by lazy {
134
- MsgsPagedListAdapter (null , object : MsgsPagedListAdapter .OnMessageClickListener {
133
+ MsgsPagedListAdapter (object : MsgsPagedListAdapter .OnMessagesActionListener {
135
134
override fun onMsgClick (msgEntity : MessageEntity ) {
136
135
onMsgClicked(msgEntity)
137
136
}
138
- })
137
+
138
+ override fun onExistingMsgsChanged (snapshotOfExistingIds : Set <Long >) {
139
+ val selectedIds = tracker?.selection?.mapNotNull { it }?.toSet() ? : emptySet()
140
+ val irrelevantSelectedIds = selectedIds - snapshotOfExistingIds
141
+ tracker?.setItemsSelected(irrelevantSelectedIds, false )
142
+ }
143
+ }) { key -> tracker?.isSelected(key) ? : false }
139
144
}
140
145
146
+ private val keyProvider by lazy { CustomStableIdKeyProvider (adapter) }
147
+
141
148
private var keepSelectionInMemory = false
142
149
private var isForceSendingEnabled: Boolean = true
143
150
@@ -471,9 +478,6 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
471
478
}
472
479
}
473
480
474
- /* *
475
- * Try to load a next messages from an IMAP server.
476
- */
477
481
private fun loadNextMsgs () {
478
482
if (isOutboxFolder) {
479
483
return
@@ -485,8 +489,7 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
485
489
if (currentFolder == null ) {
486
490
labelsViewModel.loadLabels()
487
491
} else {
488
- // adapter.changeProgress(true)
489
- // msgsViewModel.loadMsgsFromRemoteServer()
492
+ adapter.refresh()
490
493
}
491
494
} else {
492
495
footerProgressView?.visibility = View .GONE
@@ -529,33 +532,28 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
529
532
)
530
533
binding?.recyclerViewMsgs?.adapter = adapter.withLoadStateFooter(MsgsLoadStateAdapter ())
531
534
setupItemTouchHelper()
532
- // setupSelectionTracker()
535
+ setupSelectionTracker()
533
536
setupBottomOverScroll()
534
537
}
535
538
536
539
private fun setupSelectionTracker () {
537
- // adapter.tracker = null
538
540
binding?.recyclerViewMsgs?.let { recyclerView ->
539
- keyProvider = CustomStableIdKeyProvider (recyclerView)
540
- keyProvider?.let {
541
- tracker = SelectionTracker .Builder (
542
- MessagesListFragment ::class .java.simpleName,
543
- recyclerView,
544
- it,
545
- MsgItemDetailsLookup (recyclerView),
546
- StorageStrategy .createLongStorage()
547
- ).withSelectionPredicate(object : SelectionTracker .SelectionPredicate <Long >() {
548
- override fun canSetStateForKey (key : Long , nextState : Boolean ): Boolean =
549
- currentFolder?.searchQuery == null
550
-
551
- override fun canSetStateAtPosition (position : Int , nextState : Boolean ): Boolean =
552
- currentFolder?.searchQuery == null
553
-
554
- override fun canSelectMultiple (): Boolean = true
555
- }).build()
556
- tracker?.addObserver(selectionObserver)
557
- // adapter.tracker = tracker
558
- }
541
+ tracker = SelectionTracker .Builder (
542
+ MessagesListFragment ::class .java.simpleName,
543
+ recyclerView,
544
+ keyProvider,
545
+ MsgItemDetailsLookup (recyclerView),
546
+ StorageStrategy .createLongStorage()
547
+ ).withSelectionPredicate(object : SelectionTracker .SelectionPredicate <Long >() {
548
+ override fun canSetStateForKey (key : Long , nextState : Boolean ): Boolean =
549
+ currentFolder?.searchQuery == null
550
+
551
+ override fun canSetStateAtPosition (position : Int , nextState : Boolean ): Boolean =
552
+ currentFolder?.searchQuery == null
553
+
554
+ override fun canSelectMultiple (): Boolean = true
555
+ }).build()
556
+ tracker?.addObserver(selectionObserver)
559
557
}
560
558
}
561
559
@@ -729,7 +727,7 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
729
727
&& System .currentTimeMillis() - lastCallTime >= TIMEOUT_BETWEEN_ACTIONS
730
728
) {
731
729
if (msgsViewModel.loadMsgsFromRemoteServerLiveData.value?.status != Result .Status .LOADING ) {
732
- // msgsViewModel.loadMsgsFromRemoteServer ()
730
+ adapter.refresh ()
733
731
}
734
732
}
735
733
}
@@ -807,10 +805,10 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
807
805
808
806
if (isChangeSeenStateActionEnabled()) {
809
807
val id = tracker?.selection?.first() ? : return true
810
- /* val msgEntity = adapter.getMsgEntity (keyProvider? .getPosition(id))
808
+ val msgEntity = adapter.getMessageEntity (keyProvider.getPosition(id))
811
809
812
810
menuActionMarkUnread?.isVisible = msgEntity?.isSeen == true
813
- menuActionMarkRead?.isVisible = msgEntity?.isSeen != true*/
811
+ menuActionMarkRead?.isVisible = msgEntity?.isSeen != true
814
812
}
815
813
816
814
return true
@@ -1220,7 +1218,7 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
1220
1218
tracker?.clearSelection()
1221
1219
1222
1220
val newFolder = currentFolder
1223
- adapter.currentFolder = newFolder
1221
+ adapter.switchFolder( newFolder)
1224
1222
1225
1223
val isFolderNameEmpty = newFolder?.fullName?.isEmpty()
1226
1224
val isItSyncOrOutboxFolder = isItSyncOrOutboxFolder(newFolder)
@@ -1246,7 +1244,6 @@ class MessagesListFragment : BaseFragment<FragmentMessagesListBinding>(),
1246
1244
getString(R .string.progress_message, progress, message)
1247
1245
} else {
1248
1246
binding?.textViewActionProgress?.text = null
1249
- // adapter.changeProgress(false)
1250
1247
}
1251
1248
}
1252
1249
0 commit comments