diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java index 7408d9d7fb4c20a616e253a8b8953e24cc414200..49633c6bfa1781b6bd1d138f57974ed310daf732 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android.blog; +import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -20,8 +21,10 @@ import java.util.logging.Logger; import javax.annotation.Nullable; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; import static org.briarproject.briar.android.util.UiUtils.MIN_DATE_RESOLUTION; @UiThread @@ -58,6 +61,20 @@ abstract class BasePostFragment extends BaseFragment { progressBar = (ProgressBar) view.findViewById(R.id.progressBar); progressBar.setVisibility(VISIBLE); ui = new BlogPostViewHolder(view); + ui.setOnBlogPostClickListener(new OnBlogPostClickListener() { + @Override + public void onBlogPostClick(BlogPostItem post) { + // We're already there + } + + @Override + public void onAuthorClick(BlogPostItem post) { + Intent i = new Intent(getContext(), BlogActivity.class); + i.putExtra(GROUP_ID, post.getGroupId().getBytes()); + i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + getContext().startActivity(i); + } + }); return view; } 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 c9305411d6a17a7e521d41f6fa29315abe105c53..cb0981f36c42cbecc4b5a18be7f90cba5fd1d681 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 @@ -27,7 +27,6 @@ import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; import org.briarproject.briar.android.blog.BlogController.BlogSharingListener; -import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener; import org.briarproject.briar.android.controller.SharingController; import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler; import org.briarproject.briar.android.fragment.BaseFragment; @@ -216,6 +215,15 @@ public class BlogFragment extends BaseFragment showNextFragment(f); } + @Override + public void onAuthorClick(BlogPostItem post) { + if (post.getGroupId().equals(groupId)) return; // We're already there + Intent i = new Intent(getContext(), BlogActivity.class); + i.putExtra(GROUP_ID, post.getGroupId().getBytes()); + i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + getContext().startActivity(i); + } + private void loadBlogPosts(final boolean reload) { blogController.loadBlogPosts( new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>( diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java index febca0327d247a82b52f08fab94f8710641db092..a9ac9f7232b98572172efd4730899a1b448ca1b0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java @@ -48,8 +48,4 @@ class BlogPostAdapter return a.getId().equals(b.getId()); } - interface OnBlogPostClickListener { - void onBlogPostClick(BlogPostItem post); - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java index 76232fc5755fc52474c25f4203a2a2e7a1cbf196..b72f29fc58451c1e7be50b5474fecb423281337e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java @@ -20,7 +20,6 @@ import android.widget.TextView; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; -import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener; import org.briarproject.briar.android.view.AuthorView; import org.briarproject.briar.api.blog.BlogCommentHeader; import org.briarproject.briar.api.blog.BlogPostHeader; @@ -49,6 +48,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { private final TextView body; private final ViewGroup commentContainer; + @Nullable private OnBlogPostClickListener listener; BlogPostViewHolder(View v) { @@ -111,10 +111,15 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { author.setPersona( item.isRssFeed() ? AuthorView.RSS_FEED : AuthorView.NORMAL); // TODO make author clickable more often #624 - if (item.getHeader().getType() == POST) { - author.setBlogLink(post.getGroupId()); + if (listener != null && item.getHeader().getType() == POST) { + author.setAuthorClickable(new OnClickListener() { + @Override + public void onClick(View v) { + listener.onAuthorClick(item); + } + }); } else { - author.unsetBlogLink(); + author.setAuthorNotClickable(); } // post body @@ -165,7 +170,14 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { reblogger.setAuthor(item.getAuthor()); reblogger.setAuthorStatus(item.getAuthorStatus()); reblogger.setDate(item.getTimestamp()); - reblogger.setBlogLink(item.getGroupId()); + if (listener != null) { + reblogger.setAuthorClickable(new OnClickListener() { + @Override + public void onClick(View v) { + listener.onAuthorClick(item); + } + }); + } reblogger.setVisibility(VISIBLE); reblogger.setPersona(AuthorView.REBLOGGER); 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 c7a64659a68367487f6f630bce75e24b34e28f8b..097de3921ef188f285b43b90337244bea0f1f431 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 @@ -19,7 +19,6 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; -import org.briarproject.briar.android.blog.BlogPostAdapter.OnBlogPostClickListener; import org.briarproject.briar.android.blog.FeedController.FeedListener; import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler; import org.briarproject.briar.android.fragment.BaseFragment; @@ -34,6 +33,7 @@ import javax.annotation.Nullable; import javax.inject.Inject; import static android.app.Activity.RESULT_OK; +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.support.design.widget.Snackbar.LENGTH_LONG; import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_WRITE_BLOG_POST; @@ -223,6 +223,14 @@ public class FeedFragment extends BaseFragment implements showNextFragment(f); } + @Override + public void onAuthorClick(BlogPostItem post) { + Intent i = new Intent(getContext(), BlogActivity.class); + i.putExtra(GROUP_ID, post.getGroupId().getBytes()); + i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + getContext().startActivity(i); + } + @Override public String getUniqueTag() { return TAG; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java new file mode 100644 index 0000000000000000000000000000000000000000..9920e477589a49f814322fbe1495bc55e176b8fb --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/OnBlogPostClickListener.java @@ -0,0 +1,8 @@ +package org.briarproject.briar.android.blog; + +interface OnBlogPostClickListener { + + void onBlogPostClick(BlogPostItem post); + + void onAuthorClick(BlogPostItem post); +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java index f03a88ecd1d17277bae5c70994584a9abef77683..e4cddd8c4b1d63eeec02d4e9b540a35dc5619432 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java @@ -1,7 +1,6 @@ package org.briarproject.briar.android.view; import android.content.Context; -import android.content.Intent; import android.content.res.TypedArray; import android.graphics.Typeface; import android.support.annotation.DimenRes; @@ -16,9 +15,7 @@ import android.widget.TextView; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.Author.Status; -import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; -import org.briarproject.briar.android.blog.BlogActivity; import org.briarproject.briar.android.util.UiUtils; import javax.annotation.Nullable; @@ -27,12 +24,10 @@ import de.hdodenhof.circleimageview.CircleImageView; import im.delight.android.identicons.IdenticonDrawable; import static android.content.Context.LAYOUT_INFLATER_SERVICE; -import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.graphics.Typeface.BOLD; import static android.util.TypedValue.COMPLEX_UNIT_PX; import static org.briarproject.bramble.api.identity.Author.Status.NONE; import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES; -import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; @UiThread public class AuthorView extends RelativeLayout { @@ -110,24 +105,16 @@ public class AuthorView extends RelativeLayout { requestLayout(); } - public void setBlogLink(final GroupId groupId) { + public void setAuthorClickable(OnClickListener listener) { setClickable(true); TypedValue outValue = new TypedValue(); getContext().getTheme().resolveAttribute( android.R.attr.selectableItemBackground, outValue, true); setBackgroundResource(outValue.resourceId); - setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - Intent i = new Intent(getContext(), BlogActivity.class); - i.putExtra(GROUP_ID, groupId.getBytes()); - i.setFlags(FLAG_ACTIVITY_CLEAR_TOP); - getContext().startActivity(i); - } - }); + setOnClickListener(listener); } - public void unsetBlogLink() { + public void setAuthorNotClickable() { setClickable(false); setBackgroundResource(android.R.color.transparent); setOnClickListener(null);