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.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);
}
}
}

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -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();