package ani.dantotsu.others import android.animation.ObjectAnimator import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.FragmentActivity import androidx.lifecycle.lifecycleScope import ani.dantotsu.BottomSheetDialogFragment import ani.dantotsu.FileUrl import ani.dantotsu.R import ani.dantotsu.databinding.BottomSheetImageBinding import ani.dantotsu.media.manga.mangareader.BaseImageAdapter.Companion.loadBitmap import ani.dantotsu.media.manga.mangareader.BaseImageAdapter.Companion.loadBitmap_old import ani.dantotsu.media.manga.mangareader.BaseImageAdapter.Companion.mergeBitmap import ani.dantotsu.openLinkInBrowser import ani.dantotsu.saveImageToDownloads import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.shareImage import ani.dantotsu.snackString import ani.dantotsu.themes.ThemeManager import ani.dantotsu.others.LangSet import ani.dantotsu.toast import com.bumptech.glide.load.resource.bitmap.BitmapTransformation import com.davemorrissey.labs.subscaleview.ImageSource import kotlinx.coroutines.launch class ImageViewDialog : BottomSheetDialogFragment() { private var _binding: BottomSheetImageBinding? = null private val binding get() = _binding!! private var reload = false private var _title: String? = null private var _image: FileUrl? = null private var _image2: FileUrl? = null var onReloadPressed: ((ImageViewDialog) -> Unit)? = null var trans1: List? = null var trans2: List? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { _title = it.getString("title")?.replace(Regex("[\\\\/:*?\"<>|]"), "") reload = it.getBoolean("reload") _image = it.getSerialized("image")!! _image2 = it.getSerialized("image2") } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { _binding = BottomSheetImageBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val (title, image, image2) = Triple(_title, _image, _image2) if (image == null || title == null) { dismiss() snackString(getString(R.string.error_getting_image_data)) return } if (reload) { binding.bottomImageReload.visibility = View.VISIBLE binding.bottomImageReload.setSafeOnClickListener { onReloadPressed?.invoke(this) } } binding.bottomImageTitle.text = title binding.bottomImageReload.setOnLongClickListener { openLinkInBrowser(image.url) if (image2 != null) openLinkInBrowser(image2.url) true } val context = requireContext() viewLifecycleOwner.lifecycleScope.launch { val binding = _binding ?: return@launch var bitmap = context.loadBitmap_old(image, trans1 ?: listOf()) var bitmap2 = if (image2 != null) context.loadBitmap_old(image2, trans2 ?: listOf()) else null if (bitmap == null) { bitmap = context.loadBitmap(image, trans1 ?: listOf()) bitmap2 = if (image2 != null) context.loadBitmap(image2, trans2 ?: listOf()) else null } bitmap = if (bitmap2 != null && bitmap != null) mergeBitmap(bitmap, bitmap2,) else bitmap if (bitmap != null) { binding.bottomImageShare.isEnabled = true binding.bottomImageSave.isEnabled = true binding.bottomImageSave.setOnClickListener { saveImageToDownloads(title, bitmap, requireActivity()) } binding.bottomImageShare.setOnClickListener { shareImage(title, bitmap, requireContext()) } binding.bottomImageView.setImage(ImageSource.cachedBitmap(bitmap)) ObjectAnimator.ofFloat(binding.bottomImageView, "alpha", 0f, 1f).setDuration(400L).start() binding.bottomImageProgress.visibility = View.GONE } else { toast(context?.getString(R.string.loading_image_failed)) binding.bottomImageNo.visibility = View.VISIBLE binding.bottomImageProgress.visibility = View.GONE } } } override fun onDestroy() { _binding = null super.onDestroy() } companion object { fun newInstance(title: String, image: FileUrl, showReload: Boolean = false, image2: FileUrl?) = ImageViewDialog().apply { arguments = Bundle().apply { putString("title", title) putBoolean("reload", showReload) putSerializable("image", image) putSerializable("image2", image2) } } fun newInstance(activity: FragmentActivity, title: String?, image: String?): Boolean { ImageViewDialog().apply { arguments = Bundle().apply { putString("title", title ?: return false) putSerializable("image", FileUrl(image ?: return false)) } show(activity.supportFragmentManager, "image") } return true } } }