Move marking thread list items read to ViewModel

This commit is contained in:
Torsten Grote
2021-01-08 11:25:56 -03:00
parent 766718e75c
commit 8372bb01b2
9 changed files with 29 additions and 57 deletions

View File

@@ -10,7 +10,6 @@ import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
import org.briarproject.briar.android.threaded.ThreadListControllerImpl; import org.briarproject.briar.android.threaded.ThreadListControllerImpl;
@@ -82,11 +81,6 @@ class ForumControllerImpl extends ThreadListControllerImpl<ForumPostItem>
} }
} }
@Override
protected void markRead(MessageId id) throws DbException {
forumManager.setReadFlag(getGroupId(), id, true);
}
@Override @Override
public void loadSharingContacts( public void loadSharingContacts(
ResultExceptionHandler<Collection<ContactId>, DbException> handler) { ResultExceptionHandler<Collection<ContactId>, DbException> handler) {

View File

@@ -172,6 +172,17 @@ class ForumViewModel extends ThreadListViewModel<ForumPostItem> {
return forumManager.getPostText(txn, header.getId()); 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() { void deleteForum() {
runOnDbThread(() -> { runOnDbThread(() -> {
try { try {

View File

@@ -10,7 +10,6 @@ import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import org.briarproject.briar.android.controller.handler.ResultExceptionHandler; import org.briarproject.briar.android.controller.handler.ResultExceptionHandler;
import org.briarproject.briar.android.threaded.ThreadListControllerImpl; import org.briarproject.briar.android.threaded.ThreadListControllerImpl;
@@ -82,11 +81,6 @@ class GroupControllerImpl extends ThreadListControllerImpl<GroupMessageItem>
} }
} }
@Override
protected void markRead(MessageId id) throws DbException {
privateGroupManager.setReadFlag(getGroupId(), id, true);
}
@Override @Override
public void loadSharingContacts( public void loadSharingContacts(
ResultExceptionHandler<Collection<ContactId>, DbException> handler) { ResultExceptionHandler<Collection<ContactId>, DbException> handler) {

View File

@@ -210,6 +210,17 @@ class GroupViewModel extends ThreadListViewModel<GroupMessageItem> {
}); });
} }
@Override
protected void markItemRead(GroupMessageItem item) {
runOnDbThread(() -> {
try {
privateGroupManager.setReadFlag(groupId, item.getId(), true);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
}
void deletePrivateGroup() { void deletePrivateGroup() {
runOnDbThread(() -> { runOnDbThread(() -> {
try { try {

View File

@@ -92,7 +92,7 @@ public abstract class ThreadListActivity<I extends ThreadItem, A extends ThreadI
layoutManager = new LinearLayoutManager(this); layoutManager = new LinearLayoutManager(this);
list.setLayoutManager(layoutManager); list.setLayoutManager(layoutManager);
list.setAdapter(adapter); list.setAdapter(adapter);
scrollListener = new ThreadScrollListener<>(adapter, getController(), scrollListener = new ThreadScrollListener<>(adapter, getViewModel(),
upButton, downButton); upButton, downButton);
list.getRecyclerView().addOnScrollListener(scrollListener); list.getRecyclerView().addOnScrollListener(scrollListener);

View File

@@ -20,10 +20,6 @@ public interface ThreadListController<I extends ThreadItem>
void loadSharingContacts( void loadSharingContacts(
ResultExceptionHandler<Collection<ContactId>, DbException> handler); ResultExceptionHandler<Collection<ContactId>, DbException> handler);
void markItemRead(I item);
void markItemsRead(Collection<I> items);
interface ThreadListListener<I> { interface ThreadListListener<I> {
@UiThread @UiThread
void onInvitationAccepted(ContactId c); void onInvitationAccepted(ContactId c);

View File

@@ -4,7 +4,6 @@ import android.app.Activity;
import org.briarproject.bramble.api.crypto.CryptoExecutor; import org.briarproject.bramble.api.crypto.CryptoExecutor;
import org.briarproject.bramble.api.db.DatabaseExecutor; 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.Event;
import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.event.EventListener; 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.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import org.briarproject.briar.android.controller.DbControllerImpl; import org.briarproject.briar.android.controller.DbControllerImpl;
import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.android.AndroidNotificationManager;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.logging.Logger;
import androidx.annotation.CallSuper; 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 @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault
public abstract class ThreadListControllerImpl<I extends ThreadItem> public abstract class ThreadListControllerImpl<I extends ThreadItem>
extends DbControllerImpl extends DbControllerImpl
implements ThreadListController<I>, EventListener { implements ThreadListController<I>, EventListener {
private static final Logger LOG =
Logger.getLogger(ThreadListControllerImpl.class.getName());
private volatile GroupId groupId; private volatile GroupId groupId;
private final EventBus eventBus; private final EventBus eventBus;
@@ -95,29 +82,6 @@ public abstract class ThreadListControllerImpl<I extends ThreadItem>
public void eventOccurred(Event e) { public void eventOccurred(Event e) {
} }
@Override
public void markItemRead(I item) {
markItemsRead(Collections.singletonList(item));
}
@Override
public void markItemsRead(Collection<I> 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() { protected GroupId getGroupId() {
checkGroupId(); checkGroupId();
return groupId; return groupId;

View File

@@ -224,6 +224,8 @@ public abstract class ThreadListViewModel<I extends ThreadItem>
}); });
} }
protected abstract void markItemRead(I item);
@Nullable @Nullable
MessageId getAndResetRestoredMessageId() { MessageId getAndResetRestoredMessageId() {
return storedMessageId.getAndSet(null); return storedMessageId.getAndSet(null);

View File

@@ -20,15 +20,15 @@ class ThreadScrollListener<I extends ThreadItem>
private static final Logger LOG = private static final Logger LOG =
getLogger(ThreadScrollListener.class.getName()); getLogger(ThreadScrollListener.class.getName());
private final ThreadListController<I> controller; private final ThreadListViewModel<I> viewModel;
private final UnreadMessageButton upButton, downButton; private final UnreadMessageButton upButton, downButton;
ThreadScrollListener(ThreadItemAdapter<I> adapter, ThreadScrollListener(ThreadItemAdapter<I> adapter,
ThreadListController<I> controller, ThreadListViewModel<I> viewModel,
UnreadMessageButton upButton, UnreadMessageButton upButton,
UnreadMessageButton downButton) { UnreadMessageButton downButton) {
super(adapter); super(adapter);
this.controller = controller; this.viewModel = viewModel;
this.upButton = upButton; this.upButton = upButton;
this.downButton = downButton; this.downButton = downButton;
} }
@@ -44,7 +44,7 @@ class ThreadScrollListener<I extends ThreadItem>
protected void onItemVisible(I item) { protected void onItemVisible(I item) {
if (!item.isRead()) { if (!item.isRead()) {
item.setRead(true); item.setRead(true);
controller.markItemRead(item); viewModel.markItemRead(item);
} }
} }