Refactoring

pull/159/head
M66B 5 years ago
parent f0922e9152
commit 748f532a94

@ -1313,176 +1313,182 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
Log.i("Swiped dir=" + direction + " message=" + message.id); Log.i("Swiped dir=" + direction + " message=" + message.id);
Long action = (direction == ItemTouchHelper.LEFT ? swipes.swipe_left : swipes.swipe_right); Long target = (direction == ItemTouchHelper.LEFT ? swipes.swipe_left : swipes.swipe_right);
if (FragmentAccount.SWIPE_ACTION_SEEN.equals(action)) if (FragmentAccount.SWIPE_ACTION_SEEN.equals(target))
onActionSeenSelection(!message.ui_seen, message.id); onActionSeenSelection(!message.ui_seen, message.id);
else if (FragmentAccount.SWIPE_ACTION_ASK.equals(action)) { else if (FragmentAccount.SWIPE_ACTION_ASK.equals(target))
adapter.notifyItemChanged(viewHolder.getAdapterPosition()); swipeAsk(message, viewHolder);
else
PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), viewHolder.itemView); swipeFolder(message, target);
popupMenu.setGravity(Gravity.RIGHT); }
if (message.ui_seen) private TupleMessageEx getMessage(@NonNull RecyclerView.ViewHolder viewHolder) {
popupMenu.getMenu().add(Menu.NONE, R.string.title_unseen, 2, R.string.title_unseen); if (selectionTracker != null && selectionTracker.hasSelection())
else return null;
popupMenu.getMenu().add(Menu.NONE, R.string.title_seen, 1, R.string.title_seen);
popupMenu.getMenu().add(Menu.NONE, R.string.title_snooze, 3, R.string.title_snooze); int pos = viewHolder.getAdapterPosition();
popupMenu.getMenu().add(Menu.NONE, R.string.title_flag_color, 3, R.string.title_flag_color); if (pos == RecyclerView.NO_POSITION)
popupMenu.getMenu().add(Menu.NONE, R.string.title_move, 3, R.string.title_move); return null;
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { PagedList<TupleMessageEx> list = ((AdapterMessage) rvMessage.getAdapter()).getCurrentList();
@Override if (pos >= list.size())
public boolean onMenuItemClick(MenuItem target) { return null;
switch (target.getItemId()) {
case R.string.title_seen:
onActionSeenSelection(true, message.id);
return true;
case R.string.title_unseen:
onActionSeenSelection(false, message.id);
return true;
case R.string.title_snooze:
onMenuSnooze();
return true;
case R.string.title_flag_color:
onMenuColor();
return true;
case R.string.title_move:
onMenuMove();
return true;
default:
return false;
}
}
private void onMenuSnooze() { TupleMessageEx message = list.get(pos);
Bundle args = new Bundle(); if (message == null || message.uid == null)
args.putString("title", getString(R.string.title_snooze)); return null;
args.putLong("account", message.account);
args.putString("thread", message.thread);
args.putLong("id", message.id);
args.putBoolean("finish", false);
FragmentDialogDuration fragment = new FragmentDialogDuration();
fragment.setArguments(args);
fragment.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGE_SNOOZE);
fragment.show(getFragmentManager(), "message:snooze");
}
private void onMenuColor() { if (iProperties.getValue("expanded", message.id))
int color = (message.color == null ? Color.TRANSPARENT : message.color); return null;
Bundle args = new Bundle(); if (EntityFolder.OUTBOX.equals(message.folderType))
args.putLong("id", message.id); return null;
FragmentDialogColor fragment = new FragmentDialogColor(); return message;
fragment.initialize(R.string.title_flag_color, color, args, getContext()); }
fragment.setTargetFragment(FragmentMessages.this, FragmentMessages.REQUEST_MESSAGE_COLOR);
fragment.show(getFragmentManager(), "message:color");
}
private void onMenuMove() { private void swipeAsk(final @NonNull TupleMessageEx message, @NonNull RecyclerView.ViewHolder viewHolder) {
Bundle args = new Bundle(); adapter.notifyItemChanged(viewHolder.getAdapterPosition());
args.putString("title", getString(R.string.title_move_to_folder));
args.putLong("account", message.account);
args.putLongArray("disabled", new long[]{message.folder});
args.putLong("message", message.id);
args.putBoolean("copy", false);
args.putBoolean("similar", true);
FragmentDialogFolder fragment = new FragmentDialogFolder();
fragment.setArguments(args);
fragment.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGE_MOVE);
fragment.show(getFragmentManager(), "message:move");
}
});
popupMenu.show(); PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), viewHolder.itemView);
popupMenu.setGravity(Gravity.RIGHT);
} else { if (message.ui_seen)
Bundle args = new Bundle(); popupMenu.getMenu().add(Menu.NONE, R.string.title_unseen, 2, R.string.title_unseen);
args.putLong("id", message.id); else
args.putBoolean("thread", viewType != AdapterMessage.ViewType.THREAD); popupMenu.getMenu().add(Menu.NONE, R.string.title_seen, 1, R.string.title_seen);
args.putLong("target", action);
new SimpleTask<ArrayList<MessageTarget>>() { popupMenu.getMenu().add(Menu.NONE, R.string.title_snooze, 3, R.string.title_snooze);
@Override popupMenu.getMenu().add(Menu.NONE, R.string.title_flag_color, 3, R.string.title_flag_color);
protected ArrayList<MessageTarget> onExecute(Context context, Bundle args) { popupMenu.getMenu().add(Menu.NONE, R.string.title_move, 3, R.string.title_move);
long id = args.getLong("id");
boolean thread = args.getBoolean("thread");
long tid = args.getLong("target");
ArrayList<MessageTarget> result = new ArrayList<>(); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem target) {
switch (target.getItemId()) {
case R.string.title_seen:
onActionSeenSelection(true, message.id);
return true;
case R.string.title_unseen:
onActionSeenSelection(false, message.id);
return true;
case R.string.title_snooze:
onMenuSnooze();
return true;
case R.string.title_flag_color:
onMenuColor();
return true;
case R.string.title_move:
onMenuMove();
return true;
default:
return false;
}
}
// Get target folder and hide message private void onMenuSnooze() {
DB db = DB.getInstance(context); Bundle args = new Bundle();
try { args.putString("title", getString(R.string.title_snooze));
db.beginTransaction(); args.putLong("account", message.account);
args.putString("thread", message.thread);
args.putLong("id", message.id);
args.putBoolean("finish", false);
EntityFolder target = db.folder().getFolder(tid); FragmentDialogDuration fragment = new FragmentDialogDuration();
if (target == null) fragment.setArguments(args);
throw new IllegalArgumentException(context.getString(R.string.title_no_folder)); fragment.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGE_SNOOZE);
fragment.show(getFragmentManager(), "message:snooze");
}
EntityAccount account = db.account().getAccount(target.account); private void onMenuColor() {
EntityMessage message = db.message().getMessage(id); int color = (message.color == null ? Color.TRANSPARENT : message.color);
if (message != null) {
List<EntityMessage> messages = db.message().getMessageByThread(
message.account, message.thread, threading && thread ? null : id, message.folder);
for (EntityMessage threaded : messages) {
result.add(new MessageTarget(threaded, account, target));
db.message().setMessageUiHide(threaded.id, new Date().getTime());
// Prevent new message notification on undo
db.message().setMessageUiIgnored(threaded.id, true);
}
}
db.setTransactionSuccessful(); Bundle args = new Bundle();
} finally { args.putLong("id", message.id);
db.endTransaction();
}
return result; FragmentDialogColor fragment = new FragmentDialogColor();
} fragment.initialize(R.string.title_flag_color, color, args, getContext());
fragment.setTargetFragment(FragmentMessages.this, FragmentMessages.REQUEST_MESSAGE_COLOR);
fragment.show(getFragmentManager(), "message:color");
}
@Override private void onMenuMove() {
protected void onExecuted(Bundle args, ArrayList<MessageTarget> result) { Bundle args = new Bundle();
moveUndo(result); args.putString("title", getString(R.string.title_move_to_folder));
} args.putLong("account", message.account);
args.putLongArray("disabled", new long[]{message.folder});
args.putLong("message", message.id);
args.putBoolean("copy", false);
args.putBoolean("similar", true);
FragmentDialogFolder fragment = new FragmentDialogFolder();
fragment.setArguments(args);
fragment.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGE_MOVE);
fragment.show(getFragmentManager(), "message:move");
}
});
@Override popupMenu.show();
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException)
Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
else
Helper.unexpectedError(getFragmentManager(), ex);
}
}.execute(FragmentMessages.this, args, "messages:swipe");
}
} }
private TupleMessageEx getMessage(RecyclerView.ViewHolder viewHolder) { private void swipeFolder(@NonNull TupleMessageEx message, @NonNull Long target) {
if (selectionTracker != null && selectionTracker.hasSelection()) Bundle args = new Bundle();
return null; args.putLong("id", message.id);
args.putBoolean("thread", viewType != AdapterMessage.ViewType.THREAD);
args.putLong("target", target);
int pos = viewHolder.getAdapterPosition(); new SimpleTask<ArrayList<MessageTarget>>() {
if (pos == RecyclerView.NO_POSITION) @Override
return null; protected ArrayList<MessageTarget> onExecute(Context context, Bundle args) {
long id = args.getLong("id");
boolean thread = args.getBoolean("thread");
long tid = args.getLong("target");
PagedList<TupleMessageEx> list = ((AdapterMessage) rvMessage.getAdapter()).getCurrentList(); ArrayList<MessageTarget> result = new ArrayList<>();
if (pos >= list.size())
return null;
TupleMessageEx message = list.get(pos); // Get target folder and hide message
if (message == null || message.uid == null) DB db = DB.getInstance(context);
return null; try {
db.beginTransaction();
if (iProperties.getValue("expanded", message.id)) EntityFolder target = db.folder().getFolder(tid);
return null; if (target == null)
throw new IllegalArgumentException(context.getString(R.string.title_no_folder));
if (EntityFolder.OUTBOX.equals(message.folderType)) EntityAccount account = db.account().getAccount(target.account);
return null; EntityMessage message = db.message().getMessage(id);
if (message != null) {
List<EntityMessage> messages = db.message().getMessageByThread(
message.account, message.thread, threading && thread ? null : id, message.folder);
for (EntityMessage threaded : messages) {
result.add(new MessageTarget(threaded, account, target));
db.message().setMessageUiHide(threaded.id, new Date().getTime());
// Prevent new message notification on undo
db.message().setMessageUiIgnored(threaded.id, true);
}
}
return message; db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return result;
}
@Override
protected void onExecuted(Bundle args, ArrayList<MessageTarget> result) {
moveUndo(result);
}
@Override
protected void onException(Bundle args, Throwable ex) {
if (ex instanceof IllegalArgumentException)
Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
else
Helper.unexpectedError(getFragmentManager(), ex);
}
}.execute(FragmentMessages.this, args, "messages:swipe");
} }
}; };

Loading…
Cancel
Save