diff options
author | Christian Schneppe <christian@pix-art.de> | 2017-11-22 21:00:33 +0100 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2017-11-22 21:49:45 +0100 |
commit | 72df864d41e91d184dd20178d48e7b68df13e725 (patch) | |
tree | 0aae3068c35f175549d70232adf72e24ea393561 /src/main/java/de/pixart/messenger/ui/ConversationFragment.java | |
parent | acdb88839648405e0498d7774bcdc9f422ebc5c2 (diff) |
send and show read markers in private, non-anonymous groups
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/ConversationFragment.java')
-rw-r--r-- | src/main/java/de/pixart/messenger/ui/ConversationFragment.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java index 7cfaa5b02..75d599e3f 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java @@ -48,8 +48,10 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -63,6 +65,7 @@ import de.pixart.messenger.entities.DownloadableFile; import de.pixart.messenger.entities.Message; import de.pixart.messenger.entities.MucOptions; import de.pixart.messenger.entities.Presence; +import de.pixart.messenger.entities.ReadByMarker; import de.pixart.messenger.entities.Transferable; import de.pixart.messenger.entities.TransferablePlaceholder; import de.pixart.messenger.http.HttpDownloadConnection; @@ -1368,6 +1371,54 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa if (showLoadMoreMessages(conversation)) { this.messageList.add(0, Message.createLoadMoreMessage(conversation)); } + if (conversation.getMode() == Conversation.MODE_MULTI) { + final MucOptions mucOptions = conversation.getMucOptions(); + final List<MucOptions.User> allUsers = mucOptions.getUsers(); + final Set<ReadByMarker> addedMarkers = new HashSet<>(); + ChatState state = ChatState.COMPOSING; + List<MucOptions.User> users = conversation.getMucOptions().getUsersWithChatState(state, 5); + if (users.size() == 0) { + state = ChatState.PAUSED; + users = conversation.getMucOptions().getUsersWithChatState(state, 5); + } + int markersAdded = 0; + if (mucOptions.membersOnly() && mucOptions.nonanonymous()) { + //addedMarkers.addAll(ReadByMarker.from(users)); + for (int i = this.messageList.size() - 1; i >= 0; --i) { + final Set<ReadByMarker> markersForMessage = messageList.get(i).getReadByMarkers(); + final List<MucOptions.User> shownMarkers = new ArrayList<>(); + for (ReadByMarker marker : markersForMessage) { + if (!ReadByMarker.contains(marker, addedMarkers)) { + addedMarkers.add(marker); //may be put outside this condition. set should do dedup anyway + MucOptions.User user = mucOptions.findUser(marker); + if (user != null && !users.contains(user)) { + shownMarkers.add(user); + } + } + } + final ReadByMarker markerForSender = ReadByMarker.from(messageList.get(i)); + final Message statusMessage; + if (shownMarkers.size() > 1) { + statusMessage = Message.createStatusMessage(conversation, getString(R.string.contacts_have_read_up_to_this_point, UIHelper.concatNames(shownMarkers))); + statusMessage.setCounterparts(shownMarkers); + } else if (shownMarkers.size() == 1) { + statusMessage = Message.createStatusMessage(conversation, getString(R.string.contact_has_read_up_to_this_point, UIHelper.getDisplayName(shownMarkers.get(0)))); + statusMessage.setCounterpart(shownMarkers.get(0).getFullJid()); + statusMessage.setTrueCounterpart(shownMarkers.get(0).getRealJid()); + } else { + statusMessage = null; + } + if (statusMessage != null) { + ++markersAdded; + this.messageList.add(i + 1, statusMessage); + } + addedMarkers.add(markerForSender); + if (ReadByMarker.allUsersRepresented(allUsers, addedMarkers)) { + break; + } + } + } + } } } |