mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 05:09:53 +01:00
Open blog posts from blog feed in BlogActivity
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user