From 6afeb45f431a07f1e9420a375bbde9cc63ff437c Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Wed, 9 Apr 2025 19:24:53 +0530 Subject: [PATCH] Remove duplicate error handling in MediaSelection. --- .../mediasend/v2/MediaSelectionActivity.kt | 26 ++++++++++++++++++ .../gallery/MediaSelectionGalleryFragment.kt | 27 ------------------- .../v2/review/MediaReviewFragment.kt | 27 ------------------- 3 files changed, 26 insertions(+), 54 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt index 2635f9c038..2dffaa6556 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt @@ -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) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt index 32988b187b..7cab9c0d22 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt @@ -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 { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt index 7dc0acfd2c..f278256657 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt @@ -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)