Avoid race conditions when updating the UI from events.

This commit is contained in:
akwizgran
2016-10-17 10:54:00 +01:00
parent 50a70f7649
commit 2140a290e4
14 changed files with 239 additions and 93 deletions

View File

@@ -32,6 +32,7 @@ import org.briarproject.api.identity.Author;
import org.briarproject.api.sync.GroupId;
import java.util.Collection;
import java.util.logging.Logger;
import javax.inject.Inject;
@@ -51,6 +52,7 @@ public class BlogFragment extends BaseFragment implements
OnBlogPostAddedListener {
public final static String TAG = BlogFragment.class.getName();
private static final Logger LOG = Logger.getLogger(TAG);
@Inject
BlogController blogController;
@@ -207,6 +209,7 @@ public class BlogFragment extends BaseFragment implements
listener) {
@Override
public void onResultUi(BlogPostItem post) {
adapter.incrementRevision();
adapter.add(post);
if (local) {
list.scrollToPosition(0);
@@ -228,16 +231,23 @@ public class BlogFragment extends BaseFragment implements
}
void loadBlogPosts(final boolean reload) {
final int revision = adapter.getRevision();
blogController.loadBlogPosts(
new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>(
listener) {
@Override
public void onResultUi(Collection<BlogPostItem> posts) {
if (posts.isEmpty()) {
list.showData();
if (revision == adapter.getRevision()) {
adapter.incrementRevision();
if (posts.isEmpty()) {
list.showData();
} else {
adapter.addAll(posts);
if (reload) list.scrollToPosition(0);
}
} else {
adapter.addAll(posts);
if (reload) list.scrollToPosition(0);
LOG.info("Concurrent update, reloading");
loadBlogPosts(reload);
}
}