aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/ConversationFragment.java')
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index 332b62b7b..7bd20f3e5 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -239,8 +239,9 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
- // TODO Auto-generated method stub
-
+ if (AbsListView.OnScrollListener.SCROLL_STATE_IDLE == scrollState) {
+ fireReadEvent();
+ }
}
@Override
@@ -1825,9 +1826,33 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
getActivity().invalidateOptionsMenu();
});
super.onResume();
+ binding.messagesView.post(this::fireReadEvent);
+ }
+
+ private void fireReadEvent() {
if (activity != null && this.conversation != null) {
- activity.onConversationRead(this.conversation);
+ String uuid = getLastVisibleMessageUuid();
+ if (uuid != null) {
+ activity.onConversationRead(this.conversation, uuid);
+ }
+ }
+ }
+
+ private String getLastVisibleMessageUuid() {
+ if (binding == null) {
+ return null;
}
+ int pos = binding.messagesView.getLastVisiblePosition();
+ if (pos >= 0) {
+ Message message = (Message) binding.messagesView.getItemAtPosition(pos);
+ if (message != null) {
+ while (message.next() != null && message.next().wasMergedIntoPrevious()) {
+ message = message.next();
+ }
+ return message.getUuid();
+ }
+ }
+ return null;
}
private void showErrorMessage(final Message message) {
@@ -2167,7 +2192,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
}
- activity.onConversationRead(this.conversation);
+ this.binding.messagesView.post(this::fireReadEvent);
//TODO if we only do this when this fragment is running on main it won't *bing* in tablet layout which might be unnecessary since we can *see* it
activity.xmppConnectionService.getNotificationService().setOpenConversation(this.conversation);
@@ -2434,7 +2459,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
this.messageListAdapter.notifyDataSetChanged();
updateChatMsgHint();
if (notifyConversationRead && activity != null) {
- activity.onConversationRead(this.conversation);
+ binding.messagesView.post(this::fireReadEvent);
}
updateSendButton();
updateEditablity();