Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 19 additions & 17 deletions AnkiDroid/src/main/java/com/ichi2/imagecropper/ImageCropper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,13 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.canhub.cropper.CropImageView
import com.ichi2.anki.R
import com.ichi2.anki.databinding.FragmentImageCropperBinding
import com.ichi2.anki.snackbar.showSnackbar
import com.ichi2.anki.withProgress
import com.ichi2.imagecropper.ImageCropper.Companion.DECODED_IMAGE_LIMIT
import com.ichi2.utils.ContentResolverUtil
import com.ichi2.utils.openInputStreamSafe
import dev.androidbroadcast.vbpd.viewBinding
import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
import timber.log.Timber
Expand All @@ -58,35 +61,34 @@ import timber.log.Timber
class ImageCropper :
Fragment(R.layout.fragment_image_cropper),
MenuProvider {
private lateinit var cropImageView: CropImageView
private val binding by viewBinding(FragmentImageCropperBinding::bind)

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
(activity as? AppCompatActivity)?.apply {
setSupportActionBar(view.findViewById(R.id.toolbar))
setSupportActionBar(binding.toolbar)
// there's no need for a title anyway and if we don't set it we end up with "AnkiDroid"
// as the title which is useless
supportActionBar?.title = ""
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
cropImageView =
view.findViewById<CropImageView>(R.id.cropImageView).apply {
setOnSetImageUriCompleteListener(::onSetImageUriComplete)
setOnCropImageCompleteListener(::onCropImageComplete)
cropRect = Rect(100, 300, 500, 1200)
}
binding.cropImageView.apply {
setOnSetImageUriCompleteListener(::onSetImageUriComplete)
setOnCropImageCompleteListener(::onCropImageComplete)
cropRect = Rect(100, 300, 500, 1200)
}
val originalImageUri =
BundleCompat.getParcelable(requireArguments(), CROP_IMAGE_URI, Uri::class.java)
?: error("No image identifier was provided for cropping")
viewLifecycleOwner.lifecycleScope.launch {
withProgress {
if (isImageTooBig(originalImageUri)) {
view.findViewById<View>(R.id.crop_image_size_notice).isVisible = true
binding.cropImageSizeNotice.isVisible = true
} else {
cropImageView.setImageUriAsync(originalImageUri)
binding.cropImageView.setImageUriAsync(originalImageUri)
}
}
}
Expand Down Expand Up @@ -127,10 +129,10 @@ class ImageCropper :
when (menuItem.itemId) {
R.id.action_done -> {
Timber.d("Done clicked")
val imageFormat = cropImageView.imageUri?.let { getImageCompressFormat(it) }
val imageFormat = binding.cropImageView.imageUri?.let { getImageCompressFormat(it) }
Timber.d("Compress format: $imageFormat")
if (imageFormat != null) {
cropImageView.croppedImageAsync(
binding.cropImageView.croppedImageAsync(
saveCompressFormat = imageFormat,
)
}
Expand All @@ -139,19 +141,19 @@ class ImageCropper :

R.id.action_rotate -> {
Timber.d("Rotate clicked")
cropImageView.rotateImage(90)
binding.cropImageView.rotateImage(90)
true
}

R.id.action_flip_horizontally -> {
Timber.d("Flip horizontally clicked")
cropImageView.flipImageHorizontally()
binding.cropImageView.flipImageHorizontally()
true
}

R.id.action_flip_vertically -> {
Timber.d("Flip vertically clicked")
cropImageView.flipImageVertically()
binding.cropImageView.flipImageVertically()
true
}

Expand Down Expand Up @@ -220,8 +222,8 @@ class ImageCropper :

override fun onDestroyView() {
super.onDestroyView()
cropImageView.setOnSetImageUriCompleteListener(null)
cropImageView.setOnCropImageCompleteListener(null)
binding.cropImageView.setOnSetImageUriCompleteListener(null)
binding.cropImageView.setOnCropImageCompleteListener(null)
}

companion object {
Expand Down