mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 04:58:45 +00:00
Fix MediaSelectionViewModel crash.
This commit is contained in:
@@ -15,9 +15,7 @@ import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.map
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import org.signal.core.util.Stopwatch
|
||||
import org.signal.core.util.concurrent.LifecycleDisposable
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.recyclerview.GridDividerDecoration
|
||||
import org.thoughtcrime.securesms.conversation.ManageContextMenu
|
||||
@@ -25,7 +23,6 @@ import org.thoughtcrime.securesms.databinding.V2MediaGalleryFragmentBinding
|
||||
import org.thoughtcrime.securesms.mediasend.Media
|
||||
import org.thoughtcrime.securesms.mediasend.MediaRepository
|
||||
import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
|
||||
import org.thoughtcrime.securesms.mediasend.v2.review.MediaGalleryGridItemTouchListener
|
||||
import org.thoughtcrime.securesms.permissions.PermissionCompat
|
||||
import org.thoughtcrime.securesms.permissions.Permissions
|
||||
@@ -48,10 +45,6 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
factoryProducer = { MediaGalleryViewModel.Factory(null, null, MediaGalleryRepository(requireContext(), MediaRepository())) }
|
||||
)
|
||||
|
||||
private val sharedViewModel: MediaSelectionViewModel by viewModels(
|
||||
ownerProducer = { requireActivity() }
|
||||
)
|
||||
|
||||
private lateinit var callbacks: Callbacks
|
||||
|
||||
private var selectedMediaTouchHelper: ItemTouchHelper? = null
|
||||
@@ -59,11 +52,10 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
|
||||
private val galleryAdapter = MappingAdapter()
|
||||
private val selectedAdapter = MappingAdapter()
|
||||
private val mediaGalleryGridItemTouchListener = MediaGalleryGridItemTouchListener()
|
||||
|
||||
private val viewStateLiveData = MutableLiveData(ViewState())
|
||||
|
||||
private val lifecycleDisposable = LifecycleDisposable()
|
||||
|
||||
private val onBackPressedCallback: OnBackPressedCallback = object : OnBackPressedCallback(false) {
|
||||
override fun handleOnBackPressed() {
|
||||
onBack()
|
||||
@@ -74,8 +66,6 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
callbacks = requireListener()
|
||||
val binding = V2MediaGalleryFragmentBinding.bind(view)
|
||||
|
||||
lifecycleDisposable.bindTo(this)
|
||||
|
||||
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
|
||||
|
||||
binding.mediaGalleryToolbar.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
||||
@@ -142,7 +132,6 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
binding.mediaGallerySelected.adapter = selectedAdapter
|
||||
selectedMediaTouchHelper?.attachToRecyclerView(binding.mediaGallerySelected)
|
||||
|
||||
val mediaGalleryGridItemTouchListener = MediaGalleryGridItemTouchListener()
|
||||
val onDragSelectListener = object : MediaGalleryGridItemTouchListener.OnDragSelectListener {
|
||||
override fun onSelectionStarted(start: Int) {
|
||||
galleryAdapter.getModel(start).ifPresent {
|
||||
@@ -262,13 +251,6 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
}
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, onBackPressedCallback)
|
||||
|
||||
lifecycleDisposable += sharedViewModel.mediaErrors
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe {
|
||||
mediaGalleryGridItemTouchListener.stopAutoScroll()
|
||||
mediaGalleryGridItemTouchListener.setIsActive(false)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -330,6 +312,11 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||
viewStateLiveData.value = state
|
||||
}
|
||||
|
||||
fun onMediaErrorOccurred() {
|
||||
mediaGalleryGridItemTouchListener.stopAutoScroll()
|
||||
mediaGalleryGridItemTouchListener.setIsActive(false)
|
||||
}
|
||||
|
||||
fun bindSelectedMediaItemDragHelper(helper: ItemTouchHelper) {
|
||||
selectedMediaTouchHelper = helper
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ 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
|
||||
@@ -29,6 +31,8 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
|
||||
ownerProducer = { requireActivity() }
|
||||
)
|
||||
|
||||
private val lifecycleDisposable = LifecycleDisposable()
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
val args = arguments
|
||||
val isFirst = when {
|
||||
@@ -38,6 +42,7 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
|
||||
else -> false
|
||||
}
|
||||
|
||||
lifecycleDisposable.bindTo(this)
|
||||
sharedViewModel.setSuppressEmptyError(isFirst)
|
||||
mediaGalleryFragment = ensureMediaGalleryFragment()
|
||||
|
||||
@@ -47,6 +52,12 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
|
||||
mediaGalleryFragment.onViewStateUpdated(MediaGalleryFragment.ViewState(state.selectedMedia))
|
||||
}
|
||||
|
||||
lifecycleDisposable += sharedViewModel.mediaErrors
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe {
|
||||
mediaGalleryFragment.onMediaErrorOccurred()
|
||||
}
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
object : OnBackPressedCallback(true) {
|
||||
|
||||
Reference in New Issue
Block a user