diff --git a/app/src/main/java/eu/faircode/email/AdapterAccount.java b/app/src/main/java/eu/faircode/email/AdapterAccount.java index cd74815f81..77bffdf679 100644 --- a/app/src/main/java/eu/faircode/email/AdapterAccount.java +++ b/app/src/main/java/eu/faircode/email/AdapterAccount.java @@ -241,6 +241,8 @@ public class AdapterAccount extends RecyclerView.Adapter= Build.VERSION_CODES.O) { @@ -248,11 +250,11 @@ public class AdapterAccount extends RecyclerView.Adapter() { + @Override + protected Void onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + boolean primary = args.getBoolean("primary"); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + if (primary) + db.account().resetPrimary(); + db.account().setAccountPrimary(id, primary); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); + } + }.execute(context, owner, args, "account:primary"); + } + @TargetApi(Build.VERSION_CODES.O) private void onActionEditChannel() { Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) diff --git a/app/src/main/java/eu/faircode/email/AdapterIdentity.java b/app/src/main/java/eu/faircode/email/AdapterIdentity.java index fd9d6930a7..130aa329ac 100644 --- a/app/src/main/java/eu/faircode/email/AdapterIdentity.java +++ b/app/src/main/java/eu/faircode/email/AdapterIdentity.java @@ -187,11 +187,13 @@ public class AdapterIdentity extends RecyclerView.Adapter() { + @Override + protected Void onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + long account = args.getLong("account"); + boolean primary = args.getBoolean("primary"); + + DB db = DB.getInstance(context); + + try { + db.beginTransaction(); + + if (identity.primary) + db.identity().resetPrimary(account); + + db.identity().setIdentityPrimary(id, primary); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); + } + }.execute(context, owner, args, "identity:primary"); } private void onActionClearSignKey() { diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index 95887d50d7..bd4be958cd 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -122,6 +122,9 @@ public interface DaoAccount { @Query("UPDATE account SET synchronize = :synchronize WHERE id = :id") int setAccountSynchronize(long id, boolean synchronize); + @Query("UPDATE account SET `primary` = :primary WHERE id = :id") + int setAccountPrimary(long id, boolean primary); + @Query("UPDATE account SET thread = :thread WHERE id = :id") int setAccountThread(long id, Long thread); diff --git a/app/src/main/java/eu/faircode/email/DaoIdentity.java b/app/src/main/java/eu/faircode/email/DaoIdentity.java index 45db1d37d9..4ca9c63217 100644 --- a/app/src/main/java/eu/faircode/email/DaoIdentity.java +++ b/app/src/main/java/eu/faircode/email/DaoIdentity.java @@ -85,6 +85,9 @@ public interface DaoIdentity { @Query("UPDATE identity SET synchronize = :synchronize WHERE id = :id") int setIdentitySynchronize(long id, boolean synchronize); + @Query("UPDATE identity SET `primary` = :primary WHERE id = :id") + int setIdentityPrimary(long id, boolean primary); + @Query("UPDATE identity SET state = :state WHERE id = :id") int setIdentityState(long id, String state); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8949c9301e..f8415e9d4f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -561,6 +561,7 @@ Client certificate Realm Use local IP address instead of host name + Primary Primary (default account) Primary (default identity) Leave messages on server