Auto scroll up conversations

pull/156/head
M66B 6 years ago
parent 0fb29cdeaa
commit df8d10b254

@ -151,6 +151,18 @@ public interface DaoMessage {
", CASE WHEN folder.type = '" + EntityFolder.ARCHIVE + "' THEN 1 ELSE 0 END") ", CASE WHEN folder.type = '" + EntityFolder.ARCHIVE + "' THEN 1 ELSE 0 END")
DataSource.Factory<Integer, TupleMessageEx> pagedThread(long account, String thread, Long id, boolean debug); DataSource.Factory<Integer, TupleMessageEx> pagedThread(long account, String thread, Long id, boolean debug);
@Query("SELECT account.name AS accountName" +
", COUNT(message.id) AS count" +
", SUM(message.ui_seen) AS seen" +
" FROM message" +
" JOIN account ON account.id = message.account" +
" WHERE message.account = :account" +
" AND message.thread = :thread" +
" AND (:id IS NULL OR message.id = :id)" +
" AND NOT message.ui_hide" +
" GROUP BY account.id")
LiveData<TupleThreadStats> liveThreadStats(long account, String thread, Long id);
@Query("SELECT message.id FROM folder" + @Query("SELECT message.id FROM folder" +
" JOIN message ON message.folder = folder.id" + " JOIN message ON message.folder = folder.id" +
" WHERE CASE WHEN :folder IS NULL THEN folder.unified ELSE folder.id = :folder END" + " WHERE CASE WHEN :folder IS NULL THEN folder.unified ELSE folder.id = :folder END" +

@ -1772,10 +1772,22 @@ public class FragmentMessages extends FragmentBase {
break; break;
case THREAD: case THREAD:
db.account().liveAccount(account).observe(getViewLifecycleOwner(), new Observer<EntityAccount>() { db.message().liveThreadStats(account, thread, null).observe(getViewLifecycleOwner(), new Observer<TupleThreadStats>() {
Integer lastUnseen = null;
@Override @Override
public void onChanged(EntityAccount account) { public void onChanged(TupleThreadStats stats) {
setSubtitle(getString(R.string.title_folder_thread, account == null ? "" : account.name)); setSubtitle(getString(R.string.title_folder_thread,
stats == null || stats.accountName == null ? "" : stats.accountName));
if (stats != null && stats.count != null && stats.unseen != null) {
int unseen = stats.count - stats.unseen;
if (lastUnseen == null || lastUnseen != unseen) {
if (autoscroll && lastUnseen != null && lastUnseen < unseen)
loadMessages(true);
lastUnseen = unseen;
}
}
} }
}); });
db.message().liveHidden(account, thread).observe(getViewLifecycleOwner(), new Observer<List<Long>>() { db.message().liveHidden(account, thread).observe(getViewLifecycleOwner(), new Observer<List<Long>>() {

@ -0,0 +1,7 @@
package eu.faircode.email;
public class TupleThreadStats {
String accountName;
Integer count;
Integer unseen;
}
Loading…
Cancel
Save