diff --git a/app/src/main/java/eu/faircode/email/DaoIdentity.java b/app/src/main/java/eu/faircode/email/DaoIdentity.java index 06db743d5d..e1278d1e5f 100644 --- a/app/src/main/java/eu/faircode/email/DaoIdentity.java +++ b/app/src/main/java/eu/faircode/email/DaoIdentity.java @@ -135,6 +135,9 @@ public interface DaoIdentity { @Query("UPDATE identity SET encrypt = :encrypt WHERE id = :id AND NOT (encrypt IS :encrypt)") int setIdentityEncrypt(long id, int encrypt); + @Query("UPDATE identity SET sign_default = 0, encrypt_default = 0 WHERE encrypt = 0") + int resetIdentityPGP(); + @Query("UPDATE identity SET sign_key = :sign_key WHERE id = :id AND NOT (sign_key IS :sign_key)") int setIdentitySignKey(long id, Long sign_key); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 7968696490..65a5a098e8 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1975,23 +1975,6 @@ public class FragmentCompose extends FragmentBase { private void onMenuEncrypt() { EntityIdentity identity = (EntityIdentity) spIdentity.getSelectedItem(); if (identity == null || identity.encrypt == 0) { - final Context context = getContext(); - if (!Helper.isOpenKeychainInstalled(context)) { - new AlertDialog.Builder(context) - .setIcon(R.drawable.twotone_lock_24) - .setTitle(R.string.title_no_openpgp) - .setMessage(R.string.title_no_openpgp_remark) - .setPositiveButton(R.string.title_info, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Helper.viewFAQ(context, 12); - } - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); - return; - } - if (EntityMessage.ENCRYPT_NONE.equals(encrypt) || encrypt == null) encrypt = EntityMessage.PGP_SIGNENCRYPT; else if (EntityMessage.PGP_SIGNENCRYPT.equals(encrypt)) @@ -2007,6 +1990,51 @@ public class FragmentCompose extends FragmentBase { encrypt = EntityMessage.ENCRYPT_NONE; } + final Context context = getContext(); + if ((EntityMessage.PGP_SIGNONLY.equals(encrypt) || + EntityMessage.PGP_SIGNENCRYPT.equals(encrypt)) + && !Helper.isOpenKeychainInstalled(context)) { + encrypt = EntityMessage.ENCRYPT_NONE; + + new AlertDialog.Builder(context) + .setIcon(R.drawable.twotone_lock_24) + .setTitle(R.string.title_no_openpgp) + .setMessage(R.string.title_no_openpgp_remark) + .setPositiveButton(R.string.title_info, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Helper.viewFAQ(context, 12); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .setNeutralButton(R.string.title_reset, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) throws Throwable { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + prefs.edit() + .remove("sign_default") + .remove("encrypt_default") + .apply(); + + DB db = DB.getInstance(context); + db.identity().resetIdentityPGP(); + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(FragmentCompose.this, new Bundle(), "encrypt: fix"); + } + }) + .show(); + } + invalidateOptionsMenu(); Bundle args = new Bundle();