aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2020-01-29 04:43:57 +0000
committerAlex Ning <chineseperson5@gmail.com>2020-01-29 04:43:57 +0000
commit5e401a6a96f4b83a79685907a6bee4997ff7e183 (patch)
tree57d17c810914cd7afcdce33a10e70d8ce6314284 /app/src/main/java
parentcb9154369070fe3773c16da0d4e7b3c33b716a1f (diff)
downloadinfinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.tar
infinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.tar.gz
infinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.tar.bz2
infinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.tar.lz
infinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.tar.xz
infinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.tar.zst
infinity-for-reddit-5e401a6a96f4b83a79685907a6bee4997ff7e183.zip
Copy post title and content in ViewPostDetailActivity.
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java11
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/CopyTextBottomSheetFragment.java110
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/SortTypeBottomSheetFragment.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java11
5 files changed, 135 insertions, 1 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java
index 14dab410..b15d9416 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java
@@ -74,6 +74,7 @@ import ml.docilealligator.infinityforreddit.CommentData;
import ml.docilealligator.infinityforreddit.CustomView.AspectRatioGifImageView;
import ml.docilealligator.infinityforreddit.CustomView.MarkwonLinearLayoutManager;
import ml.docilealligator.infinityforreddit.FetchComment;
+import ml.docilealligator.infinityforreddit.Fragment.CopyTextBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Fragment.ModifyCommentBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Fragment.ShareLinkBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Post.Post;
@@ -126,6 +127,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
private boolean loadMoreCommentsFailed;
private int mCommentBackgroundColor;
private ShareLinkBottomSheetFragment mShareLinkBottomSheetFragment;
+ private CopyTextBottomSheetFragment mCopyTextBottomSheetFragment;
public CommentAndPostRecyclerViewAdapter(AppCompatActivity activity, Retrofit retrofit, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
@@ -145,6 +147,14 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
@Override
public void beforeSetText(@NonNull TextView textView, @NonNull Spanned markdown) {
textView.setTextColor(markdownColor);
+ textView.setOnLongClickListener(view -> {
+ Bundle bundle = new Bundle();
+ bundle.putString(CopyTextBottomSheetFragment.EXTRA_RAW_TEXT, mPost.getSelfTextPlain());
+ bundle.putString(CopyTextBottomSheetFragment.EXTRA_MARKDOWN, mPost.getSelfText());
+ mCopyTextBottomSheetFragment.setArguments(bundle);
+ mCopyTextBottomSheetFragment.show(mActivity.getSupportFragmentManager(), mCopyTextBottomSheetFragment.getTag());
+ return true;
+ });
}
@Override
@@ -225,6 +235,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
mCommentBackgroundColor = typedValue.data;
mShareLinkBottomSheetFragment = new ShareLinkBottomSheetFragment();
+ mCopyTextBottomSheetFragment = new CopyTextBottomSheetFragment();
}
@Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/CopyTextBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/CopyTextBottomSheetFragment.java
new file mode 100644
index 00000000..96bb671d
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/CopyTextBottomSheetFragment.java
@@ -0,0 +1,110 @@
+package ml.docilealligator.infinityforreddit.Fragment;
+
+
+import android.app.Activity;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+
+import com.deishelon.roundedbottomsheet.RoundedBottomSheetDialogFragment;
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import ml.docilealligator.infinityforreddit.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ */
+public class CopyTextBottomSheetFragment extends RoundedBottomSheetDialogFragment {
+ public static final String EXTRA_RAW_TEXT = "ERT";
+ public static final String EXTRA_MARKDOWN = "EM";
+
+ @BindView(R.id.copy_raw_text_text_view_copy_text_bottom_sheet_fragment)
+ TextView copyRawTextTextView;
+ @BindView(R.id.copy_markdown_text_view_copy_text_bottom_sheet_fragment)
+ TextView copyMarkdownTextView;
+ @BindView(R.id.copy_all_raw_text_text_view_copy_text_bottom_sheet_fragment)
+ TextView copyAllRawTextTextView;
+ @BindView(R.id.copy_all_markdown_text_view_copy_text_bottom_sheet_fragment)
+ TextView copyAllMarkdownTextView;
+
+ private Activity activity;
+
+ public CopyTextBottomSheetFragment() {
+ // Required empty public constructor
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View rootView = inflater.inflate(R.layout.fragment_copy_text_bottom_sheet, container, false);
+ ButterKnife.bind(this, rootView);
+
+ String rawText = getArguments().getString(EXTRA_RAW_TEXT);
+ String markdownText = getArguments().getString(EXTRA_MARKDOWN);
+
+ copyRawTextTextView.setOnClickListener(view -> {
+ showCopyDialog(rawText);
+ dismiss();
+ });
+
+ copyMarkdownTextView.setOnClickListener(view -> {
+ showCopyDialog(markdownText);
+ dismiss();
+ });
+
+ copyAllRawTextTextView.setOnClickListener(view -> {
+ copyText(rawText);
+ dismiss();
+ });
+
+ copyAllMarkdownTextView.setOnClickListener(view -> {
+ copyText(markdownText);
+ dismiss();
+ });
+
+ return rootView;
+ }
+
+ private void showCopyDialog(String text) {
+ LayoutInflater inflater = activity.getLayoutInflater();
+ View layout = inflater.inflate(R.layout.copy_text_material_dialog, null);
+ TextView textView = layout.findViewById(R.id.text_view_copy_text_material_dialog);
+ textView.setText(text);
+ new MaterialAlertDialogBuilder(activity, R.style.CopyTextMaterialAlertDialogTheme)
+ .setTitle(R.string.copy_text)
+ .setView(layout)
+ .setPositiveButton(R.string.copy_all, (dialogInterface, i) -> copyText(text))
+ .setNegativeButton(R.string.cancel, null)
+ .show();
+ }
+
+ private void copyText(String text) {
+ ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE);
+ if (clipboard != null) {
+ ClipData clip = ClipData.newPlainText("simple text", text);
+ clipboard.setPrimaryClip(clip);
+ Toast.makeText(activity, R.string.copy_success, Toast.LENGTH_SHORT).show();
+ } else {
+ Toast.makeText(activity, R.string.copy_failed, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+ activity = (Activity) context;
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/SortTypeBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/SortTypeBottomSheetFragment.java
index f5ee3696..ba03d93c 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/SortTypeBottomSheetFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Fragment/SortTypeBottomSheetFragment.java
@@ -109,6 +109,6 @@ public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
- this.activity = (Activity) context;
+ activity = (Activity) context;
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
index 25a0e1cd..435cce53 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
@@ -133,6 +133,7 @@ public class ParsePost {
} else {
String selfTextPlain = Utils.trimTrailingWhitespace(
Html.fromHtml(data.getString(JSONUtils.SELFTEXT_HTML_KEY))).toString();
+ post.setSelfTextPlain(selfTextPlain);
if (selfTextPlain.length() > 250) {
selfTextPlain = selfTextPlain.substring(0, 250);
}
@@ -234,6 +235,7 @@ public class ParsePost {
} else {
String selfTextPlain = Utils.trimTrailingWhitespace(
Html.fromHtml(data.getString(JSONUtils.SELFTEXT_HTML_KEY))).toString();
+ post.setSelfTextPlain(selfTextPlain);
if (selfTextPlain.length() > 250) {
selfTextPlain = selfTextPlain.substring(0, 250);
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java
index e16893c2..8a025c97 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post/Post.java
@@ -39,6 +39,7 @@ public class Post implements Parcelable {
private String postTime;
private String title;
private String selfText;
+ private String selfTextPlain;
private String selfTextPlainTrimmed;
private String previewUrl;
private String thumbnailPreviewUrl;
@@ -177,6 +178,7 @@ public class Post implements Parcelable {
postTimeMillis = in.readLong();
title = in.readString();
selfText = in.readString();
+ selfTextPlain = in.readString();
selfTextPlainTrimmed = in.readString();
previewUrl = in.readString();
thumbnailPreviewUrl = in.readString();
@@ -267,6 +269,14 @@ public class Post implements Parcelable {
this.selfText = selfText;
}
+ public String getSelfTextPlain() {
+ return selfTextPlain;
+ }
+
+ public void setSelfTextPlain(String selfTextPlain) {
+ this.selfTextPlain = selfTextPlain;
+ }
+
public String getSelfTextPlainTrimmed() {
return selfTextPlainTrimmed;
}
@@ -438,6 +448,7 @@ public class Post implements Parcelable {
parcel.writeLong(postTimeMillis);
parcel.writeString(title);
parcel.writeString(selfText);
+ parcel.writeString(selfTextPlain);
parcel.writeString(selfTextPlainTrimmed);
parcel.writeString(previewUrl);
parcel.writeString(thumbnailPreviewUrl);