Check identity dirty

This commit is contained in:
M66B 2019-06-16 10:22:37 +02:00
parent f9b8afa988
commit 757bebd2e4
1 changed files with 98 additions and 13 deletions

View File

@ -433,7 +433,15 @@ public class FragmentIdentity extends FragmentBase {
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSave();
onSave(false);
}
});
addBackPressedListener(new ActivityBase.IBackPressedListener() {
@Override
public boolean onBackPressed() {
onSave(true);
return true;
}
});
@ -498,7 +506,7 @@ public class FragmentIdentity extends FragmentBase {
}.execute(FragmentIdentity.this, args, "identity:config");
}
private void onSave() {
private void onSave(boolean should) {
EntityAccount account = (EntityAccount) spAccount.getSelectedItem();
String name = etName.getText().toString();
@ -535,7 +543,9 @@ public class FragmentIdentity extends FragmentBase {
args.putBoolean("synchronize", cbSynchronize.isChecked());
args.putBoolean("primary", cbPrimary.isChecked());
new SimpleTask<Void>() {
args.putBoolean("should", should);
new SimpleTask<Boolean>() {
@Override
protected void onPreExecute(Bundle args) {
saving = true;
@ -554,7 +564,7 @@ public class FragmentIdentity extends FragmentBase {
}
@Override
protected Void onExecute(Context context, Bundle args) throws Throwable {
protected Boolean onExecute(Context context, Bundle args) throws Throwable {
long id = args.getLong("id");
String name = args.getString("name");
String email = args.getString("email");
@ -584,19 +594,21 @@ public class FragmentIdentity extends FragmentBase {
boolean read_receipt = args.getBoolean("read_receipt");
boolean store_sent = args.getBoolean("store_sent");
if (TextUtils.isEmpty(name))
boolean should = args.getBoolean("should");
if (!should && TextUtils.isEmpty(name))
throw new IllegalArgumentException(context.getString(R.string.title_no_name));
if (TextUtils.isEmpty(email))
if (!should && TextUtils.isEmpty(email))
throw new IllegalArgumentException(context.getString(R.string.title_no_email));
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches())
if (!should && !Patterns.EMAIL_ADDRESS.matcher(email).matches())
throw new IllegalArgumentException(context.getString(R.string.title_email_invalid));
if (TextUtils.isEmpty(host))
if (!should && TextUtils.isEmpty(host))
throw new IllegalArgumentException(context.getString(R.string.title_no_host));
if (TextUtils.isEmpty(port))
port = (starttls ? "587" : "465");
if (TextUtils.isEmpty(user))
if (!should && TextUtils.isEmpty(user))
throw new IllegalArgumentException(context.getString(R.string.title_no_user));
if (synchronize && TextUtils.isEmpty(password) && !insecure)
if (!should && synchronize && TextUtils.isEmpty(password) && !insecure)
throw new IllegalArgumentException(context.getString(R.string.title_no_password));
if (TextUtils.isEmpty(display))
@ -619,6 +631,62 @@ public class FragmentIdentity extends FragmentBase {
DB db = DB.getInstance(context);
EntityIdentity identity = db.identity().getIdentity(id);
if (should) {
if (identity == null)
return !TextUtils.isEmpty(host) && !TextUtils.isEmpty(user);
if (!Objects.equals(identity.name, name))
return true;
if (!Objects.equals(identity.email, email))
return true;
if (!Objects.equals(identity.account, account))
return true;
if (!Objects.equals(identity.display, display))
return true;
if (!Objects.equals(identity.color, color))
return true;
if (!Objects.equals(identity.signature, signature))
return true;
if (!Objects.equals(identity.auth_type, auth_type))
return true;
if (!Objects.equals(identity.host, host))
return true;
if (!Objects.equals(identity.starttls, starttls))
return true;
if (!Objects.equals(identity.insecure, insecure))
return true;
if (!Objects.equals(identity.port, Integer.parseInt(port)))
return true;
if (!Objects.equals(identity.user, user))
return true;
if (!Objects.equals(identity.password, password))
return true;
if (!Objects.equals(identity.realm, realm))
return true;
if (!Objects.equals(identity.use_ip, use_ip))
return true;
if (!Objects.equals(identity.synchronize, synchronize))
return true;
if (!Objects.equals(identity.primary, (identity.synchronize && primary)))
return true;
if (!Objects.equals(identity.sender_extra, sender_extra))
return true;
if (!Objects.equals(identity.replyto, replyto))
return true;
if (!Objects.equals(identity.bcc, bcc))
return true;
if (!Objects.equals(identity.encrypt, encrypt))
return true;
if (!Objects.equals(identity.delivery_receipt, delivery_receipt))
return true;
if (!Objects.equals(identity.read_receipt, read_receipt))
return true;
if (!Objects.equals(identity.store_sent, store_sent))
return true;
return false;
}
String identityRealm = (identity == null ? null : identity.realm);
boolean check = (synchronize && (identity == null ||
@ -721,12 +789,29 @@ public class FragmentIdentity extends FragmentBase {
db.endTransaction();
}
return null;
return false;
}
@Override
protected void onExecuted(Bundle args, Void data) {
getFragmentManager().popBackStack();
protected void onExecuted(Bundle args, Boolean dirty) {
if (dirty)
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
.setMessage(R.string.title_ask_save)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onSave(false);
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
getFragmentManager().popBackStack();
}
})
.show();
else
getFragmentManager().popBackStack();
}
@Override