mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 12:38:33 +00:00
Remove duplicate error handling in MediaSelection.
This commit is contained in:
@@ -8,6 +8,7 @@ import android.os.Bundle
|
|||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
@@ -21,8 +22,10 @@ import androidx.navigation.fragment.NavHostFragment
|
|||||||
import androidx.transition.AutoTransition
|
import androidx.transition.AutoTransition
|
||||||
import androidx.transition.TransitionManager
|
import androidx.transition.TransitionManager
|
||||||
import com.google.android.material.animation.ArgbEvaluatorCompat
|
import com.google.android.material.animation.ArgbEvaluatorCompat
|
||||||
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import org.signal.core.util.BreakIteratorCompat
|
import org.signal.core.util.BreakIteratorCompat
|
||||||
import org.signal.core.util.OVERRIDE_TRANSITION_CLOSE_COMPAT
|
import org.signal.core.util.OVERRIDE_TRANSITION_CLOSE_COMPAT
|
||||||
|
import org.signal.core.util.concurrent.LifecycleDisposable
|
||||||
import org.signal.core.util.getParcelableArrayListExtraCompat
|
import org.signal.core.util.getParcelableArrayListExtraCompat
|
||||||
import org.signal.core.util.getParcelableExtraCompat
|
import org.signal.core.util.getParcelableExtraCompat
|
||||||
import org.signal.core.util.logging.Log
|
import org.signal.core.util.logging.Log
|
||||||
@@ -64,6 +67,8 @@ class MediaSelectionActivity :
|
|||||||
|
|
||||||
lateinit var viewModel: MediaSelectionViewModel
|
lateinit var viewModel: MediaSelectionViewModel
|
||||||
|
|
||||||
|
private val lifecycleDisposable = LifecycleDisposable()
|
||||||
|
|
||||||
private val textViewModel: TextStoryPostCreationViewModel by viewModels(
|
private val textViewModel: TextStoryPostCreationViewModel by viewModels(
|
||||||
factoryProducer = {
|
factoryProducer = {
|
||||||
TextStoryPostCreationViewModel.Factory(TextStoryPostSendRepository())
|
TextStoryPostCreationViewModel.Factory(TextStoryPostSendRepository())
|
||||||
@@ -172,9 +177,30 @@ class MediaSelectionActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycleDisposable.bindTo(this)
|
||||||
|
lifecycleDisposable += viewModel.mediaErrors
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::handleError)
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback(OnBackPressed())
|
onBackPressedDispatcher.addCallback(OnBackPressed())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleError(error: MediaValidator.FilterError) {
|
||||||
|
when (error) {
|
||||||
|
MediaValidator.FilterError.None -> return
|
||||||
|
MediaValidator.FilterError.ItemTooLarge -> Toast.makeText(this, R.string.MediaReviewFragment__one_or_more_items_were_too_large, Toast.LENGTH_SHORT).show()
|
||||||
|
MediaValidator.FilterError.ItemInvalidType -> Toast.makeText(this, R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
|
||||||
|
MediaValidator.FilterError.TooManyItems -> Toast.makeText(this, R.string.MediaReviewFragment__too_many_items_selected, Toast.LENGTH_SHORT).show()
|
||||||
|
is MediaValidator.FilterError.NoItems -> {
|
||||||
|
if (error.cause != null) {
|
||||||
|
handleError(error.cause)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel.clearMediaErrors()
|
||||||
|
}
|
||||||
|
|
||||||
private fun animateTextStyling(selectedSwitch: TextView, unselectedSwitch: TextView, duration: Long) {
|
private fun animateTextStyling(selectedSwitch: TextView, unselectedSwitch: TextView, duration: Long) {
|
||||||
val offTextColor = ContextCompat.getColor(this, R.color.signal_colorOnSurface)
|
val offTextColor = ContextCompat.getColor(this, R.color.signal_colorOnSurface)
|
||||||
val onTextColor = ContextCompat.getColor(this, R.color.signal_colorSecondaryContainer)
|
val onTextColor = ContextCompat.getColor(this, R.color.signal_colorSecondaryContainer)
|
||||||
|
|||||||
@@ -2,20 +2,16 @@ package org.thoughtcrime.securesms.mediasend.v2.gallery
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|
||||||
import org.signal.core.util.concurrent.LifecycleDisposable
|
|
||||||
import org.thoughtcrime.securesms.R
|
import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.mediasend.Media
|
import org.thoughtcrime.securesms.mediasend.Media
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator
|
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator.Companion.requestPermissionsForCamera
|
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator.Companion.requestPermissionsForCamera
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
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.mediasend.v2.review.MediaSelectionItemTouchHelper
|
||||||
import org.thoughtcrime.securesms.permissions.Permissions
|
import org.thoughtcrime.securesms.permissions.Permissions
|
||||||
|
|
||||||
@@ -25,8 +21,6 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
|
|||||||
|
|
||||||
private lateinit var mediaGalleryFragment: MediaGalleryFragment
|
private lateinit var mediaGalleryFragment: MediaGalleryFragment
|
||||||
|
|
||||||
private val lifecycleDisposable = LifecycleDisposable()
|
|
||||||
|
|
||||||
private val navigator = MediaSelectionNavigator(
|
private val navigator = MediaSelectionNavigator(
|
||||||
toCamera = R.id.action_mediaGalleryFragment_to_mediaCaptureFragment
|
toCamera = R.id.action_mediaGalleryFragment_to_mediaCaptureFragment
|
||||||
)
|
)
|
||||||
@@ -61,27 +55,6 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
lifecycleDisposable.bindTo(viewLifecycleOwner)
|
|
||||||
lifecycleDisposable += sharedViewModel.mediaErrors
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(this::handleError)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleError(error: MediaValidator.FilterError) {
|
|
||||||
when (error) {
|
|
||||||
MediaValidator.FilterError.None -> return
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedViewModel.clearMediaErrors()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ensureMediaGalleryFragment(): MediaGalleryFragment {
|
private fun ensureMediaGalleryFragment(): MediaGalleryFragment {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import android.view.ViewGroup
|
|||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
|
||||||
import android.widget.ViewSwitcher
|
import android.widget.ViewSwitcher
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
@@ -32,7 +31,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import androidx.viewpager2.widget.ViewPager2
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.android.material.imageview.ShapeableImageView
|
import com.google.android.material.imageview.ShapeableImageView
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|
||||||
import org.signal.core.util.bytes
|
import org.signal.core.util.bytes
|
||||||
import org.signal.core.util.concurrent.LifecycleDisposable
|
import org.signal.core.util.concurrent.LifecycleDisposable
|
||||||
import org.signal.core.util.concurrent.SimpleTask
|
import org.signal.core.util.concurrent.SimpleTask
|
||||||
@@ -53,7 +51,6 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations
|
|||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator
|
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionNavigator
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState
|
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.MediaValidator
|
|
||||||
import org.thoughtcrime.securesms.mediasend.v2.stories.StoriesMultiselectForwardActivity
|
import org.thoughtcrime.securesms.mediasend.v2.stories.StoriesMultiselectForwardActivity
|
||||||
import org.thoughtcrime.securesms.mms.MediaConstraints
|
import org.thoughtcrime.securesms.mms.MediaConstraints
|
||||||
import org.thoughtcrime.securesms.mms.SentMediaQuality
|
import org.thoughtcrime.securesms.mms.SentMediaQuality
|
||||||
@@ -368,11 +365,6 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul
|
|||||||
computeViewStateAndAnimate(state)
|
computeViewStateAndAnimate(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
disposables.bindTo(viewLifecycleOwner)
|
|
||||||
disposables += sharedViewModel.mediaErrors
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(this::handleMediaValidatorFilterError)
|
|
||||||
|
|
||||||
requireActivity().onBackPressedDispatcher.addCallback(
|
requireActivity().onBackPressedDispatcher.addCallback(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
object : OnBackPressedCallback(true) {
|
object : OnBackPressedCallback(true) {
|
||||||
@@ -442,25 +434,6 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul
|
|||||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
|
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleMediaValidatorFilterError(error: MediaValidator.FilterError) {
|
|
||||||
when (error) {
|
|
||||||
MediaValidator.FilterError.None -> return
|
|
||||||
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.cause)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(requireContext(), R.string.MediaReviewFragment__one_or_more_items_were_invalid, Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
callback.onNoMediaSelected()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedViewModel.clearMediaErrors()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun launchGallery() {
|
private fun launchGallery() {
|
||||||
val controller = findNavController()
|
val controller = findNavController()
|
||||||
navigator.goToGallery(controller)
|
navigator.goToGallery(controller)
|
||||||
|
|||||||
Reference in New Issue
Block a user