parent
f0988f37f3
commit
4b23e60dd6
4 changed files with 47 additions and 29 deletions
|
@ -202,7 +202,7 @@ class MediaSelectionViewModel(
|
|||
}
|
||||
|
||||
if (newMediaList.isEmpty() && !suppressEmptyError) {
|
||||
mediaErrors.postValue(MediaValidator.FilterError.NO_ITEMS)
|
||||
mediaErrors.postValue(MediaValidator.FilterError.NoItems())
|
||||
}
|
||||
|
||||
repository.deleteBlobs(listOf(media))
|
||||
|
|
|
@ -15,14 +15,14 @@ object MediaValidator {
|
|||
var error: FilterError? = null
|
||||
if (!isAllMediaValid) {
|
||||
error = if (media.all { MediaUtil.isImageOrVideoType(it.mimeType) }) {
|
||||
FilterError.ITEM_TOO_LARGE
|
||||
FilterError.ItemTooLarge
|
||||
} else {
|
||||
FilterError.ITEM_INVALID_TYPE
|
||||
FilterError.ItemInvalidType
|
||||
}
|
||||
}
|
||||
|
||||
if (filteredMedia.size > maxSelection) {
|
||||
error = FilterError.TOO_MANY_ITEMS
|
||||
error = FilterError.TooManyItems
|
||||
}
|
||||
|
||||
val truncatedMedia = filteredMedia.take(maxSelection)
|
||||
|
@ -39,7 +39,7 @@ object MediaValidator {
|
|||
}
|
||||
|
||||
if (truncatedMedia.isEmpty()) {
|
||||
error = FilterError.NO_ITEMS
|
||||
error = FilterError.NoItems(error)
|
||||
}
|
||||
|
||||
return FilterResult(truncatedMedia, error, bucketId)
|
||||
|
@ -67,10 +67,14 @@ object MediaValidator {
|
|||
|
||||
data class FilterResult(val filteredMedia: List<Media>, val filterError: FilterError?, val bucketId: String?)
|
||||
|
||||
enum class FilterError {
|
||||
ITEM_TOO_LARGE,
|
||||
ITEM_INVALID_TYPE,
|
||||
TOO_MANY_ITEMS,
|
||||
NO_ITEMS
|
||||
sealed class FilterError {
|
||||
object ItemTooLarge : FilterError()
|
||||
object ItemInvalidType : FilterError()
|
||||
object TooManyItems : FilterError()
|
||||
class NoItems(val cause: FilterError? = null) : FilterError() {
|
||||
init {
|
||||
require(cause !is NoItems)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,13 +52,21 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
|
|||
)
|
||||
}
|
||||
|
||||
sharedViewModel.mediaErrors.observe(viewLifecycleOwner) { error: MediaValidator.FilterError ->
|
||||
@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 -> {}
|
||||
sharedViewModel.mediaErrors.observe(viewLifecycleOwner, this::handleError)
|
||||
}
|
||||
|
||||
private fun handleError(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) {
|
||||
handleError(error.cause)
|
||||
} else {
|
||||
Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -206,18 +206,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
|
|||
computeViewStateAndAnimate(state)
|
||||
}
|
||||
|
||||
sharedViewModel.mediaErrors.observe(viewLifecycleOwner) { error: MediaValidator.FilterError ->
|
||||
@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()
|
||||
}
|
||||
}
|
||||
}
|
||||
sharedViewModel.mediaErrors.observe(viewLifecycleOwner, this::handleMediaValidatorFilterError)
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
|
@ -243,6 +232,23 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
|
|||
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() {
|
||||
val controller = findNavController()
|
||||
requestPermissionsForGallery {
|
||||
|
|
Loading…
Add table
Reference in a new issue