kopia lustrzana https://github.com/ryukoposting/Signal-Android
rodzic
f0988f37f3
commit
4b23e60dd6
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Ładowanie…
Reference in New Issue