package ml.docilealligator.infinityforreddit.bottomsheetfragments; 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.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.activities.BaseActivity; import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity; import ml.docilealligator.infinityforreddit.customviews.LandscapeExpandedRoundedBottomSheetDialogFragment; import ml.docilealligator.infinityforreddit.databinding.FragmentCopyTextBottomSheetBinding; import ml.docilealligator.infinityforreddit.utils.Utils; /** * A simple {@link Fragment} subclass. */ public class CopyTextBottomSheetFragment extends LandscapeExpandedRoundedBottomSheetDialogFragment { public static final String EXTRA_RAW_TEXT = "ERT"; public static final String EXTRA_MARKDOWN = "EM"; private BaseActivity baseActivity; private ViewRedditGalleryActivity viewRedditGalleryActivity; private String markdownText; public CopyTextBottomSheetFragment() { // Required empty public constructor } /** * Convenience method for creating the dialog, creating and setting arguments bundle * and displaying the dialog */ public static void show(@NonNull FragmentManager fragmentManager, @Nullable String rawText, @Nullable String markdown) { Bundle bundle = new Bundle(); bundle.putString(CopyTextBottomSheetFragment.EXTRA_RAW_TEXT, rawText); bundle.putString(CopyTextBottomSheetFragment.EXTRA_MARKDOWN, markdown); CopyTextBottomSheetFragment copyTextBottomSheetFragment = new CopyTextBottomSheetFragment(); copyTextBottomSheetFragment.setArguments(bundle); copyTextBottomSheetFragment.show(fragmentManager, null); } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment FragmentCopyTextBottomSheetBinding binding = FragmentCopyTextBottomSheetBinding.inflate(inflater, container, false); String rawText = getArguments().getString(EXTRA_RAW_TEXT, null); markdownText = getArguments().getString(EXTRA_MARKDOWN, null); if (rawText != null) { binding.copyRawTextTextViewCopyTextBottomSheetFragment.setOnClickListener(view -> { showCopyDialog(rawText); dismiss(); }); binding.copyAllRawTextTextViewCopyTextBottomSheetFragment.setOnClickListener(view -> { copyText(rawText); dismiss(); }); } else { binding.copyRawTextTextViewCopyTextBottomSheetFragment.setVisibility(View.GONE); binding.copyAllRawTextTextViewCopyTextBottomSheetFragment.setVisibility(View.GONE); } if (markdownText != null) { binding.copyMarkdownTextViewCopyTextBottomSheetFragment.setOnClickListener(view -> { showCopyDialog(markdownText); dismiss(); }); binding.copyAllMarkdownTextViewCopyTextBottomSheetFragment.setOnClickListener(view -> { copyText(markdownText); dismiss(); }); } else { binding.copyMarkdownTextViewCopyTextBottomSheetFragment.setVisibility(View.GONE); binding.copyAllMarkdownTextViewCopyTextBottomSheetFragment.setVisibility(View.GONE); } if (baseActivity != null && baseActivity.typeface != null) { Utils.setFontToAllTextViews(binding.getRoot(), baseActivity.typeface); } else if (viewRedditGalleryActivity != null && viewRedditGalleryActivity.typeface != null) { Utils.setFontToAllTextViews(binding.getRoot(), viewRedditGalleryActivity.typeface); } return binding.getRoot(); } private void showCopyDialog(String text) { AppCompatActivity activity = baseActivity == null ? viewRedditGalleryActivity : baseActivity; 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) { AppCompatActivity activity = baseActivity == null ? viewRedditGalleryActivity : baseActivity; ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(Context.CLIPBOARD_SERVICE); if (clipboard != null) { ClipData clip = ClipData.newPlainText("simple text", text); clipboard.setPrimaryClip(clip); if (android.os.Build.VERSION.SDK_INT < 33) { Toast.makeText(activity, R.string.copy_success, Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(activity, R.string.copy_link_failed, Toast.LENGTH_SHORT).show(); } } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); if (context instanceof BaseActivity) { baseActivity = (BaseActivity) context; } else { viewRedditGalleryActivity = (ViewRedditGalleryActivity) context; } } }