Fix navigation from camera crash.

fork-5.53.8
Cody Henthorne 2021-12-20 15:38:33 -05:00 zatwierdzone przez Alex Hart
rodzic 92df5b9564
commit bbadda5656
4 zmienionych plików z 26 dodań i 22 usunięć

Wyświetl plik

@ -1,10 +1,9 @@
package org.thoughtcrime.securesms.mediasend.v2
import android.Manifest
import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import androidx.navigation.NavController
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.util.navigation.safeNavigate
@ -13,20 +12,20 @@ class MediaSelectionNavigator(
private val toCamera: Int = -1,
private val toGallery: Int = -1
) {
fun goToReview(view: View) {
Navigation.findNavController(view).popBackStack(R.id.mediaReviewFragment, false)
fun goToReview(navController: NavController) {
navController.popBackStack(R.id.mediaReviewFragment, false)
}
fun goToCamera(view: View) {
fun goToCamera(navController: NavController) {
if (toCamera == -1) return
Navigation.findNavController(view).safeNavigate(toCamera)
navController.safeNavigate(toCamera)
}
fun goToGallery(view: View) {
fun goToGallery(navController: NavController) {
if (toGallery == -1) return
Navigation.findNavController(view).safeNavigate(toGallery)
navController.safeNavigate(toGallery)
}
companion object {

Wyświetl plik

@ -8,6 +8,7 @@ import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.LiveData
import androidx.navigation.fragment.findNavController
import app.cash.exhaustive.Exhaustive
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.R
@ -59,15 +60,13 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme
Toast.makeText(requireContext(), R.string.MediaSendActivity_camera_unavailable, Toast.LENGTH_SHORT).show()
}
is MediaCaptureEvent.MediaCaptureRendered -> {
captureChildFragment.fadeOutControls {
if (isFirst()) {
sharedViewModel.addCameraFirstCapture(event.media)
} else {
sharedViewModel.addMedia(event.media)
}
navigator.goToReview(view)
if (isFirst()) {
sharedViewModel.addCameraFirstCapture(event.media)
} else {
sharedViewModel.addMedia(event.media)
}
navigator.goToReview(findNavController())
}
}
}
@ -122,9 +121,10 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme
}
override fun onGalleryClicked() {
val controller = findNavController()
requestPermissionsForGallery {
captureChildFragment.fadeOutControls {
navigator.goToGallery(requireView())
navigator.goToGallery(controller)
}
}
}
@ -139,8 +139,9 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme
}
override fun onCameraCountButtonClicked() {
val controller = findNavController()
captureChildFragment.fadeOutControls {
navigator.goToReview(requireView())
navigator.goToReview(controller)
}
}

Wyświetl plik

@ -6,6 +6,7 @@ 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 app.cash.exhaustive.Exhaustive
import org.thoughtcrime.securesms.R
@ -100,17 +101,18 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
override fun onSelectedMediaClicked(media: Media) {
sharedViewModel.setFocusedMedia(media)
navigator.goToReview(requireView())
navigator.goToReview(findNavController())
}
override fun onNavigateToCamera() {
val controller = findNavController()
requestPermissionsForCamera {
navigator.goToCamera(requireView())
navigator.goToCamera(controller)
}
}
override fun onSubmit() {
navigator.goToReview(requireView())
navigator.goToReview(findNavController())
}
override fun onToolbarNavigationClicked() {

Wyświetl plik

@ -16,6 +16,7 @@ import androidx.core.graphics.drawable.DrawableCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.setFragmentResultListener
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
@ -241,8 +242,9 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
}
private fun launchGallery() {
val controller = findNavController()
requestPermissionsForGallery {
navigator.goToGallery(requireView())
navigator.goToGallery(controller)
}
}