Fix gallery media toast when selected item is too large.

Fixes #12011
fork-5.53.8
Alex Hart 2022-03-04 12:21:41 -04:00
rodzic f0988f37f3
commit 4b23e60dd6
4 zmienionych plików z 47 dodań i 29 usunięć

Wyświetl plik

@ -202,7 +202,7 @@ class MediaSelectionViewModel(
} }
if (newMediaList.isEmpty() && !suppressEmptyError) { if (newMediaList.isEmpty() && !suppressEmptyError) {
mediaErrors.postValue(MediaValidator.FilterError.NO_ITEMS) mediaErrors.postValue(MediaValidator.FilterError.NoItems())
} }
repository.deleteBlobs(listOf(media)) repository.deleteBlobs(listOf(media))

Wyświetl plik

@ -15,14 +15,14 @@ object MediaValidator {
var error: FilterError? = null var error: FilterError? = null
if (!isAllMediaValid) { if (!isAllMediaValid) {
error = if (media.all { MediaUtil.isImageOrVideoType(it.mimeType) }) { error = if (media.all { MediaUtil.isImageOrVideoType(it.mimeType) }) {
FilterError.ITEM_TOO_LARGE FilterError.ItemTooLarge
} else { } else {
FilterError.ITEM_INVALID_TYPE FilterError.ItemInvalidType
} }
} }
if (filteredMedia.size > maxSelection) { if (filteredMedia.size > maxSelection) {
error = FilterError.TOO_MANY_ITEMS error = FilterError.TooManyItems
} }
val truncatedMedia = filteredMedia.take(maxSelection) val truncatedMedia = filteredMedia.take(maxSelection)
@ -39,7 +39,7 @@ object MediaValidator {
} }
if (truncatedMedia.isEmpty()) { if (truncatedMedia.isEmpty()) {
error = FilterError.NO_ITEMS error = FilterError.NoItems(error)
} }
return FilterResult(truncatedMedia, error, bucketId) return FilterResult(truncatedMedia, error, bucketId)
@ -67,10 +67,14 @@ object MediaValidator {
data class FilterResult(val filteredMedia: List<Media>, val filterError: FilterError?, val bucketId: String?) data class FilterResult(val filteredMedia: List<Media>, val filterError: FilterError?, val bucketId: String?)
enum class FilterError { sealed class FilterError {
ITEM_TOO_LARGE, object ItemTooLarge : FilterError()
ITEM_INVALID_TYPE, object ItemInvalidType : FilterError()
TOO_MANY_ITEMS, object TooManyItems : FilterError()
NO_ITEMS class NoItems(val cause: FilterError? = null) : FilterError() {
init {
require(cause !is NoItems)
}
}
} }
} }

Wyświetl plik

@ -52,13 +52,21 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
) )
} }
sharedViewModel.mediaErrors.observe(viewLifecycleOwner) { error: MediaValidator.FilterError -> sharedViewModel.mediaErrors.observe(viewLifecycleOwner, this::handleError)
@Exhaustive }
when (error) {
MediaValidator.FilterError.ITEM_TOO_LARGE -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_too_large, Toast.LENGTH_SHORT).show() private fun handleError(error: MediaValidator.FilterError) {
MediaValidator.FilterError.ITEM_INVALID_TYPE -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show() @Exhaustive
MediaValidator.FilterError.TOO_MANY_ITEMS -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__too_many_items_selected, Toast.LENGTH_SHORT).show() when (error) {
MediaValidator.FilterError.NO_ITEMS -> {} MediaValidator.FilterError.ItemTooLarge -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_too_large, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.ItemInvalidType -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.TooManyItems -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__too_many_items_selected, Toast.LENGTH_SHORT).show()
is MediaValidator.FilterError.NoItems -> {
if (error.cause != null) {
handleError(error.cause)
} else {
Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
}
} }
} }
} }

Wyświetl plik

@ -206,18 +206,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
computeViewStateAndAnimate(state) computeViewStateAndAnimate(state)
} }
sharedViewModel.mediaErrors.observe(viewLifecycleOwner) { error: MediaValidator.FilterError -> sharedViewModel.mediaErrors.observe(viewLifecycleOwner, this::handleMediaValidatorFilterError)
@Exhaustive
when (error) {
MediaValidator.FilterError.ITEM_TOO_LARGE -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_too_large, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.ITEM_INVALID_TYPE -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.TOO_MANY_ITEMS -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__too_many_items_selected, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.NO_ITEMS -> {
Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
callback.onNoMediaSelected()
}
}
}
requireActivity().onBackPressedDispatcher.addCallback( requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner, viewLifecycleOwner,
@ -243,6 +232,23 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
super.onDestroyView() super.onDestroyView()
} }
private fun handleMediaValidatorFilterError(error: MediaValidator.FilterError) {
@Exhaustive
when (error) {
MediaValidator.FilterError.ItemTooLarge -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_too_large, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.ItemInvalidType -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
MediaValidator.FilterError.TooManyItems -> Toast.makeText(requireContext(), R.string.MediaReviewFragment__too_many_items_selected, Toast.LENGTH_SHORT).show()
is MediaValidator.FilterError.NoItems -> {
if (error.cause != null) {
handleMediaValidatorFilterError(error)
} else {
Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
}
callback.onNoMediaSelected()
}
}
}
private fun launchGallery() { private fun launchGallery() {
val controller = findNavController() val controller = findNavController()
requestPermissionsForGallery { requestPermissionsForGallery {