Make BlogAdapter final and don't pass in a FragmentManager

This commit is contained in:
Torsten Grote
2021-01-11 16:46:10 -03:00
parent ab1ed0ff5a
commit b678de7529
8 changed files with 41 additions and 32 deletions

View File

@@ -14,6 +14,7 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import java.util.logging.Logger;
@@ -76,7 +77,13 @@ abstract class BasePostFragment extends BaseFragment {
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
getContext().startActivity(i);
}
}, getFragmentManager());
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
});
return view;
}

View File

@@ -29,6 +29,7 @@ import org.briarproject.briar.android.sharing.BlogSharingStatusActivity;
import org.briarproject.briar.android.sharing.ShareBlogActivity;
import org.briarproject.briar.android.util.BriarSnackbarBuilder;
import org.briarproject.briar.android.view.BriarRecyclerView;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import org.briarproject.briar.api.blog.BlogPostHeader;
import java.util.Collection;
@@ -69,7 +70,7 @@ public class BlogFragment extends BaseFragment
private Parcelable layoutManagerState;
private GroupId groupId;
private BlogPostAdapter adapter;
private final BlogPostAdapter adapter = new BlogPostAdapter(this);
private LayoutManager layoutManager;
private BriarRecyclerView list;
private MenuItem writeButton, deleteButton;
@@ -104,7 +105,6 @@ public class BlogFragment extends BaseFragment
View v = inflater.inflate(R.layout.fragment_blog, container, false);
adapter = new BlogPostAdapter(this, getParentFragmentManager());
list = v.findViewById(R.id.postList);
layoutManager = new LinearLayoutManager(getActivity());
list.setLayoutManager(layoutManager);
@@ -256,6 +256,12 @@ public class BlogFragment extends BaseFragment
getContext().startActivity(i);
}
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
private void loadBlogPosts(boolean reload) {
blogController.loadBlogPosts(
new UiResultExceptionHandler<List<BlogPostItem>,

View File

@@ -8,8 +8,6 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
@@ -18,11 +16,8 @@ import androidx.recyclerview.widget.ListAdapter;
class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> {
private final OnBlogPostClickListener listener;
@Nullable
private final FragmentManager fragmentManager;
BlogPostAdapter(OnBlogPostClickListener listener,
@Nullable FragmentManager fragmentManager) {
BlogPostAdapter(OnBlogPostClickListener listener) {
super(new DiffUtil.ItemCallback<BlogPostItem>() {
@Override
public boolean areItemsTheSame(BlogPostItem a, BlogPostItem b) {
@@ -35,7 +30,6 @@ class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> {
}
});
this.listener = listener;
this.fragmentManager = fragmentManager;
}
@Override
@@ -43,7 +37,7 @@ class BlogPostAdapter extends ListAdapter<BlogPostItem, BlogPostViewHolder> {
int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list_item_blog_post, parent, false);
return new BlogPostViewHolder(v, false, listener, fragmentManager);
return new BlogPostViewHolder(v, false, listener);
}
@Override

View File

@@ -20,7 +20,6 @@ import javax.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;
import static android.view.View.GONE;
@@ -47,16 +46,12 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
@NonNull
private final OnBlogPostClickListener listener;
@Nullable
private final FragmentManager fragmentManager;
BlogPostViewHolder(View v, boolean fullText,
@NonNull OnBlogPostClickListener listener,
@Nullable FragmentManager fragmentManager) {
@NonNull OnBlogPostClickListener listener) {
super(v);
this.fullText = fullText;
this.listener = listener;
this.fragmentManager = fragmentManager;
ctx = v.getContext();
layout = v.findViewById(R.id.postLayout);
@@ -67,10 +62,6 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
commentContainer = v.findViewById(R.id.commentContainer);
}
void setVisibility(int visibility) {
layout.setVisibility(visibility);
}
void hideReblogButton() {
reblogButton.setVisibility(GONE);
}
@@ -114,7 +105,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
if (fullText) {
text.setText(postText);
text.setTextIsSelectable(true);
makeLinksClickable(text, fragmentManager);
makeLinksClickable(text, listener::onLinkClick);
} else {
text.setTextIsSelectable(false);
if (postText.length() > TEASER_LENGTH)

View File

@@ -17,6 +17,7 @@ import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.util.BriarSnackbarBuilder;
import org.briarproject.briar.android.view.BriarRecyclerView;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import org.briarproject.briar.api.blog.Blog;
import java.util.List;
@@ -44,7 +45,7 @@ public class FeedFragment extends BaseFragment
ViewModelProvider.Factory viewModelFactory;
private FeedViewModel viewModel;
private BlogPostAdapter adapter;
private final BlogPostAdapter adapter = new BlogPostAdapter(this);
private LinearLayoutManager layoutManager;
private BriarRecyclerView list;
@Nullable
@@ -79,8 +80,6 @@ public class FeedFragment extends BaseFragment
View v = inflater.inflate(R.layout.fragment_blog, container, false);
adapter = new BlogPostAdapter(this, getParentFragmentManager());
layoutManager = new LinearLayoutManager(getActivity());
list = v.findViewById(R.id.postList);
list.setLayoutManager(layoutManager);
@@ -185,6 +184,12 @@ public class FeedFragment extends BaseFragment
requireContext().startActivity(i);
}
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
@Override
public String getUniqueTag() {
return TAG;

View File

@@ -5,4 +5,6 @@ interface OnBlogPostClickListener {
void onBlogPostClick(BlogPostItem post);
void onAuthorClick(BlogPostItem post);
void onLinkClick(String url);
}

View File

@@ -17,6 +17,7 @@ import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.view.TextInputView;
import org.briarproject.briar.android.view.TextSendController;
import org.briarproject.briar.android.view.TextSendController.SendListener;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import org.briarproject.briar.api.attachment.AttachmentHeader;
import java.util.List;
@@ -151,7 +152,13 @@ public class ReblogFragment extends BaseFragment implements SendListener {
public void onAuthorClick(BlogPostItem post) {
// probably don't want to allow author clicks here
}
}, getParentFragmentManager());
@Override
public void onLinkClick(String url) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(getParentFragmentManager(), f.getUniqueTag());
}
});
input = v.findViewById(R.id.inputText);
}
}

View File

@@ -34,7 +34,6 @@ import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.R;
import org.briarproject.briar.android.reporting.FeedbackActivity;
import org.briarproject.briar.android.view.ArticleMovementMethod;
import org.briarproject.briar.android.widget.LinkDialogFragment;
import java.util.Locale;
@@ -49,8 +48,8 @@ import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
import androidx.core.hardware.fingerprint.FingerprintManagerCompat;
import androidx.core.text.HtmlCompat;
import androidx.core.util.Consumer;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
@@ -198,8 +197,7 @@ public class UiUtils {
}
public static void makeLinksClickable(TextView v,
@Nullable FragmentManager fm) {
if (fm == null) return;
Consumer<String> onLinkClicked) {
SpannableStringBuilder ssb = new SpannableStringBuilder(v.getText());
URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class);
for (URLSpan span : spans) {
@@ -210,8 +208,7 @@ public class UiUtils {
ClickableSpan cSpan = new ClickableSpan() {
@Override
public void onClick(View v2) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
f.show(fm, f.getUniqueTag());
onLinkClicked.accept(url);
}
};
ssb.setSpan(cSpan, start, end, 0);