From 8372bb01b2a62eb950d489a699d40e1a9a26556b Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 8 Jan 2021 11:25:56 -0300 Subject: [PATCH] Move marking thread list items read to ViewModel --- .../android/forum/ForumControllerImpl.java | 6 ---- .../briar/android/forum/ForumViewModel.java | 11 ++++++ .../conversation/GroupControllerImpl.java | 6 ---- .../conversation/GroupViewModel.java | 11 ++++++ .../android/threaded/ThreadListActivity.java | 2 +- .../threaded/ThreadListController.java | 4 --- .../threaded/ThreadListControllerImpl.java | 36 ------------------- .../android/threaded/ThreadListViewModel.java | 2 ++ .../threaded/ThreadScrollListener.java | 8 ++--- 9 files changed, 29 insertions(+), 57 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java index 823c7ade0..4bfab3d74 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumControllerImpl.java @@ -10,7 +10,6 @@ import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.system.Clock; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.android.threaded.ThreadListControllerImpl; @@ -82,11 +81,6 @@ class ForumControllerImpl extends ThreadListControllerImpl } } - @Override - protected void markRead(MessageId id) throws DbException { - forumManager.setReadFlag(getGroupId(), id, true); - } - @Override public void loadSharingContacts( ResultExceptionHandler, DbException> handler) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java index 086aaf00b..0c1f21aff 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumViewModel.java @@ -172,6 +172,17 @@ class ForumViewModel extends ThreadListViewModel { return forumManager.getPostText(txn, header.getId()); } + @Override + protected void markItemRead(ForumPostItem item) { + runOnDbThread(() -> { + try { + forumManager.setReadFlag(groupId, item.getId(), true); + } catch (DbException e) { + logException(LOG, WARNING, e); + } + }); + } + void deleteForum() { runOnDbThread(() -> { try { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java index e778cc01e..275ee3586 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupControllerImpl.java @@ -10,7 +10,6 @@ import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; -import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.system.Clock; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.android.threaded.ThreadListControllerImpl; @@ -82,11 +81,6 @@ class GroupControllerImpl extends ThreadListControllerImpl } } - @Override - protected void markRead(MessageId id) throws DbException { - privateGroupManager.setReadFlag(getGroupId(), id, true); - } - @Override public void loadSharingContacts( ResultExceptionHandler, DbException> handler) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java index dc02d7390..e79e862d7 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupViewModel.java @@ -210,6 +210,17 @@ class GroupViewModel extends ThreadListViewModel { }); } + @Override + protected void markItemRead(GroupMessageItem item) { + runOnDbThread(() -> { + try { + privateGroupManager.setReadFlag(groupId, item.getId(), true); + } catch (DbException e) { + logException(LOG, WARNING, e); + } + }); + } + void deletePrivateGroup() { runOnDbThread(() -> { try { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java index b3c6d34d1..516eec20c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java @@ -92,7 +92,7 @@ public abstract class ThreadListActivity(adapter, getController(), + scrollListener = new ThreadScrollListener<>(adapter, getViewModel(), upButton, downButton); list.getRecyclerView().addOnScrollListener(scrollListener); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java index ff0513af1..211182d3c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListController.java @@ -20,10 +20,6 @@ public interface ThreadListController void loadSharingContacts( ResultExceptionHandler, DbException> handler); - void markItemRead(I item); - - void markItemsRead(Collection items); - interface ThreadListListener { @UiThread void onInvitationAccepted(ContactId c); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java index 01d015d17..b96eed677 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListControllerImpl.java @@ -4,7 +4,6 @@ import android.app.Activity; import org.briarproject.bramble.api.crypto.CryptoExecutor; import org.briarproject.bramble.api.db.DatabaseExecutor; -import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.event.EventListener; @@ -13,32 +12,20 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.system.Clock; import org.briarproject.briar.android.controller.DbControllerImpl; import org.briarproject.briar.api.android.AndroidNotificationManager; -import java.util.Collection; -import java.util.Collections; import java.util.concurrent.Executor; -import java.util.logging.Logger; import androidx.annotation.CallSuper; -import static java.util.logging.Level.WARNING; -import static org.briarproject.bramble.util.LogUtils.logDuration; -import static org.briarproject.bramble.util.LogUtils.logException; -import static org.briarproject.bramble.util.LogUtils.now; - @MethodsNotNullByDefault @ParametersNotNullByDefault public abstract class ThreadListControllerImpl extends DbControllerImpl implements ThreadListController, EventListener { - private static final Logger LOG = - Logger.getLogger(ThreadListControllerImpl.class.getName()); - private volatile GroupId groupId; private final EventBus eventBus; @@ -95,29 +82,6 @@ public abstract class ThreadListControllerImpl public void eventOccurred(Event e) { } - @Override - public void markItemRead(I item) { - markItemsRead(Collections.singletonList(item)); - } - - @Override - public void markItemsRead(Collection items) { - runOnDbThread(() -> { - try { - long start = now(); - for (I i : items) { - markRead(i.getId()); - } - logDuration(LOG, "Marking read", start); - } catch (DbException e) { - logException(LOG, WARNING, e); - } - }); - } - - @DatabaseExecutor - protected abstract void markRead(MessageId id) throws DbException; - protected GroupId getGroupId() { checkGroupId(); return groupId; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListViewModel.java index acd47e421..ea7aac199 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListViewModel.java @@ -224,6 +224,8 @@ public abstract class ThreadListViewModel }); } + protected abstract void markItemRead(I item); + @Nullable MessageId getAndResetRestoredMessageId() { return storedMessageId.getAndSet(null); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadScrollListener.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadScrollListener.java index dca100459..e0f1ec327 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadScrollListener.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadScrollListener.java @@ -20,15 +20,15 @@ class ThreadScrollListener private static final Logger LOG = getLogger(ThreadScrollListener.class.getName()); - private final ThreadListController controller; + private final ThreadListViewModel viewModel; private final UnreadMessageButton upButton, downButton; ThreadScrollListener(ThreadItemAdapter adapter, - ThreadListController controller, + ThreadListViewModel viewModel, UnreadMessageButton upButton, UnreadMessageButton downButton) { super(adapter); - this.controller = controller; + this.viewModel = viewModel; this.upButton = upButton; this.downButton = downButton; } @@ -44,7 +44,7 @@ class ThreadScrollListener protected void onItemVisible(I item) { if (!item.isRead()) { item.setRead(true); - controller.markItemRead(item); + viewModel.markItemRead(item); } }