Added reply quick action

pull/214/head
M66B 5 months ago
parent d2758133d5
commit 52b14849b2

@ -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<TupleMessageEx> 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" +

@ -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());

@ -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<Long> folders;
List<EntityAccount> 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()) {

@ -31,6 +31,19 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
<CheckBox
android:id="@+id/cbAnswer"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:drawableEnd="@drawable/twotone_reply_24_options"
android:drawablePadding="6dp"
android:text="@string/title_reply"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvHint" />
<CheckBox
android:id="@+id/cbSeen"
android:layout_width="0dp"
@ -42,7 +55,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvHint" />
app:layout_constraintTop_toBottomOf="@id/cbAnswer" />
<CheckBox
android:id="@+id/cbUnseen"

@ -616,6 +616,20 @@
android:layout_height="wrap_content"
android:paddingEnd="6dp">
<ImageButton
android:id="@+id/ibAnswer"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/title_reply"
android:padding="6dp"
android:scaleType="fitCenter"
android:tooltipText="@string/title_reply"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/twotone_reply_24_options"
app:tint="@color/action_foreground" />
<ImageButton
android:id="@+id/ibBatchSeen"
android:layout_width="48dp"
@ -625,7 +639,7 @@
android:padding="6dp"
android:scaleType="fitCenter"
android:tooltipText="@string/title_seen"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@id/ibAnswer"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/twotone_drafts_24"
app:tint="@color/action_foreground" />

Loading…
Cancel
Save