mirror of https://github.com/M66B/FairEmail.git
Added swipe move
This commit is contained in:
parent
5eb7975899
commit
adb480c972
|
@ -152,6 +152,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
static final Long SWIPE_ACTION_SEEN = -2L;
|
static final Long SWIPE_ACTION_SEEN = -2L;
|
||||||
static final Long SWIPE_ACTION_SNOOZE = -3L;
|
static final Long SWIPE_ACTION_SNOOZE = -3L;
|
||||||
static final Long SWIPE_ACTION_HIDE = -4L;
|
static final Long SWIPE_ACTION_HIDE = -4L;
|
||||||
|
static final Long SWIPE_ACTION_MOVE = -5L;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -1504,6 +1505,11 @@ public class FragmentAccount extends FragmentBase {
|
||||||
hide.name = getString(R.string.title_hide);
|
hide.name = getString(R.string.title_hide);
|
||||||
folders.add(hide);
|
folders.add(hide);
|
||||||
|
|
||||||
|
EntityFolder move = new EntityFolder();
|
||||||
|
move.id = SWIPE_ACTION_MOVE;
|
||||||
|
move.name = getString(R.string.title_move);
|
||||||
|
folders.add(move);
|
||||||
|
|
||||||
folders.addAll(_folders);
|
folders.addAll(_folders);
|
||||||
|
|
||||||
adapterSwipe.clear();
|
adapterSwipe.clear();
|
||||||
|
|
|
@ -1362,7 +1362,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
|
||||||
TupleMessageEx message = getMessage(viewHolder);
|
int pos = viewHolder.getAdapterPosition();
|
||||||
|
if (pos == RecyclerView.NO_POSITION)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
TupleMessageEx message = getMessage(pos);
|
||||||
if (message == null)
|
if (message == null)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1411,7 +1415,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
handler.postDelayed(enableSelection, SWIPE_DISABLE_SELECT_DURATION);
|
handler.postDelayed(enableSelection, SWIPE_DISABLE_SELECT_DURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
TupleMessageEx message = getMessage(viewHolder);
|
int pos = viewHolder.getAdapterPosition();
|
||||||
|
if (pos == RecyclerView.NO_POSITION)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TupleMessageEx message = getMessage(pos);
|
||||||
if (message == null)
|
if (message == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1439,6 +1447,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
icon = (message.ui_snoozed == null ? R.drawable.baseline_visibility_off_24 :
|
icon = (message.ui_snoozed == null ? R.drawable.baseline_visibility_off_24 :
|
||||||
(message.ui_snoozed == Long.MAX_VALUE
|
(message.ui_snoozed == Long.MAX_VALUE
|
||||||
? R.drawable.baseline_visibility_24 : R.drawable.baseline_timer_off_24));
|
? R.drawable.baseline_visibility_24 : R.drawable.baseline_timer_off_24));
|
||||||
|
else if (FragmentAccount.SWIPE_ACTION_MOVE.equals(action))
|
||||||
|
icon = R.drawable.baseline_folder_24;
|
||||||
else
|
else
|
||||||
icon = EntityFolder.getIcon(dX > 0 ? swipes.right_type : swipes.left_type);
|
icon = EntityFolder.getIcon(dX > 0 ? swipes.right_type : swipes.left_type);
|
||||||
Drawable d = getResources().getDrawable(icon, getContext().getTheme()).mutate();
|
Drawable d = getResources().getDrawable(icon, getContext().getTheme()).mutate();
|
||||||
|
@ -1475,7 +1485,13 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
||||||
final TupleMessageEx message = getMessage(viewHolder);
|
int pos = viewHolder.getAdapterPosition();
|
||||||
|
if (pos == RecyclerView.NO_POSITION) {
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TupleMessageEx message = getMessage(pos);
|
||||||
if (message == null) {
|
if (message == null) {
|
||||||
adapter.notifyDataSetChanged();
|
adapter.notifyDataSetChanged();
|
||||||
return;
|
return;
|
||||||
|
@ -1495,26 +1511,26 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
|
|
||||||
Log.i("Swiped dir=" + direction + " message=" + message.id);
|
Log.i("Swiped dir=" + direction + " message=" + message.id);
|
||||||
|
|
||||||
if (FragmentAccount.SWIPE_ACTION_ASK.equals(action))
|
if (FragmentAccount.SWIPE_ACTION_ASK.equals(action)) {
|
||||||
swipeAsk(message, viewHolder);
|
adapter.notifyItemChanged(pos);
|
||||||
else if (FragmentAccount.SWIPE_ACTION_SEEN.equals(action))
|
onSwipeAsk(message, viewHolder);
|
||||||
|
} else if (FragmentAccount.SWIPE_ACTION_SEEN.equals(action))
|
||||||
onActionSeenSelection(!message.ui_seen, message.id);
|
onActionSeenSelection(!message.ui_seen, message.id);
|
||||||
else if (FragmentAccount.SWIPE_ACTION_SNOOZE.equals(action))
|
else if (FragmentAccount.SWIPE_ACTION_SNOOZE.equals(action))
|
||||||
onActionSnooze(message);
|
onActionSnooze(message);
|
||||||
else if (FragmentAccount.SWIPE_ACTION_HIDE.equals(action))
|
else if (FragmentAccount.SWIPE_ACTION_HIDE.equals(action))
|
||||||
onActionHide(message);
|
onActionHide(message);
|
||||||
else
|
else if (FragmentAccount.SWIPE_ACTION_MOVE.equals(action)) {
|
||||||
|
adapter.notifyItemChanged(pos);
|
||||||
|
onSwipeMove(message);
|
||||||
|
} else
|
||||||
swipeFolder(message, action);
|
swipeFolder(message, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TupleMessageEx getMessage(@NonNull RecyclerView.ViewHolder viewHolder) {
|
private TupleMessageEx getMessage(int pos) {
|
||||||
if (selectionTracker != null && selectionTracker.hasSelection())
|
if (selectionTracker != null && selectionTracker.hasSelection())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
int pos = viewHolder.getAdapterPosition();
|
|
||||||
if (pos == RecyclerView.NO_POSITION)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
PagedList<TupleMessageEx> list = ((AdapterMessage) rvMessage.getAdapter()).getCurrentList();
|
PagedList<TupleMessageEx> list = ((AdapterMessage) rvMessage.getAdapter()).getCurrentList();
|
||||||
if (pos >= list.size())
|
if (pos >= list.size())
|
||||||
return null;
|
return null;
|
||||||
|
@ -1532,14 +1548,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void swipeAsk(final @NonNull TupleMessageEx message, @NonNull RecyclerView.ViewHolder viewHolder) {
|
private void onSwipeAsk(final @NonNull TupleMessageEx message, @NonNull RecyclerView.ViewHolder viewHolder) {
|
||||||
// Use fixed anchor
|
// Use fixed anchor
|
||||||
ConstraintLayout.LayoutParams lparam = (ConstraintLayout.LayoutParams) vwAnchor.getLayoutParams();
|
ConstraintLayout.LayoutParams lparam = (ConstraintLayout.LayoutParams) vwAnchor.getLayoutParams();
|
||||||
lparam.topMargin = viewHolder.itemView.getTop() + viewHolder.itemView.getHeight();
|
lparam.topMargin = viewHolder.itemView.getTop() + viewHolder.itemView.getHeight();
|
||||||
vwAnchor.setLayoutParams(lparam);
|
vwAnchor.setLayoutParams(lparam);
|
||||||
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
|
|
||||||
PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), vwAnchor);
|
PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), vwAnchor);
|
||||||
|
|
||||||
if (message.ui_seen)
|
if (message.ui_seen)
|
||||||
|
@ -1578,7 +1592,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
onMenuColor();
|
onMenuColor();
|
||||||
return true;
|
return true;
|
||||||
case R.string.title_move:
|
case R.string.title_move:
|
||||||
onMenuMove();
|
onSwipeMove(message);
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -1610,8 +1624,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
fragment.setTargetFragment(FragmentMessages.this, FragmentMessages.REQUEST_MESSAGE_COLOR);
|
fragment.setTargetFragment(FragmentMessages.this, FragmentMessages.REQUEST_MESSAGE_COLOR);
|
||||||
fragment.show(getParentFragmentManager(), "message:color");
|
fragment.show(getParentFragmentManager(), "message:color");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
private void onMenuMove() {
|
popupMenu.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onSwipeMove(final @NonNull TupleMessageEx message) {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putString("title", getString(R.string.title_move_to_folder));
|
args.putString("title", getString(R.string.title_move_to_folder));
|
||||||
args.putLong("account", message.account);
|
args.putLong("account", message.account);
|
||||||
|
@ -1625,10 +1643,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
||||||
fragment.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGE_MOVE);
|
fragment.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGE_MOVE);
|
||||||
fragment.show(getParentFragmentManager(), "message:move");
|
fragment.show(getParentFragmentManager(), "message:move");
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
popupMenu.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void swipeFolder(@NonNull TupleMessageEx message, @NonNull Long target) {
|
private void swipeFolder(@NonNull TupleMessageEx message, @NonNull Long target) {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
|
|
Loading…
Reference in New Issue