Sometimes when not looking every minute on my phone, I got a lot of messages in different chats. While opening the chat window, the view is always at the bottom, so I had to scroll to the first unread message. It would be great if these messages would be marked as unread, maybe with strong text.
If the user is writing new messages while i'm reading in scrolled view, my chat view always jumps to the newest message at the bottom. This should be changed.
How would this work when you are using more than one client? Is there an xep (standard) on this?
I don't think there is XEP for this but this is crucial because you don't want users to ignore other people messages. and users don't always check xmpp client. they only check their clients when there is an indication that there is a new message.
a way for this to work is that on all of your clients, when you get a new message from a user , you highlight the conversation, and keep it highlighted until the user opens up the conversation. even if the message is opened on one client, you keep it high lightened on all other clients. This is better than users ignoring other people's messages and this will frustrate alot of users.
a good case would be if you open the message on a client and you reply to it, the conversation on all other clients will get updated with your reply right? so you can use that to clear the highligth on other clients.
so when a new message comes, all clients highlight the new message. If you reply to the message on one client, all other clients get cleared when they get your message.
Please this is very important
@andersruneson ChatMarkers can be used for this for example. Also replies from other instances can be - and are being used.
For conversations I'am already doing much of what @msolima is describing. Conversations are marked with bold text when they are unread.
Now @kriztan wants to extends this to individual messages. How would you imagine the UX for this to look like. You touch on a conversation which is marked unread (bold text) - now the chat window opens. At what point in time would like the unread messages to become read? Imagine the last two messages are bold. At what time do we turn them normal again? With read/unread Conversations thats easy. Because we have the event of touching/clicking on them. But with messages?
what about a simple separator line? That could be positioned after the last read message when leaving the view. I used it with irssi for irc and psi does it with muc/chats, too.
A line is a good idea I think.
+1 for the line. Opening a conversation should scroll directly to that line (also displaying the last message before, to give some context). Position of the line could be determined by XEP-0333 (Chat Markers).
At what time do we turn them normal again?
A rules above the first new message would be ideal. It would dissapear/reset when:
At what time do we turn them normal again?
It would need some heuristic to guess whether the user has read the unread messages. I go with @hobarrera's suggestions, but want to add that in my opinion the best time to move the marker is when switching _to_ a conversation, not when switching away from it for any reason.
In addition I would suggest that the marker should not be moved too early. E.g. if the screen just turns off for a few seconds, because the user was interrupted, he still might want to pickup the conversation from the original marker. Such delay should also be applied when the user opens a conversation: You jump to the first unread message (+context, s.a.) and after a few seconds you assume he has read the message.
I would also suggest not to move the marker while the users looks at the conversation, but just take a note that it was read already. That way the user can scroll around and still find the marker, and it does not disappear unexpectedly.
I disagree with @hobarrera's suggestion. I might turn my screen off to put it into my pocket for a bit while catching up on unread messages.
Instead we should simply focus on which message a user wants to be displayed, and I propose a very simple, but good heuristic for this:
The behaviour of the conversation in focus (=currently displayed on screen) should be as follows:
a) When the message window is scrolled all the way down to the last message, new messages automatically move the conversation window "down", i.e. the new messages are immediately displayed. This is exactly the behaviour that Conversations has for _all_ messages right now.
b) However: when the message window is scrolled up by the user such that the last message is completely off screen, do _not_ scroll the message window down. Instead display (see point 5 above) the snackbar showing the unread message count again, such that even when a user has scrolled upwards to maybe reread some older messages, they will get notified about new messages. This should be implemented in such a way that when e.g. the screen is turned off or the whole app loses focus and then we come back, the conversation will still be at the point we manually scrolled to. This can be seen as an exception to case 3) above: we only jump to the oldest unread message when the conversation is opened, if we are not in "manual scroll mode".
I think this behaviour would absolutely capture most user's intuition on when the message window should scroll down (and when it shouldn't), display the messages to the user that are required to read (e.g. oldest unread instead of newest unread), and overall give us a much better UX than right now. I'd gladly hear some comments and suggestions!
PS: Implementation-wise, we'd probably not give each message a "read" or "unread" property but just remember the amount of unread messages for each conversation. That would suffices for the intended behaviour.
I disagree with @hobarrera's suggestion. I might turn my screen off to put it into my pocket for a bit while catching up on unread messages.
This does not explain why you disagree with my suggestion, since it doesn't show any new advantages/disadvanteages around implementing it.
When a conversation is opened, display the oldest "unread" message, in such a way that the lower-most message on screen is this oldest unread message. This automatically marks this message as read. (Exception: part b) below)
That'd be an excelent addition!
I don't understand what you meant by "snackbar": what exactly are you refering to?
I don't understand what you meant by "snackbar": what exactly are you refering to?
Also sometimes called a pill bar. This thing:

@SamWhited Ah, thanks, I was unfamiliar.
I guess it would make sense to something like that is messages are received after having scrolled up (and not actually count already dispayed messages).
@hobarrera: Well, I think my proposal simply does things very differently than what you proposed, no? For instance, I would never mark messages as read just because of closing the conversation/app losing focus/replying. I think marking anything as read should simply depend on how far down you have scrolled so far.
It's over one year ago that I suggested this improvement, but nothing happens in the meantime. I think this unread marker is a very important feature to improve UX.
I think unread messages should be marked in the database. Why that? The answer is simple. User without using the foreground service will lose their notifications on swiping conversations away or android closes it itself. So they see no notifications although there are new messages.
I think this should be a good way to mark these messages:
I hope we could see this feature in one of the next releases.
I absolutely love the UI proposal by @Natanji! This is exactly what I would want to have and would expect.
I've thought about this feature and came to the conclusion, that this could be a reasonable solution:
Any ideas?
If, while reading one chat I didn't open for a long time, a message in another, more important chat comes in and I want to respond, I still lose the state what was unread in the current chat, no? And that's annoying. My Twitter client doesn't assume that I've read my whole timeline just because I click on a tweet to see the responses or change the app.
I still think that the proposal by @Natanji is superior, because it honors these use cases.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
As I see it, this is still not implemented - and a feature that is available in other messaging clients like WhatsApp, Telegram, etc. - it's pretty much industry-standard to show some difference between read and unread messages, for instance with a divider.
My proposal found some support in this issue, too. No arguments against it were raised. So this would still be a worthwhile improvement.
So I'm commenting here so this issue doesn't get mistakenly auto-closed.
Most helpful comment
I disagree with @hobarrera's suggestion. I might turn my screen off to put it into my pocket for a bit while catching up on unread messages.
Instead we should simply focus on which message a user wants to be displayed, and I propose a very simple, but good heuristic for this:
The behaviour of the conversation in focus (=currently displayed on screen) should be as follows:
a) When the message window is scrolled all the way down to the last message, new messages automatically move the conversation window "down", i.e. the new messages are immediately displayed. This is exactly the behaviour that Conversations has for _all_ messages right now.
b) However: when the message window is scrolled up by the user such that the last message is completely off screen, do _not_ scroll the message window down. Instead display (see point 5 above) the snackbar showing the unread message count again, such that even when a user has scrolled upwards to maybe reread some older messages, they will get notified about new messages. This should be implemented in such a way that when e.g. the screen is turned off or the whole app loses focus and then we come back, the conversation will still be at the point we manually scrolled to. This can be seen as an exception to case 3) above: we only jump to the oldest unread message when the conversation is opened, if we are not in "manual scroll mode".
I think this behaviour would absolutely capture most user's intuition on when the message window should scroll down (and when it shouldn't), display the messages to the user that are required to read (e.g. oldest unread instead of newest unread), and overall give us a much better UX than right now. I'd gladly hear some comments and suggestions!
PS: Implementation-wise, we'd probably not give each message a "read" or "unread" property but just remember the amount of unread messages for each conversation. That would suffices for the intended behaviour.