From 92de67076c98ce7fd0261912fef0e0a9f832737f Mon Sep 17 00:00:00 2001 From: Saket Narayan Date: Sun, 10 Jun 2018 20:55:59 +0530 Subject: [PATCH] PrivateMessageThread: [FIX] first message doesn't get marked as read --- .../me/saket/dank/data/InboxRepository.java | 11 +++++++++++ .../SubmissionCommentTreeUiConstructor.java | 1 + .../PrivateMessageThreadActivity.java | 19 ++++++++++++------- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/me/saket/dank/data/InboxRepository.java b/app/src/main/java/me/saket/dank/data/InboxRepository.java index ea52a5043..d6303566b 100644 --- a/app/src/main/java/me/saket/dank/data/InboxRepository.java +++ b/app/src/main/java/me/saket/dank/data/InboxRepository.java @@ -3,6 +3,7 @@ import static java.util.Collections.unmodifiableList; import android.content.ContentValues; +import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.CheckResult; @@ -25,6 +26,7 @@ import io.reactivex.Observable; import io.reactivex.Single; import io.reactivex.functions.Consumer; +import me.saket.dank.notifs.MessageNotifActionsJobService; import me.saket.dank.reddit.Reddit; import me.saket.dank.reply.ReplyRepository; import me.saket.dank.ui.submission.ParentThread; @@ -256,18 +258,27 @@ private Completable removeAllMessages(InboxFolder folder) { // ======== READ STATUS ======== // + /** + * Access via {@link MessageNotifActionsJobService#markAsRead(Context, MoshiAdapter, Message...)}. + */ @CheckResult public Completable setRead(Identifiable[] messages, boolean read) { return reddit.get().loggedInUser().setMessagesRead(read, messages) .andThen(removeMessages(InboxFolder.UNREAD, messages)); } + /** + * Access via {@link MessageNotifActionsJobService#markAsRead(Context, MoshiAdapter, Message...)}. + */ @CheckResult public Completable setRead(Identifiable message, boolean read) { return reddit.get().loggedInUser().setMessagesRead(read, message) .andThen(removeMessages(InboxFolder.UNREAD, message)); } + /** + * Access via {@link MessageNotifActionsJobService#markAllAsRead(Context)}. + */ @CheckResult public Completable setAllRead() { return reddit.get().loggedInUser().setAllMessagesRead() diff --git a/app/src/main/java/me/saket/dank/ui/submission/SubmissionCommentTreeUiConstructor.java b/app/src/main/java/me/saket/dank/ui/submission/SubmissionCommentTreeUiConstructor.java index 0bee98038..f3acd1392 100644 --- a/app/src/main/java/me/saket/dank/ui/submission/SubmissionCommentTreeUiConstructor.java +++ b/app/src/main/java/me/saket/dank/ui/submission/SubmissionCommentTreeUiConstructor.java @@ -400,6 +400,7 @@ private List constructComments( if (!isSubmission && isReplyActive && !isCommentNodeCollapsed) { String loggedInUserName = userSessionRepository.get().loggedInUserName(); String parentCommentAuthor = nextNode.getSubject().getAuthor(); + //noinspection ConstantConditions flattenComments.add(inlineReplyUiModel(context, nextNode.getSubject(), parentCommentAuthor, loggedInUserName, nextNode.getDepth())); } diff --git a/app/src/main/java/me/saket/dank/ui/user/messages/PrivateMessageThreadActivity.java b/app/src/main/java/me/saket/dank/ui/user/messages/PrivateMessageThreadActivity.java index 4104e000c..edece66bc 100644 --- a/app/src/main/java/me/saket/dank/ui/user/messages/PrivateMessageThreadActivity.java +++ b/app/src/main/java/me/saket/dank/ui/user/messages/PrivateMessageThreadActivity.java @@ -44,6 +44,7 @@ import io.reactivex.BackpressureStrategy; import io.reactivex.Completable; import io.reactivex.Observable; +import me.saket.dank.BuildConfig; import me.saket.dank.R; import me.saket.dank.data.ErrorResolver; import me.saket.dank.data.InboxRepository; @@ -58,6 +59,7 @@ import me.saket.dank.ui.submission.DraftStore; import me.saket.dank.ui.submission.ParentThread; import me.saket.dank.ui.user.UserSessionRepository; +import me.saket.dank.utils.Arrays2; import me.saket.dank.utils.DankLinkMovementMethod; import me.saket.dank.utils.Dates; import me.saket.dank.utils.JrawUtils2; @@ -295,15 +297,18 @@ protected void onPostCreate(@Nullable Bundle savedInstanceState) { // Mark PM as read. messageThread - .map(thread -> thread.getReplies()) - .filter(replies -> !replies.isEmpty()) .take(1) - .map(replies -> { - Identifiable[] replyIds = new Identifiable[replies.size()]; - for (int i = 0; i < replyIds.length; i++) { - replyIds[i] = replies.get(i); + .map(thread -> { + List replies = JrawUtils2.messageReplies(thread); + List messagesToMarkAsRead = new ArrayList<>(1 + replies.size()); + messagesToMarkAsRead.add(thread); + messagesToMarkAsRead.addAll(replies); + return Arrays2.toArray(messagesToMarkAsRead, Identifiable.class); + }) + .doOnNext(ids -> { + if (BuildConfig.DEBUG) { + Timber.i("Marking %s messages as read", ids.length); } - return replyIds; }) .flatMapCompletable(replyIds -> inboxRepository.get().setRead(replyIds, true)) .subscribeOn(io())