diff --git a/app/src/main/java/eu/faircode/email/ConnectionHelper.java b/app/src/main/java/eu/faircode/email/ConnectionHelper.java index f83728cab6..fb4022a948 100644 --- a/app/src/main/java/eu/faircode/email/ConnectionHelper.java +++ b/app/src/main/java/eu/faircode/email/ConnectionHelper.java @@ -346,13 +346,7 @@ public class ConnectionHelper { return null; } - static boolean isSameDomain(String host1, String host2) { - String domain1 = getDomain(host1); - String domain2 = getDomain(host2); - return Objects.equals(domain1, domain2); - } - - private static String getDomain(String host) { + static String getDomain(String host) { if (host != null) { String[] h = host.split("\\."); if (h.length >= 2) diff --git a/app/src/main/java/eu/faircode/email/DaoIdentity.java b/app/src/main/java/eu/faircode/email/DaoIdentity.java index 0c98b9e429..92a2fd2155 100644 --- a/app/src/main/java/eu/faircode/email/DaoIdentity.java +++ b/app/src/main/java/eu/faircode/email/DaoIdentity.java @@ -82,6 +82,12 @@ public interface DaoIdentity { @Query("UPDATE identity SET password = :password WHERE id = :id") int setIdentityPassword(long id, String password); + @Query("UPDATE identity SET password = :password" + + " WHERE account = :account" + + " AND user = :user" + + " AND host LIKE :domain") + int setIdentityPassword(long account, String user, String password, String domain); + @Query("UPDATE identity SET last_connected = :last_connected WHERE id = :id") int setIdentityConnected(long id, long last_connected); diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index e2a46fb4c1..d19e5eb7c7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -918,14 +918,11 @@ public class FragmentAccount extends FragmentBase { db.beginTransaction(); if (account != null && !account.password.equals(password)) { - List identities = db.identity().getIdentities(account.id); - for (EntityIdentity identity : identities) - if (identity.password.equals(account.password) && - ConnectionHelper.isSameDomain(identity.host, account.host)) { - Log.i("Changing identity password host=" + identity.host); - identity.password = password; - db.identity().updateIdentity(identity); - } + int count = db.identity().setIdentityPassword( + account.id, + account.user, password, + "%." + ConnectionHelper.getDomain(account.host)); + Log.i("Updated passwords=" + count); } boolean update = (account != null); diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 877ac2ab8d..d625e7ca2e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -707,6 +707,14 @@ public class FragmentIdentity extends FragmentBase { try { db.beginTransaction(); + if (identity != null && !identity.password.equals(password)) { + int count = db.identity().setIdentityPassword( + identity.account, + identity.user, password, + identity.host); + Log.i("Updated passwords=" + count); + } + boolean update = (identity != null); if (identity == null) identity = new EntityIdentity(); diff --git a/app/src/main/java/eu/faircode/email/FragmentPop.java b/app/src/main/java/eu/faircode/email/FragmentPop.java index 08bffa8e49..1f422d46a4 100644 --- a/app/src/main/java/eu/faircode/email/FragmentPop.java +++ b/app/src/main/java/eu/faircode/email/FragmentPop.java @@ -49,7 +49,6 @@ import com.google.android.material.snackbar.Snackbar; import com.google.android.material.textfield.TextInputLayout; import java.util.Date; -import java.util.List; import static android.app.Activity.RESULT_OK; import static com.google.android.material.textfield.TextInputLayout.END_ICON_NONE; @@ -281,14 +280,11 @@ public class FragmentPop extends FragmentBase { db.beginTransaction(); if (account != null && !account.password.equals(password)) { - List identities = db.identity().getIdentities(account.id); - for (EntityIdentity identity : identities) - if (identity.password.equals(account.password) && - ConnectionHelper.isSameDomain(identity.host, account.host)) { - Log.i("Changing identity password host=" + identity.host); - identity.password = password; - db.identity().updateIdentity(identity); - } + int count = db.identity().setIdentityPassword( + account.id, + account.user, password, + "%." + ConnectionHelper.getDomain(account.host)); + Log.i("Updated passwords=" + count); } boolean update = (account != null);