From 8f96cff1043ea57ac429e9044790e6bd18c2a7f4 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Sun, 26 Feb 2017 10:49:48 -0800 Subject: [PATCH] Don't let outgoing messages trigger last seen divider Closes #6306 // FREEBIE --- .../securesms/ConversationAdapter.java | 5 +++-- .../securesms/ConversationFragment.java | 15 +++++++++------ .../securesms/database/MmsDatabase.java | 1 + .../securesms/database/SmsDatabase.java | 1 + 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/org/thoughtcrime/securesms/ConversationAdapter.java index 97818c71fa..1cfa02ee76 100644 --- a/src/org/thoughtcrime/securesms/ConversationAdapter.java +++ b/src/org/thoughtcrime/securesms/ConversationAdapter.java @@ -289,7 +289,7 @@ public class ConversationAdapter Cursor cursor = getCursorAtPositionOrThrow(i); MessageRecord messageRecord = getMessageRecord(cursor); - if (messageRecord.getDateReceived() <= lastSeen) { + if (messageRecord.isOutgoing() || messageRecord.getDateReceived() <= lastSeen) { return i; } } @@ -345,7 +345,8 @@ public class ConversationAdapter Cursor cursor = getCursorAtPositionOrThrow(position); MessageRecord messageRecord = getMessageRecord(cursor); - return messageRecord.getDateReceived(); + if (messageRecord.isOutgoing()) return 0; + else return messageRecord.getDateReceived(); } @Override diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index cf7c50adcb..707932702e 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -412,6 +412,7 @@ public class ConversationFragment extends Fragment @Override public void onLoadFinished(Loader cursorLoader, Cursor cursor) { + Log.w(TAG, "onLoadFinished"); ConversationLoader loader = (ConversationLoader)cursorLoader; if (list.getAdapter() != null) { @@ -427,10 +428,16 @@ public class ConversationFragment extends Fragment getListAdapter().changeCursor(cursor); + int lastSeenPosition = getListAdapter().findLastSeenPosition(lastSeen); + if (firstLoad) { - scrollToLastSeenPosition(lastSeen); + scrollToLastSeenPosition(lastSeenPosition); firstLoad = false; } + + if (lastSeenPosition <= 0) { + setLastSeen(0); + } } } @@ -441,9 +448,7 @@ public class ConversationFragment extends Fragment } } - private void scrollToLastSeenPosition(long lastSeen) { - final int lastSeenPosition = getListAdapter().findLastSeenPosition(lastSeen); - + private void scrollToLastSeenPosition(final int lastSeenPosition) { if (lastSeenPosition > 0) { list.post(new Runnable() { @Override @@ -451,8 +456,6 @@ public class ConversationFragment extends Fragment ((LinearLayoutManager)list.getLayoutManager()).scrollToPositionWithOffset(lastSeenPosition, list.getHeight()); } }); - } else { - setLastSeen(0); } } diff --git a/src/org/thoughtcrime/securesms/database/MmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsDatabase.java index bcf7884523..c93fccc666 100644 --- a/src/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -911,6 +911,7 @@ public class MmsDatabase extends MessagingDatabase { long messageId = insertMediaMessage(masterSecret, addresses, message.getBody(), message.getAttachments(), contentValues); + DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId); jobManager.add(new TrimThreadJob(context, threadId)); return messageId; diff --git a/src/org/thoughtcrime/securesms/database/SmsDatabase.java b/src/org/thoughtcrime/securesms/database/SmsDatabase.java index 1095bebec1..fca2b66ddc 100644 --- a/src/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -614,6 +614,7 @@ public class SmsDatabase extends MessagingDatabase { long messageId = db.insert(TABLE_NAME, ADDRESS, contentValues); DatabaseFactory.getThreadDatabase(context).update(threadId, true); + DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId); notifyConversationListeners(threadId); jobManager.add(new TrimThreadJob(context, threadId));