mirror of https://github.com/M66B/FairEmail.git
Fixed redrawing swiped view holders
This commit is contained in:
parent
99b8056c73
commit
a46329cc7b
|
@ -371,6 +371,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
private boolean navigating = false;
|
private boolean navigating = false;
|
||||||
|
|
||||||
private AdapterMessage adapter;
|
private AdapterMessage adapter;
|
||||||
|
private ItemTouchHelper itemTouchHelper;
|
||||||
|
|
||||||
private AdapterMessage.ViewType viewType;
|
private AdapterMessage.ViewType viewType;
|
||||||
private SelectionPredicateMessage selectionPredicate = null;
|
private SelectionPredicateMessage selectionPredicate = null;
|
||||||
|
@ -2040,10 +2041,13 @@ public class FragmentMessages extends FragmentBase
|
||||||
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else
|
} else {
|
||||||
new ItemTouchHelper(touchHelper).attachToRecyclerView(rvMessage);
|
itemTouchHelper = new ItemTouchHelper(touchHelper);
|
||||||
|
itemTouchHelper.attachToRecyclerView(rvMessage);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
new ItemTouchHelper(touchHelper).attachToRecyclerView(rvMessage);
|
itemTouchHelper = new ItemTouchHelper(touchHelper);
|
||||||
|
itemTouchHelper.attachToRecyclerView(rvMessage);
|
||||||
|
|
||||||
selectionPredicate = new SelectionPredicateMessage(rvMessage);
|
selectionPredicate = new SelectionPredicateMessage(rvMessage);
|
||||||
|
|
||||||
|
@ -3122,20 +3126,20 @@ public class FragmentMessages extends FragmentBase
|
||||||
try {
|
try {
|
||||||
int pos = viewHolder.getAdapterPosition();
|
int pos = viewHolder.getAdapterPosition();
|
||||||
if (pos == NO_POSITION) {
|
if (pos == NO_POSITION) {
|
||||||
redraw(NO_POSITION);
|
redraw(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TupleMessageEx message = getMessage(pos);
|
TupleMessageEx message = getMessage(pos);
|
||||||
if (message == null) {
|
if (message == null) {
|
||||||
redraw(NO_POSITION);
|
redraw(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean expanded = iProperties.getValue("expanded", message.id);
|
boolean expanded = iProperties.getValue("expanded", message.id);
|
||||||
|
|
||||||
if (expanded && swipe_reply) {
|
if (expanded && swipe_reply) {
|
||||||
redraw(pos);
|
redraw(viewHolder);
|
||||||
onMenuReply(message, "reply", null);
|
onMenuReply(message, "reply", null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3147,7 +3151,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
|
|
||||||
TupleAccountSwipes swipes = accountSwipes.get(message.account);
|
TupleAccountSwipes swipes = accountSwipes.get(message.account);
|
||||||
if (swipes == null) {
|
if (swipes == null) {
|
||||||
redraw(NO_POSITION);
|
redraw(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3161,7 +3165,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
Long action = (direction == ItemTouchHelper.LEFT ? swipes.swipe_left : swipes.swipe_right);
|
Long action = (direction == ItemTouchHelper.LEFT ? swipes.swipe_left : swipes.swipe_right);
|
||||||
String actionType = (direction == ItemTouchHelper.LEFT ? swipes.left_type : swipes.right_type);
|
String actionType = (direction == ItemTouchHelper.LEFT ? swipes.left_type : swipes.right_type);
|
||||||
if (action == null) {
|
if (action == null) {
|
||||||
redraw(NO_POSITION);
|
redraw(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3180,12 +3184,12 @@ public class FragmentMessages extends FragmentBase
|
||||||
" folder=" + message.folderType);
|
" folder=" + message.folderType);
|
||||||
|
|
||||||
if (EntityMessage.SWIPE_ACTION_ASK.equals(action)) {
|
if (EntityMessage.SWIPE_ACTION_ASK.equals(action)) {
|
||||||
redraw(pos);
|
redraw(viewHolder);
|
||||||
onSwipeAsk(message, viewHolder);
|
onSwipeAsk(message, viewHolder);
|
||||||
} else if (EntityMessage.SWIPE_ACTION_SEEN.equals(action)) {
|
} else if (EntityMessage.SWIPE_ACTION_SEEN.equals(action)) {
|
||||||
message.unseen = (message.unseen == 0 ? message.count : 0);
|
message.unseen = (message.unseen == 0 ? message.count : 0);
|
||||||
message.ui_seen = (message.unseen == 0);
|
message.ui_seen = (message.unseen == 0);
|
||||||
redraw(pos);
|
redraw(viewHolder);
|
||||||
onActionSeenSelection(message.ui_seen, message.id, false);
|
onActionSeenSelection(message.ui_seen, message.id, false);
|
||||||
} else if (EntityMessage.SWIPE_ACTION_FLAG.equals(action))
|
} else if (EntityMessage.SWIPE_ACTION_FLAG.equals(action))
|
||||||
onActionFlagSelection(!message.ui_flagged, Color.TRANSPARENT, message.id, false);
|
onActionFlagSelection(!message.ui_flagged, Color.TRANSPARENT, message.id, false);
|
||||||
|
@ -3193,21 +3197,21 @@ public class FragmentMessages extends FragmentBase
|
||||||
if (ActivityBilling.isPro(getContext()))
|
if (ActivityBilling.isPro(getContext()))
|
||||||
onActionSnooze(message);
|
onActionSnooze(message);
|
||||||
else {
|
else {
|
||||||
redraw(pos);
|
redraw(viewHolder);
|
||||||
startActivity(new Intent(getContext(), ActivityBilling.class));
|
startActivity(new Intent(getContext(), ActivityBilling.class));
|
||||||
}
|
}
|
||||||
else if (EntityMessage.SWIPE_ACTION_HIDE.equals(action))
|
else if (EntityMessage.SWIPE_ACTION_HIDE.equals(action))
|
||||||
onActionHide(message);
|
onActionHide(message);
|
||||||
else if (EntityMessage.SWIPE_ACTION_MOVE.equals(action)) {
|
else if (EntityMessage.SWIPE_ACTION_MOVE.equals(action)) {
|
||||||
redraw(pos);
|
redraw(viewHolder);
|
||||||
onSwipeMove(message);
|
onSwipeMove(message);
|
||||||
} else if (EntityMessage.SWIPE_ACTION_JUNK.equals(action)) {
|
} else if (EntityMessage.SWIPE_ACTION_JUNK.equals(action)) {
|
||||||
redraw(pos);
|
redraw(viewHolder);
|
||||||
onSwipeJunk(message);
|
onSwipeJunk(message);
|
||||||
} else if (EntityMessage.SWIPE_ACTION_DELETE.equals(action) ||
|
} else if (EntityMessage.SWIPE_ACTION_DELETE.equals(action) ||
|
||||||
(action.equals(message.folder) && EntityFolder.TRASH.equals(message.folderType)) ||
|
(action.equals(message.folder) && EntityFolder.TRASH.equals(message.folderType)) ||
|
||||||
(EntityFolder.TRASH.equals(actionType) && EntityFolder.JUNK.equals(message.folderType)))
|
(EntityFolder.TRASH.equals(actionType) && EntityFolder.JUNK.equals(message.folderType)))
|
||||||
onSwipeDelete(message, pos);
|
onSwipeDelete(message, viewHolder);
|
||||||
else
|
else
|
||||||
swipeFolder(message, action);
|
swipeFolder(message, action);
|
||||||
} catch (Throwable ex) {
|
} catch (Throwable ex) {
|
||||||
|
@ -3247,22 +3251,28 @@ public class FragmentMessages extends FragmentBase
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void redraw(int pos) {
|
private void redraw(RecyclerView.ViewHolder vh) {
|
||||||
rvMessage.post(new Runnable() {
|
rvMessage.post(new RunnableEx("redraw") {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void delegate() {
|
||||||
try {
|
if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
|
||||||
if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
|
return;
|
||||||
return;
|
|
||||||
if (rvMessage.isComputingLayout())
|
if (rvMessage.isComputingLayout())
|
||||||
Log.e("isComputingLayout");
|
Log.e("isComputingLayout");
|
||||||
|
|
||||||
|
if (vh == null)
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
else {
|
||||||
|
int pos = vh.getAbsoluteAdapterPosition();
|
||||||
if (pos == NO_POSITION)
|
if (pos == NO_POSITION)
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
else
|
else
|
||||||
adapter.notifyItemChanged(pos);
|
adapter.notifyItemChanged(pos);
|
||||||
} catch (Throwable ex) {
|
|
||||||
Log.e(ex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vh != null && itemTouchHelper != null)
|
||||||
|
itemTouchHelper.startSwipe(vh);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3332,7 +3342,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
onSwipeJunk(message);
|
onSwipeJunk(message);
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.string.title_delete_permanently) {
|
} else if (itemId == R.string.title_delete_permanently) {
|
||||||
onSwipeDelete(message, NO_POSITION);
|
onSwipeDelete(message, viewHolder);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -3418,7 +3428,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSwipeDelete(@NonNull TupleMessageEx message, int pos) {
|
private void onSwipeDelete(@NonNull TupleMessageEx message, RecyclerView.ViewHolder vh) {
|
||||||
boolean leave_deleted =
|
boolean leave_deleted =
|
||||||
(message.accountProtocol == EntityAccount.TYPE_POP &&
|
(message.accountProtocol == EntityAccount.TYPE_POP &&
|
||||||
message.accountLeaveDeleted);
|
message.accountLeaveDeleted);
|
||||||
|
@ -3494,8 +3504,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos != NO_POSITION)
|
redraw(vh);
|
||||||
redraw(pos);
|
|
||||||
|
|
||||||
FragmentDialogAsk ask = new FragmentDialogAsk();
|
FragmentDialogAsk ask = new FragmentDialogAsk();
|
||||||
ask.setArguments(args);
|
ask.setArguments(args);
|
||||||
|
@ -3576,7 +3585,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
@Override
|
@Override
|
||||||
protected void onExecuted(Bundle args, ArrayList<MessageTarget> result) {
|
protected void onExecuted(Bundle args, ArrayList<MessageTarget> result) {
|
||||||
if (result == null || result.size() == 0)
|
if (result == null || result.size() == 0)
|
||||||
redraw(NO_POSITION);
|
redraw(null);
|
||||||
else
|
else
|
||||||
moveUndo(result);
|
moveUndo(result);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue