diff --git a/app/src/main/java/eu/faircode/email/ActivityMain.java b/app/src/main/java/eu/faircode/email/ActivityMain.java index 7d26a05cd4..271982f14f 100644 --- a/app/src/main/java/eu/faircode/email/ActivityMain.java +++ b/app/src/main/java/eu/faircode/email/ActivityMain.java @@ -48,9 +48,9 @@ public class ActivityMain extends AppCompatActivity implements FragmentManager.O if (prefs.getBoolean("eula", false)) { super.onCreate(savedInstanceState); - DB.getInstance(this).account().liveAccounts(true).observe(this, new Observer>() { + DB.getInstance(this).account().liveAccounts(true).observe(this, new Observer>() { @Override - public void onChanged(@Nullable List accounts) { + public void onChanged(@Nullable List accounts) { if (accounts == null || accounts.size() == 0) startActivity(new Intent(ActivityMain.this, ActivitySetup.class)); else { diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 6763d7b9f4..b75ed2303e 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -65,9 +65,9 @@ public class ActivitySetup extends ActivityBilling implements FragmentManager.On fragmentTransaction.commit(); } - DB.getInstance(this).account().liveAccounts(true).observe(this, new Observer>() { + DB.getInstance(this).account().liveAccounts(true).observe(this, new Observer>() { @Override - public void onChanged(List accounts) { + public void onChanged(List accounts) { hasAccount = (accounts != null && accounts.size() > 0); } }); diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 3c2550c423..863e26e679 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -104,6 +104,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; public class ActivityView extends ActivityBilling implements FragmentManager.OnBackStackChangedListener { private boolean unified; + private boolean threading; private View view; private DrawerLayout drawerLayout; @@ -145,6 +146,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); unified = prefs.getBoolean("unified", true); + threading = prefs.getBoolean("threading", true); view = LayoutInflater.from(this).inflate(R.layout.activity_view, null); setContentView(view); @@ -248,7 +250,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB getSupportFragmentManager().addOnBackStackChangedListener(this); - DB.getInstance(this).account().liveAccounts(true).observe(this, new Observer>() { + DB.getInstance(this).account().liveAccounts(true, threading).observe(this, new Observer>() { @Override public void onChanged(@Nullable List accounts) { if (accounts == null) diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index 67c2839711..060c004806 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -41,18 +41,22 @@ public interface DaoAccount { @Query("SELECT * FROM account") LiveData> liveAccounts(); + @Query("SELECT * FROM account WHERE synchronize = :synchronize") + LiveData> liveAccounts(boolean synchronize); + @Query("SELECT *" + - ", (SELECT COUNT(message.id)" + + ", (SELECT COUNT(DISTINCT CASE WHEN :threading THEN message.thread ELSE message.id END)" + " FROM message" + " JOIN folder ON folder.id = message.folder" + " WHERE message.account = account.id" + " AND folder.type <> '" + EntityFolder.ARCHIVE + "'" + " AND folder.type <> '" + EntityFolder.TRASH + "'" + " AND folder.type <> '" + EntityFolder.DRAFTS + "'" + + " AND folder.type <> '" + EntityFolder.OUTBOX + "'" + " AND NOT ui_seen) AS unseen" + " FROM account" + " WHERE synchronize = :synchronize") - LiveData> liveAccounts(boolean synchronize); + LiveData> liveAccounts(boolean synchronize, boolean threading); @Query("SELECT * FROM account WHERE id = :id") EntityAccount getAccount(long id); diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 949efc8c7d..64a918e149 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1366,11 +1366,11 @@ public class FragmentCompose extends FragmentEx { final DB db = DB.getInstance(getContext()); - db.account().liveAccounts(true).observe(getViewLifecycleOwner(), new Observer>() { + db.account().liveAccounts(true).observe(getViewLifecycleOwner(), new Observer>() { private LiveData> liveIdentities = null; @Override - public void onChanged(List accounts) { + public void onChanged(List accounts) { if (accounts == null) accounts = new ArrayList<>(); @@ -1780,11 +1780,11 @@ public class FragmentCompose extends FragmentEx { EntityAccount account; } - public class AccountAdapter extends ArrayAdapter { + public class AccountAdapter extends ArrayAdapter { private Context context; - private List accounts; + private List accounts; - AccountAdapter(@NonNull Context context, List accounts) { + AccountAdapter(@NonNull Context context, List accounts) { super(context, 0, accounts); this.context = context; this.accounts = accounts; diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 335523aa38..71810ff081 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -354,13 +354,13 @@ public class FragmentSetup extends FragmentEx { final DB db = DB.getInstance(getContext()); - db.account().liveAccounts(true).observe(getViewLifecycleOwner(), new Observer>() { + db.account().liveAccounts(true).observe(getViewLifecycleOwner(), new Observer>() { private boolean done = false; private LiveData livePrimaryDrafts = null; private LiveData livePrimaryArchive = null; @Override - public void onChanged(@Nullable List accounts) { + public void onChanged(@Nullable List accounts) { done = (accounts != null && accounts.size() > 0); btnIdentity.setEnabled(done);