mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-19 06:09:55 +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.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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user