From c51f0e99e76660028998545f6483600211859f2a Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 24 May 2020 09:51:42 +0200 Subject: [PATCH] Updated encryption on changing identity --- .../eu/faircode/email/FragmentCompose.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 4e2f600ba6..3dda49f4bb 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -4648,6 +4648,8 @@ public class FragmentCompose extends FragmentBase { grpSignature.setVisibility(signature == null ? View.GONE : View.VISIBLE); setBodyPadding(); + + updateEncryption(); } @Override @@ -4659,6 +4661,64 @@ public class FragmentCompose extends FragmentBase { grpSignature.setVisibility(View.GONE); setBodyPadding(); + + updateEncryption(); + } + + private void updateEncryption() { + EntityIdentity identity = (EntityIdentity) spIdentity.getSelectedItem(); + if (identity == null) + return; + + Bundle args = new Bundle(); + args.putLong("id", working); + args.putLong("identity", identity.id); + + new SimpleTask() { + @Override + protected Integer onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + long iid = args.getLong("identity"); + + DB db = DB.getInstance(context); + EntityMessage draft = db.message().getMessage(id); + if (draft == null || + draft.ui_encrypt == null || EntityMessage.ENCRYPT_NONE.equals(draft.ui_encrypt)) + return null; + + EntityIdentity identity = db.identity().getIdentity(iid); + if (identity == null) + return null; + + int encrypt = draft.ui_encrypt; + if (identity.encrypt == 0) { + if (EntityMessage.SMIME_SIGNONLY.equals(draft.ui_encrypt)) + encrypt = EntityMessage.PGP_SIGNONLY; + else if (EntityMessage.SMIME_SIGNENCRYPT.equals(draft.ui_encrypt)) + encrypt = EntityMessage.PGP_SIGNENCRYPT; + } else { + if (EntityMessage.PGP_SIGNONLY.equals(draft.ui_encrypt)) + encrypt = EntityMessage.SMIME_SIGNONLY; + else if (EntityMessage.PGP_SIGNENCRYPT.equals(draft.ui_encrypt)) + encrypt = EntityMessage.SMIME_SIGNENCRYPT; + } + + if (draft.ui_encrypt != encrypt) + db.message().setMessageUiEncrypt(draft.id, encrypt); + + return encrypt; + } + + @Override + protected void onExecuted(Bundle args, Integer encrypt) { + FragmentCompose.this.encrypt = encrypt; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(FragmentCompose.this, args, "compose:identity"); } };