Remove duplicate error handling in MediaSelection.

This commit is contained in:
Sagar
2025-04-09 19:24:53 +05:30
committed by Michelle Tang
parent d81616d23c
commit 6afeb45f43
3 changed files with 26 additions and 54 deletions

View File

@@ -8,6 +8,7 @@ import android.os.Bundle
import android.view.KeyEvent
import android.widget.FrameLayout
import android.widget.TextView
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatDelegate
@@ -21,8 +22,10 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.transition.AutoTransition
import androidx.transition.TransitionManager
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.OVERRIDE_TRANSITION_CLOSE_COMPAT
import org.signal.core.util.concurrent.LifecycleDisposable
import org.signal.core.util.getParcelableArrayListExtraCompat
import org.signal.core.util.getParcelableExtraCompat
import org.signal.core.util.logging.Log
@@ -64,6 +67,8 @@ class MediaSelectionActivity :
lateinit var viewModel: MediaSelectionViewModel
private val lifecycleDisposable = LifecycleDisposable()
private val textViewModel: TextStoryPostCreationViewModel by viewModels(
factoryProducer = {
TextStoryPostCreationViewModel.Factory(TextStoryPostSendRepository())
@@ -172,9 +177,30 @@ class MediaSelectionActivity :
}
}
lifecycleDisposable.bindTo(this)
lifecycleDisposable += viewModel.mediaErrors
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleError)
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) {
val offTextColor = ContextCompat.getColor(this, R.color.signal_colorOnSurface)
val onTextColor = ContextCompat.getColor(this, R.color.signal_colorSecondaryContainer)

View File

@@ -2,20 +2,16 @@ 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.navigation.fragment.findNavController
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.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
@@ -25,8 +21,6 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
private lateinit var mediaGalleryFragment: MediaGalleryFragment
private val lifecycleDisposable = LifecycleDisposable()
private val navigator = MediaSelectionNavigator(
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 {

View File

@@ -16,7 +16,6 @@ import android.view.ViewGroup
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
@@ -32,7 +31,6 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.dialog.MaterialAlertDialogBuilder
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.concurrent.LifecycleDisposable
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.MediaSelectionState
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.mms.MediaConstraints
import org.thoughtcrime.securesms.mms.SentMediaQuality
@@ -368,11 +365,6 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul
computeViewStateAndAnimate(state)
}
disposables.bindTo(viewLifecycleOwner)
disposables += sharedViewModel.mediaErrors
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleMediaValidatorFilterError)
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
@@ -442,25 +434,6 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul
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() {
val controller = findNavController()
navigator.goToGallery(controller)