kopia lustrzana https://github.com/ryukoposting/Signal-Android
Properly handle media validation errors.
rodzic
ffc9e8caff
commit
6cbc2f684d
|
@ -99,6 +99,14 @@ class MediaSelectionActivity :
|
|||
overridePendingTransition(R.anim.stationary, R.anim.camera_slide_to_bottom)
|
||||
}
|
||||
|
||||
override fun onNoMediaSelected() {
|
||||
Log.w(TAG, "No media selected. Exiting.")
|
||||
|
||||
setResult(RESULT_CANCELED)
|
||||
finish()
|
||||
overridePendingTransition(R.anim.stationary, R.anim.camera_slide_to_bottom)
|
||||
}
|
||||
|
||||
override fun onPopFromReview() {
|
||||
if (isCameraFirst()) {
|
||||
viewModel.removeCameraFirstCapture()
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.mms.SentMediaQuality
|
|||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.scribbles.ImageEditorFragment
|
||||
import org.thoughtcrime.securesms.util.SingleLiveEvent
|
||||
import org.thoughtcrime.securesms.util.Util
|
||||
import org.thoughtcrime.securesms.util.livedata.Store
|
||||
import java.util.Collections
|
||||
|
@ -48,8 +49,8 @@ class MediaSelectionViewModel(
|
|||
val state: LiveData<MediaSelectionState> = store.stateLiveData
|
||||
|
||||
private val internalHudCommands = PublishSubject.create<HudCommand>()
|
||||
private val internalFilterErrors = PublishSubject.create<MediaValidator.FilterError>()
|
||||
|
||||
val mediaErrors: SingleLiveEvent<MediaValidator.FilterError> = SingleLiveEvent()
|
||||
val hudCommands: Observable<HudCommand> = internalHudCommands
|
||||
|
||||
private val disposables = CompositeDisposable()
|
||||
|
@ -125,7 +126,7 @@ class MediaSelectionViewModel(
|
|||
}
|
||||
|
||||
if (filterResult.filterError != null) {
|
||||
internalFilterErrors.onNext(filterResult.filterError)
|
||||
mediaErrors.postValue(filterResult.filterError)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
@ -197,7 +198,7 @@ class MediaSelectionViewModel(
|
|||
}
|
||||
|
||||
if (newMediaList.isEmpty()) {
|
||||
internalFilterErrors.onNext(MediaValidator.FilterError.NO_ITEMS)
|
||||
mediaErrors.postValue(MediaValidator.FilterError.NO_ITEMS)
|
||||
}
|
||||
|
||||
repository.deleteBlobs(listOf(media))
|
||||
|
|
|
@ -2,15 +2,18 @@ package org.thoughtcrime.securesms.mediasend.v2.gallery
|
|||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import app.cash.exhaustive.Exhaustive
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.mediasend.Media
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator.Companion.requestPermissionsForCamera
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaValidator
|
||||
import org.thoughtcrime.securesms.mediasend.v2.review.MediaSelectionItemTouchHelper
|
||||
import org.thoughtcrime.securesms.permissions.Permissions
|
||||
|
||||
|
@ -47,6 +50,16 @@ 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 -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun ensureMediaGalleryFragment(): MediaGalleryFragment {
|
||||
|
|
|
@ -8,6 +8,7 @@ import android.view.View
|
|||
import android.widget.ImageView
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import android.widget.ViewSwitcher
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
@ -18,6 +19,7 @@ import androidx.fragment.app.viewModels
|
|||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import app.cash.exhaustive.Exhaustive
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment
|
||||
|
@ -30,6 +32,7 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator
|
|||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator.Companion.requestPermissionsForGallery
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaValidator
|
||||
import org.thoughtcrime.securesms.mms.SentMediaQuality
|
||||
import org.thoughtcrime.securesms.permissions.Permissions
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
|
@ -201,6 +204,19 @@ 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
object : OnBackPressedCallback(true) {
|
||||
|
@ -449,6 +465,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
|
|||
fun onSentWithResult(mediaSendActivityResult: MediaSendActivityResult)
|
||||
fun onSentWithoutResult()
|
||||
fun onSendError(error: Throwable)
|
||||
fun onNoMediaSelected()
|
||||
fun onPopFromReview()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3822,6 +3822,9 @@
|
|||
<string name="MediaReviewFragment__add_a_reply">Add a reply</string>
|
||||
<string name="MediaReviewFragment__send_to">Send to</string>
|
||||
<string name="MediaReviewFragment__view_once_message">View once message</string>
|
||||
<string name="MediaReviewFragment__one_or_more_items_were_too_large">One or more items were too large</string>
|
||||
<string name="MediaReviewFragment__one_or_more_items_were_invalid">One or more items were invalid</string>
|
||||
<string name="MediaReviewFragment__too_many_items_selected">Too many items selected</string>
|
||||
|
||||
<string name="ImageEditorHud__cancel">Cancel</string>
|
||||
<string name="ImageEditorHud__draw">Draw</string>
|
||||
|
|
Ładowanie…
Reference in New Issue