diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index cd62226c42..fc58e7f069 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -250,6 +250,7 @@ public class FragmentCompose extends FragmentBase { private boolean autosave = false; private boolean busy = false; private boolean saved = false; + private int last_available = 0; // attachments private Uri photoURI = null; @@ -1576,6 +1577,8 @@ public class FragmentCompose extends FragmentBase { @Override public void onNothingSelected() { + setBusy(false); + Snackbar snackbar = Snackbar.make(view, R.string.title_no_key, Snackbar.LENGTH_LONG); final Intent intent = KeyChain.createInstallIntent(); if (intent.resolveActivity(getContext().getPackageManager()) != null) @@ -1689,6 +1692,8 @@ public class FragmentCompose extends FragmentBase { case REQUEST_OPENPGP: if (resultCode == RESULT_OK && data != null) onPgp(data); + else + setBusy(false); break; case REQUEST_CONTACT_GROUP: if (resultCode == RESULT_OK && data != null) @@ -3395,6 +3400,8 @@ public class FragmentCompose extends FragmentBase { File file = attachment.getFile(context); ics.renameTo(file); + last_available++; + ICalendar icalendar = Biweekly.parse(file).first(); VEvent event = icalendar.getEvents().get(0); Organizer organizer = event.getOrganizer(); @@ -3450,6 +3457,8 @@ public class FragmentCompose extends FragmentBase { File target = attachment.getFile(context); Helper.copy(source, target); + last_available++; + if (resize_reply && !"forward".equals(action)) resizeAttachment(context, attachment, REDUCED_IMAGE_SIZE); } else @@ -3507,7 +3516,10 @@ public class FragmentCompose extends FragmentBase { List attachments = db.attachment().getAttachments(data.draft.id); for (EntityAttachment attachment : attachments) - if (!attachment.available) + if (attachment.available) { + if (attachment.encryption == null) + last_available++; + } else EntityOperation.queue(context, data.draft, EntityOperation.ATTACHMENT, attachment.id); args.putBoolean("saved", true); @@ -3673,8 +3685,6 @@ public class FragmentCompose extends FragmentBase { } private SimpleTask actionLoader = new SimpleTask() { - int last_available = 0; - @Override protected void onPreExecute(Bundle args) { setBusy(true); @@ -3839,9 +3849,31 @@ public class FragmentCompose extends FragmentBase { extra = null; int available = 0; + List eparts = new ArrayList<>(); for (EntityAttachment attachment : attachments) if (attachment.available) - available++; + if (attachment.encryption == null) + available++; + else + eparts.add(attachment.encryption); + + if (EntityMessage.PGP_SIGNONLY.equals(draft.ui_encrypt)) { + if (!eparts.contains(EntityAttachment.PGP_KEY) || + !eparts.contains(EntityAttachment.PGP_SIGNATURE) || + !eparts.contains(EntityAttachment.PGP_CONTENT)) + dirty = true; + } else if (EntityMessage.PGP_SIGNENCRYPT.equals(draft.ui_encrypt)) { + if (!eparts.contains(EntityAttachment.PGP_KEY) || + !eparts.contains(EntityAttachment.PGP_MESSAGE)) + dirty = true; + } else if (EntityMessage.SMIME_SIGNONLY.equals(draft.ui_encrypt)) { + if (!eparts.contains(EntityAttachment.SMIME_SIGNATURE) || + !eparts.contains(EntityAttachment.SMIME_CONTENT)) + dirty = true; + } else if (EntityMessage.SMIME_SIGNENCRYPT.equals(draft.ui_encrypt)) { + if (!eparts.contains(EntityAttachment.SMIME_MESSAGE)) + dirty = true; + } Long ident = (identity == null ? null : identity.id); if (!Objects.equals(draft.identity, ident) || @@ -3873,11 +3905,6 @@ public class FragmentCompose extends FragmentBase { db.message().updateMessage(draft); } - if (extras.getBoolean("now")) { - draft.ui_snoozed = new Date().getTime(); - db.message().setMessageSnoozed(draft.id, draft.ui_snoozed); - } - Document doc = JsoupEx.parse(draft.getFile(context)); doc.select("div[fairemail=signature]").remove(); Elements ref = doc.select("div[fairemail=reference]"); @@ -3964,17 +3991,17 @@ public class FragmentCompose extends FragmentBase { boolean encrypted = extras.getBoolean("encrypted"); boolean shouldEncrypt = (draft.ui_encrypt != null && !EntityMessage.ENCRYPT_NONE.equals(draft.ui_encrypt)); + if (dirty && !encrypted && shouldEncrypt) { + args.putBoolean("needsEncryption", true); + return draft; + } + if (action == R.id.action_save || action == R.id.action_undo || action == R.id.action_redo || action == R.id.action_check) { - if (dirty || encrypted) - if (encrypted || !shouldEncrypt) - EntityOperation.queue(context, draft, EntityOperation.ADD); - else { - args.putBoolean("needsEncryption", true); - return draft; - } + if (dirty) + EntityOperation.queue(context, draft, EntityOperation.ADD); if (action == R.id.action_check) { // Check data @@ -4031,11 +4058,6 @@ public class FragmentCompose extends FragmentBase { } } else if (action == R.id.action_send) { - if (!encrypted && shouldEncrypt) { - args.putBoolean("needsEncryption", true); - return draft; - } - // Remove unused inline images List cids = new ArrayList<>(); if (draft.plain_only == null || !draft.plain_only) @@ -4077,15 +4099,13 @@ public class FragmentCompose extends FragmentBase { // Delay sending message int send_delayed = prefs.getInt("send_delayed", 0); if (draft.ui_snoozed == null && send_delayed != 0) { - draft.ui_snoozed = new Date().getTime() + send_delayed * 1000L; + if (extras.getBoolean("now")) + draft.ui_snoozed = null; + else + draft.ui_snoozed = new Date().getTime() + send_delayed * 1000L; db.message().setMessageSnoozed(draft.id, draft.ui_snoozed); } - if (draft.ui_snoozed != null && draft.ui_snoozed <= new Date().getTime()) { - draft.ui_snoozed = null; - db.message().setMessageSnoozed(draft.id, null); - } - // Send message if (draft.ui_snoozed == null) EntityOperation.queue(context, draft, EntityOperation.SEND); @@ -4239,14 +4259,14 @@ public class FragmentCompose extends FragmentBase { return Integer.toString(id); } } - - private void setBusy(boolean busy) { - FragmentCompose.this.busy = busy; - Helper.setViewsEnabled(view, !busy); - getActivity().invalidateOptionsMenu(); - } }; + private void setBusy(boolean busy) { + FragmentCompose.this.busy = busy; + Helper.setViewsEnabled(view, !busy); + getActivity().invalidateOptionsMenu(); + } + private static String unprefix(String subject, String prefix) { subject = subject.trim(); prefix = prefix.trim().toLowerCase();