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.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<ForumPostItem>
}
}
@Override
protected void markRead(MessageId id) throws DbException {
forumManager.setReadFlag(getGroupId(), id, true);
}
@Override
public void loadSharingContacts(
ResultExceptionHandler<Collection<ContactId>, DbException> handler) {

View File

@@ -172,6 +172,17 @@ class ForumViewModel extends ThreadListViewModel<ForumPostItem> {
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 {

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.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<GroupMessageItem>
}
}
@Override
protected void markRead(MessageId id) throws DbException {
privateGroupManager.setReadFlag(getGroupId(), id, true);
}
@Override
public void loadSharingContacts(
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() {
runOnDbThread(() -> {
try {

View File

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

View File

@@ -20,10 +20,6 @@ public interface ThreadListController<I extends ThreadItem>
void loadSharingContacts(
ResultExceptionHandler<Collection<ContactId>, DbException> handler);
void markItemRead(I item);
void markItemsRead(Collection<I> items);
interface ThreadListListener<I> {
@UiThread
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.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<I extends ThreadItem>
extends DbControllerImpl
implements ThreadListController<I>, 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<I extends ThreadItem>
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() {
checkGroupId();
return groupId;

View File

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

View File

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