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 87aca3fb1..af9254714 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 @@ -26,7 +26,6 @@ import org.briarproject.briar.android.threaded.ThreadListViewModel; import org.briarproject.briar.api.android.AndroidNotificationManager; import org.briarproject.briar.api.client.MessageTracker; import org.briarproject.briar.api.client.MessageTracker.GroupCount; -import org.briarproject.briar.api.client.PostHeader; import org.briarproject.briar.api.forum.Forum; import org.briarproject.briar.api.forum.ForumInvitationResponse; import org.briarproject.briar.api.forum.ForumManager; @@ -151,11 +150,10 @@ class ForumViewModel extends ThreadListViewModel { }, this::setItems); } - private ForumPostItem loadItem(Transaction txn, PostHeader header) + private ForumPostItem loadItem(Transaction txn, ForumPostHeader header) throws DbException { - if (!(header instanceof ForumPostHeader)) throw new AssertionError(); String text = forumManager.getPostText(txn, header.getId()); - return new ForumPostItem((ForumPostHeader) header, text); + return new ForumPostItem(header, text); } @Override 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 3e3adfeba..06100d636 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 @@ -39,6 +39,7 @@ import androidx.annotation.UiThread; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import static java.util.Objects.requireNonNull; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; @@ -47,8 +48,7 @@ import static org.briarproject.bramble.util.LogUtils.logException; @MethodsNotNullByDefault @ParametersNotNullByDefault public abstract class ThreadListViewModel - extends DbViewModel - implements EventListener { + extends DbViewModel implements EventListener { private static final Logger LOG = getLogger(ThreadListViewModel.class.getName()); @@ -73,6 +73,9 @@ public abstract class ThreadListViewModel protected volatile GroupId groupId; @Nullable private MessageId replyId; + /** + * Stored list position. Needs to be loaded and set before the list itself. + */ private final AtomicReference storedMessageId = new AtomicReference<>(); @@ -118,6 +121,7 @@ public abstract class ThreadListViewModel @CallSuper protected void performInitialLoad() { + // load stored MessageId (last list position) before the list itself loadStoredMessageId(); loadItems(); loadSharingContacts(); @@ -179,7 +183,7 @@ public abstract class ThreadListViewModel } else { messageTree.clear(); // not null, because hasError() is false - messageTree.add(items.getResultOrNull()); + messageTree.add(requireNonNull(items.getResultOrNull())); LiveResult> result = new LiveResult<>(messageTree.depthFirstOrder()); this.items.setValue(result); @@ -223,6 +227,10 @@ public abstract class ThreadListViewModel protected abstract void markItemRead(I item); + /** + * Returns the {@link MessageId} of the item that was at the top of the + * list last time or null if there has been nothing stored, yet. + */ @Nullable MessageId getAndResetRestoredMessageId() { return storedMessageId.getAndSet(null);