Open blog posts from blog feed in BlogActivity

This commit is contained in:
Torsten Grote
2021-03-26 10:23:31 -03:00
parent ace0b9a3d8
commit dceeecf1fe
5 changed files with 33 additions and 17 deletions

View File

@@ -6,9 +6,11 @@ import android.os.Bundle;
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.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.activity.BriarActivity; 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.fragment.BaseFragment.BaseFragmentListener;
import org.briarproject.briar.android.sharing.BlogSharingStatusActivity; import org.briarproject.briar.android.sharing.BlogSharingStatusActivity;
@@ -19,6 +21,7 @@ import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import static org.briarproject.briar.android.blog.BlogPostFragment.POST_ID;
@MethodsNotNullByDefault @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault
@@ -45,7 +48,10 @@ public class BlogActivity extends BriarActivity
Intent i = getIntent(); Intent i = getIntent();
GroupId groupId = GroupId groupId =
new GroupId(requireNonNull(i.getByteArrayExtra(GROUP_ID))); 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); setContentView(R.layout.activity_fragment_container_toolbar);
Toolbar toolbar = setUpCustomToolbar(false); Toolbar toolbar = setUpCustomToolbar(false);
@@ -66,7 +72,14 @@ public class BlogActivity extends BriarActivity
); );
if (state == null) { 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);
}
} }
} }

View File

@@ -191,7 +191,7 @@ public class BlogFragment extends BaseFragment
@Override @Override
public void onBlogPostClick(BlogPostItem post) { public void onBlogPostClick(BlogPostItem post) {
BlogPostFragment f = BlogPostFragment f =
BlogPostFragment.newInstance(groupId, post.getId(), false); BlogPostFragment.newInstance(groupId, post.getId());
showNextFragment(f); showNextFragment(f);
} }

View File

@@ -44,7 +44,6 @@ public class BlogPostFragment extends BaseFragment
private static final Logger LOG = getLogger(TAG); private static final Logger LOG = getLogger(TAG);
static final String POST_ID = "briar.POST_ID"; static final String POST_ID = "briar.POST_ID";
static final String IS_FEED = "briar.IS_FEED";
protected BlogViewModel viewModel; protected BlogViewModel viewModel;
private final Handler handler = new Handler(Looper.getMainLooper()); private final Handler handler = new Handler(Looper.getMainLooper());
@@ -57,13 +56,11 @@ public class BlogPostFragment extends BaseFragment
@Inject @Inject
ViewModelProvider.Factory viewModelFactory; ViewModelProvider.Factory viewModelFactory;
static BlogPostFragment newInstance(GroupId blogId, MessageId postId, static BlogPostFragment newInstance(GroupId blogId, MessageId postId) {
boolean isFeed) {
BlogPostFragment f = new BlogPostFragment(); BlogPostFragment f = new BlogPostFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putByteArray(GROUP_ID, blogId.getBytes()); bundle.putByteArray(GROUP_ID, blogId.getBytes());
bundle.putByteArray(POST_ID, postId.getBytes()); bundle.putByteArray(POST_ID, postId.getBytes());
bundle.putBoolean(IS_FEED, isFeed);
f.setArguments(bundle); f.setArguments(bundle);
return f; return f;
} }
@@ -85,13 +82,12 @@ public class BlogPostFragment extends BaseFragment
new GroupId(requireNonNull(args.getByteArray(GROUP_ID))); new GroupId(requireNonNull(args.getByteArray(GROUP_ID)));
MessageId postId = MessageId postId =
new MessageId(requireNonNull(args.getByteArray(POST_ID))); new MessageId(requireNonNull(args.getByteArray(POST_ID)));
boolean isFeed = args.getBoolean(IS_FEED);
View view = inflater.inflate(R.layout.fragment_blog_post, container, View view = inflater.inflate(R.layout.fragment_blog_post, container,
false); false);
progressBar = view.findViewById(R.id.progressBar); progressBar = view.findViewById(R.id.progressBar);
progressBar.setVisibility(VISIBLE); progressBar.setVisibility(VISIBLE);
ui = new BlogPostViewHolder(view, true, this, isFeed); ui = new BlogPostViewHolder(view, true, this, false);
LifecycleOwner owner = getViewLifecycleOwner(); LifecycleOwner owner = getViewLifecycleOwner();
viewModel.loadBlogPost(groupId, postId).observe(owner, result -> viewModel.loadBlogPost(groupId, postId).observe(owner, result ->
result.onError(this::handleException) result.onError(this::handleException)

View File

@@ -111,11 +111,11 @@ class BlogViewModel extends BaseViewModel {
* Set this before calling any other methods. * Set this before calling any other methods.
*/ */
@UiThread @UiThread
public void setGroupId(GroupId groupId) { public void setGroupId(GroupId groupId, boolean loadAllPosts) {
if (this.groupId == groupId) return; // configuration change if (this.groupId == groupId) return; // configuration change
this.groupId = groupId; this.groupId = groupId;
loadBlog(groupId); loadBlog(groupId);
loadBlogPosts(groupId); if (loadAllPosts) loadBlogPosts(groupId);
loadSharingContacts(groupId); loadSharingContacts(groupId);
} }

View File

@@ -11,6 +11,7 @@ import android.view.ViewGroup;
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.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.blog.BaseViewModel.ListUpdate; 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 android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static com.google.android.material.snackbar.Snackbar.LENGTH_LONG; 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.activity.BriarActivity.GROUP_ID;
import static org.briarproject.briar.android.blog.BlogPostFragment.POST_ID;
@MethodsNotNullByDefault @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault
@@ -145,16 +147,14 @@ public class FeedFragment extends BaseFragment
@Override @Override
public void onBlogPostClick(BlogPostItem post) { public void onBlogPostClick(BlogPostItem post) {
BaseFragment f = BlogPostFragment Intent i = getBlogActivityIntent(post.getGroupId());
.newInstance(post.getGroupId(), post.getId(), true); i.putExtra(POST_ID, post.getId().getBytes());
showNextFragment(f); requireContext().startActivity(i);
} }
@Override @Override
public void onAuthorClick(BlogPostItem post) { public void onAuthorClick(BlogPostItem post) {
Intent i = new Intent(requireContext(), BlogActivity.class); Intent i = getBlogActivityIntent(post.getGroupId());
i.putExtra(GROUP_ID, post.getGroupId().getBytes());
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
requireContext().startActivity(i); requireContext().startActivity(i);
} }
@@ -169,6 +169,13 @@ public class FeedFragment extends BaseFragment
return TAG; 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) { private void showSnackBar(int stringRes) {
int firstVisible = int firstVisible =
layoutManager.findFirstCompletelyVisibleItemPosition(); layoutManager.findFirstCompletelyVisibleItemPosition();