From 50bd4cce6bf56c0e31afecfe0d69748acfe9cf19 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 28 Feb 2019 13:53:57 -0300 Subject: [PATCH 1/3] [android] Save list position in threaded conversations --- .../android/threaded/ThreadListActivity.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java index ed0ac5b94..5c517f8f4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java @@ -3,6 +3,7 @@ package org.briarproject.briar.android.threaded; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.Parcelable; import android.support.annotation.CallSuper; import android.support.annotation.StringRes; import android.support.annotation.UiThread; @@ -67,6 +68,8 @@ public abstract class ThreadListActivity getController(); @@ -76,7 +79,6 @@ public abstract class ThreadListActivity Date: Thu, 28 Feb 2019 14:02:49 -0300 Subject: [PATCH 2/3] [android] save list position of main blog feed --- .../briar/android/blog/FeedFragment.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java index 8d2adca73..8ab591c4a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java @@ -2,6 +2,7 @@ package org.briarproject.briar.android.blog; import android.content.Intent; import android.os.Bundle; +import android.os.Parcelable; import android.support.annotation.UiThread; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; @@ -54,7 +55,10 @@ public class FeedFragment extends BaseFragment implements private BlogPostAdapter adapter; private LinearLayoutManager layoutManager; private BriarRecyclerView list; - private Blog personalBlog = null; + @Nullable + private Blog personalBlog; + @Nullable + private Parcelable layoutManagerState; public static FeedFragment newInstance() { FeedFragment f = new FeedFragment(); @@ -91,6 +95,11 @@ public class FeedFragment extends BaseFragment implements list.setEmptyText(R.string.blogs_feed_empty_state); list.setEmptyAction(R.string.blogs_feed_empty_state_action); + if (savedInstanceState != null) { + layoutManagerState = + savedInstanceState.getParcelable("layoutManager"); + } + return v; } @@ -123,6 +132,15 @@ public class FeedFragment extends BaseFragment implements // TODO save list position in database/preferences? } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (layoutManager != null) { + layoutManagerState = layoutManager.onSaveInstanceState(); + outState.putParcelable("layoutManager", layoutManagerState); + } + } + private void loadPersonalBlog() { feedController.loadPersonalBlog( new UiResultExceptionHandler(this) { @@ -150,6 +168,12 @@ public class FeedFragment extends BaseFragment implements if (clear) adapter.setItems(posts); else adapter.addAll(posts); if (posts.isEmpty()) list.showData(); + if (layoutManagerState == null) { + list.scrollToPosition(0); // Scroll to the top + } else { + layoutManager.onRestoreInstanceState( + layoutManagerState); + } } else { LOG.info("Concurrent update, reloading"); loadBlogPosts(clear); From 2055961534211f6693e1c057252a7a1e372071c1 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 8 Mar 2019 16:33:15 -0300 Subject: [PATCH 3/3] [android] remember scroll position in individual blogs across configuration changes --- .../briar/android/blog/BlogFragment.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java index be9924584..64fd345e4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java @@ -3,12 +3,14 @@ package org.briarproject.briar.android.blog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.os.Parcelable; import android.support.annotation.UiThread; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView.LayoutManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -62,9 +64,12 @@ public class BlogFragment extends BaseFragment BlogController blogController; @Inject SharingController sharingController; + @Nullable + private Parcelable layoutManagerState; private GroupId groupId; private BlogPostAdapter adapter; + private LayoutManager layoutManager; private BriarRecyclerView list; private MenuItem writeButton, deleteButton; private boolean isMyBlog = false, canDeleteBlog = false; @@ -101,11 +106,17 @@ public class BlogFragment extends BaseFragment adapter = new BlogPostAdapter(requireNonNull(getActivity()), this, getFragmentManager()); list = v.findViewById(R.id.postList); - list.setLayoutManager(new LinearLayoutManager(getActivity())); + layoutManager = new LinearLayoutManager(getActivity()); + list.setLayoutManager(layoutManager); list.setAdapter(adapter); list.showProgressBar(); list.setEmptyText(getString(R.string.blogs_other_blog_empty_state)); + if (savedInstanceState != null) { + layoutManagerState = + savedInstanceState.getParcelable("layoutManager"); + } + return v; } @@ -126,6 +137,15 @@ public class BlogFragment extends BaseFragment list.stopPeriodicUpdate(); } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (layoutManager != null) { + layoutManagerState = layoutManager.onSaveInstanceState(); + outState.putParcelable("layoutManager", layoutManagerState); + } + } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.blogs_blog_actions, menu); @@ -238,7 +258,12 @@ public class BlogFragment extends BaseFragment list.showData(); } else { adapter.addAll(posts); - if (reload) list.scrollToPosition(0); + if (reload || layoutManagerState == null) { + list.scrollToPosition(0); + } else { + layoutManager.onRestoreInstanceState( + layoutManagerState); + } } }