mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Move marking thread list items read to ViewModel
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -224,6 +224,8 @@ public abstract class ThreadListViewModel<I extends ThreadItem>
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract void markItemRead(I item);
|
||||
|
||||
@Nullable
|
||||
MessageId getAndResetRestoredMessageId() {
|
||||
return storedMessageId.getAndSet(null);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user