Loading app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt +28 −11 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ class MessageListFragment : private lateinit var fragmentListener: MessageListFragmentListener private var recyclerView: RecyclerView? = null private var itemTouchHelper: ItemTouchHelper? = null private var swipeRefreshLayout: SwipeRefreshLayout? = null private lateinit var adapter: MessageListAdapter Loading Loading @@ -278,6 +279,7 @@ class MessageListFragment : recyclerView.adapter = adapter this.recyclerView = recyclerView this.itemTouchHelper = itemTouchHelper } private fun initializeSortSettings() { Loading Loading @@ -421,6 +423,7 @@ class MessageListFragment : override fun onDestroyView() { recyclerView = null itemTouchHelper = null swipeRefreshLayout = null if (isNewMessagesView && !requireActivity().isChangingConfigurations) { Loading Loading @@ -1108,8 +1111,25 @@ class MessageListFragment : override fun doNegativeClick(dialogId: Int) { if (dialogId == R.id.dialog_confirm_spam || dialogId == R.id.dialog_confirm_delete) { // No further need for this reference activeMessages = null val activeMessages = this.activeMessages ?: return if (activeMessages.size == 1) { // List item might have been swiped and is still showing the "swipe action background" resetSwipedView(activeMessages.first()) } this.activeMessages = null } } private fun resetSwipedView(messageReference: MessageReference) { val recyclerView = this.recyclerView ?: return val itemTouchHelper = this.itemTouchHelper ?: return adapter.getItem(messageReference)?.let { messageListItem -> recyclerView.findViewHolderForItemId(messageListItem.uniqueId)?.let { viewHolder -> itemTouchHelper.stopSwipe(viewHolder) notifyItemChanged(messageListItem) } } } Loading Loading @@ -1491,20 +1511,15 @@ class MessageListFragment : onArchive(item.messageReference) } SwipeAction.Delete -> { if (K9.isConfirmDelete) { notifyItemChanged(item) } onDelete(listOf(item.messageReference)) } SwipeAction.Spam -> { if (K9.isConfirmSpam) { notifyItemChanged(item) } onSpam(listOf(item.messageReference)) } SwipeAction.Move -> { notifyItemChanged(item) onMove(item.messageReference) val messageReference = item.messageReference resetSwipedView(messageReference) onMove(messageReference) } } } Loading @@ -1527,7 +1542,9 @@ class MessageListFragment : SwipeAction.ToggleSelection -> true SwipeAction.ToggleRead -> !isOutbox SwipeAction.ToggleStar -> !isOutbox SwipeAction.Archive -> !isOutbox && item.account.hasArchiveFolder() SwipeAction.Archive -> { !isOutbox && item.account.hasArchiveFolder() && item.folderId != item.account.archiveFolderId } SwipeAction.Delete -> true SwipeAction.Move -> !isOutbox && messagingController.isMoveCapable(item.account) SwipeAction.Spam -> !isOutbox && item.account.hasSpamFolder() && item.folderId != item.account.spamFolderId Loading app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListSwipeCallback.kt +3 −3 Original line number Diff line number Diff line Loading @@ -69,6 +69,9 @@ class MessageListSwipeCallback( } override fun onSwipeStarted(viewHolder: ViewHolder, direction: Int) { // Mark view to prevent MessageListItemAnimator from interfering with swipe animations viewHolder.markAsSwiped(true) val swipeAction = when (direction) { ItemTouchHelper.RIGHT -> swipeRightAction ItemTouchHelper.LEFT -> swipeLeftAction Loading @@ -91,9 +94,6 @@ class MessageListSwipeCallback( override fun onSwiped(viewHolder: ViewHolder, direction: Int) { val item = viewHolder.messageListItem // Mark view to prevent MessageListItemAnimator from interfering with swipe animations viewHolder.markAsSwiped(true) when (direction) { ItemTouchHelper.RIGHT -> listener.onSwipeAction(item, swipeRightAction) ItemTouchHelper.LEFT -> listener.onSwipeAction(item, swipeLeftAction) Loading ui-utils/ItemTouchHelper/src/main/java/app/k9mail/ui/utils/itemtouchhelper/ItemTouchHelper.java +8 −0 Original line number Diff line number Diff line Loading @@ -938,6 +938,10 @@ public class ItemTouchHelper extends RecyclerView.ItemDecoration @Override public void onChildViewDetachedFromWindow(@NonNull View view) { resetSwipeView(view); } private void resetSwipeView(@NonNull View view) { removeChildDrawingOrderCallbackIfNecessary(view); final ViewHolder holder = mRecyclerView.getChildViewHolder(view); if (holder == null) { Loading @@ -953,6 +957,10 @@ public class ItemTouchHelper extends RecyclerView.ItemDecoration } } public void stopSwipe(@NonNull ViewHolder viewHolder) { resetSwipeView(viewHolder.itemView); } /** * Returns the animation type or 0 if cannot be found. */ Loading Loading
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt +28 −11 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ class MessageListFragment : private lateinit var fragmentListener: MessageListFragmentListener private var recyclerView: RecyclerView? = null private var itemTouchHelper: ItemTouchHelper? = null private var swipeRefreshLayout: SwipeRefreshLayout? = null private lateinit var adapter: MessageListAdapter Loading Loading @@ -278,6 +279,7 @@ class MessageListFragment : recyclerView.adapter = adapter this.recyclerView = recyclerView this.itemTouchHelper = itemTouchHelper } private fun initializeSortSettings() { Loading Loading @@ -421,6 +423,7 @@ class MessageListFragment : override fun onDestroyView() { recyclerView = null itemTouchHelper = null swipeRefreshLayout = null if (isNewMessagesView && !requireActivity().isChangingConfigurations) { Loading Loading @@ -1108,8 +1111,25 @@ class MessageListFragment : override fun doNegativeClick(dialogId: Int) { if (dialogId == R.id.dialog_confirm_spam || dialogId == R.id.dialog_confirm_delete) { // No further need for this reference activeMessages = null val activeMessages = this.activeMessages ?: return if (activeMessages.size == 1) { // List item might have been swiped and is still showing the "swipe action background" resetSwipedView(activeMessages.first()) } this.activeMessages = null } } private fun resetSwipedView(messageReference: MessageReference) { val recyclerView = this.recyclerView ?: return val itemTouchHelper = this.itemTouchHelper ?: return adapter.getItem(messageReference)?.let { messageListItem -> recyclerView.findViewHolderForItemId(messageListItem.uniqueId)?.let { viewHolder -> itemTouchHelper.stopSwipe(viewHolder) notifyItemChanged(messageListItem) } } } Loading Loading @@ -1491,20 +1511,15 @@ class MessageListFragment : onArchive(item.messageReference) } SwipeAction.Delete -> { if (K9.isConfirmDelete) { notifyItemChanged(item) } onDelete(listOf(item.messageReference)) } SwipeAction.Spam -> { if (K9.isConfirmSpam) { notifyItemChanged(item) } onSpam(listOf(item.messageReference)) } SwipeAction.Move -> { notifyItemChanged(item) onMove(item.messageReference) val messageReference = item.messageReference resetSwipedView(messageReference) onMove(messageReference) } } } Loading @@ -1527,7 +1542,9 @@ class MessageListFragment : SwipeAction.ToggleSelection -> true SwipeAction.ToggleRead -> !isOutbox SwipeAction.ToggleStar -> !isOutbox SwipeAction.Archive -> !isOutbox && item.account.hasArchiveFolder() SwipeAction.Archive -> { !isOutbox && item.account.hasArchiveFolder() && item.folderId != item.account.archiveFolderId } SwipeAction.Delete -> true SwipeAction.Move -> !isOutbox && messagingController.isMoveCapable(item.account) SwipeAction.Spam -> !isOutbox && item.account.hasSpamFolder() && item.folderId != item.account.spamFolderId Loading
app/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListSwipeCallback.kt +3 −3 Original line number Diff line number Diff line Loading @@ -69,6 +69,9 @@ class MessageListSwipeCallback( } override fun onSwipeStarted(viewHolder: ViewHolder, direction: Int) { // Mark view to prevent MessageListItemAnimator from interfering with swipe animations viewHolder.markAsSwiped(true) val swipeAction = when (direction) { ItemTouchHelper.RIGHT -> swipeRightAction ItemTouchHelper.LEFT -> swipeLeftAction Loading @@ -91,9 +94,6 @@ class MessageListSwipeCallback( override fun onSwiped(viewHolder: ViewHolder, direction: Int) { val item = viewHolder.messageListItem // Mark view to prevent MessageListItemAnimator from interfering with swipe animations viewHolder.markAsSwiped(true) when (direction) { ItemTouchHelper.RIGHT -> listener.onSwipeAction(item, swipeRightAction) ItemTouchHelper.LEFT -> listener.onSwipeAction(item, swipeLeftAction) Loading
ui-utils/ItemTouchHelper/src/main/java/app/k9mail/ui/utils/itemtouchhelper/ItemTouchHelper.java +8 −0 Original line number Diff line number Diff line Loading @@ -938,6 +938,10 @@ public class ItemTouchHelper extends RecyclerView.ItemDecoration @Override public void onChildViewDetachedFromWindow(@NonNull View view) { resetSwipeView(view); } private void resetSwipeView(@NonNull View view) { removeChildDrawingOrderCallbackIfNecessary(view); final ViewHolder holder = mRecyclerView.getChildViewHolder(view); if (holder == null) { Loading @@ -953,6 +957,10 @@ public class ItemTouchHelper extends RecyclerView.ItemDecoration } } public void stopSwipe(@NonNull ViewHolder viewHolder) { resetSwipeView(viewHolder.itemView); } /** * Returns the animation type or 0 if cannot be found. */ Loading