From 52b14849b24f57b8ac74c5c09899b8e09c662672 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 13 Feb 2024 15:41:57 +0100 Subject: [PATCH] Added reply quick action --- .../java/eu/faircode/email/DaoMessage.java | 9 ++++++-- .../email/FragmentDialogQuickActions.java | 3 +++ .../eu/faircode/email/FragmentMessages.java | 21 +++++++++++++++++++ .../main/res/layout/dialog_quick_actions.xml | 15 ++++++++++++- app/src/main/res/layout/fragment_messages.xml | 16 +++++++++++++- 5 files changed, 60 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 798f97c9bb..d815392dd4 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -507,7 +507,7 @@ public interface DaoMessage { " AND NOT (message.ui_seen OR message.ui_ignored OR message.ui_hide)") int countNotifying(long folder); - @Query("SELECT message.*" + + String FETCH_MESSAGE = "SELECT message.*" + ", account.pop AS accountProtocol, account.name AS accountName, account.category AS accountCategory, identity.color AS accountColor" + ", account.notify AS accountNotify, account.summary AS accountSummary, account.leave_deleted AS accountLeaveDeleted, account.auto_seen AS accountAutoSeen" + ", folder.name AS folderName, folder.color AS folderColor, folder.display AS folderDisplay, folder.type AS folderType, NULL AS folderInheritedType, folder.unified AS folderUnified, folder.read_only AS folderReadOnly" + @@ -528,9 +528,14 @@ public interface DaoMessage { " JOIN account_view AS account ON account.id = message.account" + " LEFT JOIN identity_view AS identity ON identity.id = message.identity" + " JOIN folder_view AS folder ON folder.id = message.folder" + - " WHERE message.id = :id") + " WHERE message.id = :id"; + + @Query(FETCH_MESSAGE) LiveData liveMessage(long id); + @Query(FETCH_MESSAGE) + TupleMessageEx getMessageEx(long id); + @Query("SELECT message.keywords AS selected, folder.keywords AS available" + " FROM message" + " JOIN folder ON folder.id = message.folder" + diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java b/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java index bde336f3b6..fd967519c7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java @@ -46,6 +46,7 @@ public class FragmentDialogQuickActions extends FragmentDialogBase { final View dview = LayoutInflater.from(context).inflate(R.layout.dialog_quick_actions, null); final TextView tvHint = dview.findViewById(R.id.tvHint); + final CheckBox cbAnswer = dview.findViewById(R.id.cbAnswer); final CheckBox cbSeen = dview.findViewById(R.id.cbSeen); final CheckBox cbUnseen = dview.findViewById(R.id.cbUnseen); final CheckBox cbSnooze = dview.findViewById(R.id.cbSnooze); @@ -64,6 +65,7 @@ public class FragmentDialogQuickActions extends FragmentDialogBase { final CheckBox cbClear = dview.findViewById(R.id.cbClear); tvHint.setText(getString(R.string.title_quick_actions_hint, MAX_QUICK_ACTIONS)); + cbAnswer.setChecked(prefs.getBoolean("more_answer", false)); cbSeen.setChecked(prefs.getBoolean("more_seen", true)); cbUnseen.setChecked(prefs.getBoolean("more_unseen", false)); cbSnooze.setChecked(prefs.getBoolean("more_snooze", false)); @@ -87,6 +89,7 @@ public class FragmentDialogQuickActions extends FragmentDialogBase { @Override public void onClick(DialogInterface dialog, int which) { SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean("more_answer", cbAnswer.isChecked()); editor.putBoolean("more_seen", cbSeen.isChecked()); editor.putBoolean("more_unseen", cbUnseen.isChecked()); editor.putBoolean("more_snooze", cbSnooze.isChecked()); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 9549bdbd8a..ad39703f74 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -287,6 +287,7 @@ public class FragmentMessages extends FragmentBase private FloatingActionButton fabMore; private TextView tvSelectedCount; private CardView cardMore; + private ImageButton ibAnswer; private ImageButton ibBatchSeen; private ImageButton ibBatchUnseen; private ImageButton ibBatchSnooze; @@ -610,6 +611,7 @@ public class FragmentMessages extends FragmentBase fabMore = view.findViewById(R.id.fabMore); tvSelectedCount = view.findViewById(R.id.tvSelectedCount); cardMore = view.findViewById(R.id.cardMore); + ibAnswer = view.findViewById(R.id.ibAnswer); ibBatchSeen = view.findViewById(R.id.ibBatchSeen); ibBatchUnseen = view.findViewById(R.id.ibBatchUnseen); ibBatchSnooze = view.findViewById(R.id.ibBatchSnooze); @@ -1592,6 +1594,16 @@ public class FragmentMessages extends FragmentBase ((ViewGroup.MarginLayoutParams) cardMore.getLayoutParams()).setMarginEnd(dp71); } + ibAnswer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MoreResult result = (MoreResult) cardMore.getTag(); + if (result == null || result.single == null || !result.single.content) + return; + onReply(result.single, null, v); + } + }); + ibBatchSeen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -6876,6 +6888,7 @@ public class FragmentMessages extends FragmentBase @Override protected void onExecuted(Bundle args, MoreResult result) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean more_answer = prefs.getBoolean("more_answer", false); boolean more_seen = prefs.getBoolean("more_seen", true); boolean more_unseen = prefs.getBoolean("more_unseen", false); boolean more_snooze = prefs.getBoolean("more_snooze", false); @@ -6970,9 +6983,13 @@ public class FragmentMessages extends FragmentBase if (seen) count++; + boolean answer = (more_answer && count < FragmentDialogQuickActions.MAX_QUICK_ACTIONS && + result.single != null && result.single.content); + ibBatchFlag.setImageResource(unflag ? R.drawable.twotone_star_border_24 : R.drawable.twotone_star_24); ibInbox.setImageResource(inJunk ? R.drawable.twotone_report_off_24 : R.drawable.twotone_inbox_24); + ibAnswer.setVisibility(answer ? View.VISIBLE : View.GONE); ibBatchSeen.setVisibility(seen ? View.VISIBLE : View.GONE); ibBatchUnseen.setVisibility(unseen ? View.VISIBLE : View.GONE); ibBatchSnooze.setVisibility(snooze ? View.VISIBLE : View.GONE); @@ -10897,6 +10914,7 @@ public class FragmentMessages extends FragmentBase List folders; List imapAccounts; EntityAccount copyto; + TupleMessageEx single; boolean canInbox() { if (read_only) @@ -11032,6 +11050,9 @@ public class FragmentMessages extends FragmentBase else result.hidden = true; } + + if (ids.length == 1) + result.single = db.message().getMessageEx(id); } for (EntityAccount account : accounts.values()) { diff --git a/app/src/main/res/layout/dialog_quick_actions.xml b/app/src/main/res/layout/dialog_quick_actions.xml index 97c5923567..2af7cda2bd 100644 --- a/app/src/main/res/layout/dialog_quick_actions.xml +++ b/app/src/main/res/layout/dialog_quick_actions.xml @@ -31,6 +31,19 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvTitle" /> + + + app:layout_constraintTop_toBottomOf="@id/cbAnswer" /> + +