diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java index be7b9b9ba..ae8da2f67 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogActivity.java @@ -6,9 +6,11 @@ import android.os.Bundle; 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.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; +import org.briarproject.briar.android.fragment.BaseFragment; import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener; import org.briarproject.briar.android.sharing.BlogSharingStatusActivity; @@ -19,6 +21,7 @@ import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProvider; import static java.util.Objects.requireNonNull; +import static org.briarproject.briar.android.blog.BlogPostFragment.POST_ID; @MethodsNotNullByDefault @ParametersNotNullByDefault @@ -45,7 +48,10 @@ public class BlogActivity extends BriarActivity Intent i = getIntent(); GroupId groupId = new GroupId(requireNonNull(i.getByteArrayExtra(GROUP_ID))); - viewModel.setGroupId(groupId); + // Get post info from intent + @Nullable byte[] postId = i.getByteArrayExtra(POST_ID); + + viewModel.setGroupId(groupId, postId == null); setContentView(R.layout.activity_fragment_container_toolbar); Toolbar toolbar = setUpCustomToolbar(false); @@ -66,7 +72,14 @@ public class BlogActivity extends BriarActivity ); if (state == null) { - showInitialFragment(BlogFragment.newInstance(groupId)); + if (postId == null) { + showInitialFragment(BlogFragment.newInstance(groupId)); + } else { + MessageId messageId = new MessageId(postId); + BaseFragment f = + BlogPostFragment.newInstance(groupId, messageId); + showInitialFragment(f); + } } } 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 f43b209fd..95adaaad5 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 @@ -191,7 +191,7 @@ public class BlogFragment extends BaseFragment @Override public void onBlogPostClick(BlogPostItem post) { BlogPostFragment f = - BlogPostFragment.newInstance(groupId, post.getId(), false); + BlogPostFragment.newInstance(groupId, post.getId()); showNextFragment(f); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java index 605597e59..b7790571e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostFragment.java @@ -44,7 +44,6 @@ public class BlogPostFragment extends BaseFragment private static final Logger LOG = getLogger(TAG); static final String POST_ID = "briar.POST_ID"; - static final String IS_FEED = "briar.IS_FEED"; protected BlogViewModel viewModel; private final Handler handler = new Handler(Looper.getMainLooper()); @@ -57,13 +56,11 @@ public class BlogPostFragment extends BaseFragment @Inject ViewModelProvider.Factory viewModelFactory; - static BlogPostFragment newInstance(GroupId blogId, MessageId postId, - boolean isFeed) { + static BlogPostFragment newInstance(GroupId blogId, MessageId postId) { BlogPostFragment f = new BlogPostFragment(); Bundle bundle = new Bundle(); bundle.putByteArray(GROUP_ID, blogId.getBytes()); bundle.putByteArray(POST_ID, postId.getBytes()); - bundle.putBoolean(IS_FEED, isFeed); f.setArguments(bundle); return f; } @@ -85,13 +82,12 @@ public class BlogPostFragment extends BaseFragment new GroupId(requireNonNull(args.getByteArray(GROUP_ID))); MessageId postId = new MessageId(requireNonNull(args.getByteArray(POST_ID))); - boolean isFeed = args.getBoolean(IS_FEED); View view = inflater.inflate(R.layout.fragment_blog_post, container, false); progressBar = view.findViewById(R.id.progressBar); progressBar.setVisibility(VISIBLE); - ui = new BlogPostViewHolder(view, true, this, isFeed); + ui = new BlogPostViewHolder(view, true, this, false); LifecycleOwner owner = getViewLifecycleOwner(); viewModel.loadBlogPost(groupId, postId).observe(owner, result -> result.onError(this::handleException) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogViewModel.java index d3cd53c79..f21876e40 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogViewModel.java @@ -111,11 +111,11 @@ class BlogViewModel extends BaseViewModel { * Set this before calling any other methods. */ @UiThread - public void setGroupId(GroupId groupId) { + public void setGroupId(GroupId groupId, boolean loadAllPosts) { if (this.groupId == groupId) return; // configuration change this.groupId = groupId; loadBlog(groupId); - loadBlogPosts(groupId); + if (loadAllPosts) loadBlogPosts(groupId); loadSharingContacts(groupId); } 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 bf7ce988c..2f5cf0418 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 @@ -11,6 +11,7 @@ import android.view.ViewGroup; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.blog.BaseViewModel.ListUpdate; @@ -29,6 +30,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static com.google.android.material.snackbar.Snackbar.LENGTH_LONG; import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; +import static org.briarproject.briar.android.blog.BlogPostFragment.POST_ID; @MethodsNotNullByDefault @ParametersNotNullByDefault @@ -145,16 +147,14 @@ public class FeedFragment extends BaseFragment @Override public void onBlogPostClick(BlogPostItem post) { - BaseFragment f = BlogPostFragment - .newInstance(post.getGroupId(), post.getId(), true); - showNextFragment(f); + Intent i = getBlogActivityIntent(post.getGroupId()); + i.putExtra(POST_ID, post.getId().getBytes()); + requireContext().startActivity(i); } @Override public void onAuthorClick(BlogPostItem post) { - Intent i = new Intent(requireContext(), BlogActivity.class); - i.putExtra(GROUP_ID, post.getGroupId().getBytes()); - i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + Intent i = getBlogActivityIntent(post.getGroupId()); requireContext().startActivity(i); } @@ -169,6 +169,13 @@ public class FeedFragment extends BaseFragment return TAG; } + private Intent getBlogActivityIntent(GroupId groupId) { + Intent i = new Intent(requireContext(), BlogActivity.class); + i.putExtra(GROUP_ID, groupId.getBytes()); + i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + return i; + } + private void showSnackBar(int stringRes) { int firstVisible = layoutManager.findFirstCompletelyVisibleItemPosition();