Prevent showing Empty MediaPreview screen and avoid Camera/Gallery Stack.

This commit is contained in:
Sagar
2025-03-31 21:42:04 +05:30
committed by Greyson Parrelli
parent 5237568bec
commit 48f8ebd0a8
4 changed files with 30 additions and 11 deletions

View File

@@ -29,6 +29,10 @@ class MediaSelectionNavigator(
navController.safeNavigate(toGallery)
}
fun isPreviousScreenMediaReview(navController: NavController): Boolean {
return navController.previousBackStackEntry?.destination?.id == R.id.mediaReviewFragment
}
companion object {
fun Fragment.requestPermissionsForCamera(
onGranted: () -> Unit

View File

@@ -264,6 +264,10 @@ class MediaSelectionViewModel(
lastMediaDrag = Pair(0, 0)
}
fun isSelectedMediaEmpty(): Boolean {
return store.state.selectedMedia.isEmpty()
}
fun removeMedia(media: Media) {
val snapshot = store.state
val newMediaList = snapshot.selectedMedia - media

View File

@@ -119,7 +119,7 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme
}
}
if (isFirst()) {
if (isFirst() || sharedViewModel.isSelectedMediaEmpty()) {
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {

View File

@@ -53,16 +53,14 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
mediaGalleryFragment.onViewStateUpdated(MediaGalleryFragment.ViewState(state.selectedMedia))
}
if (arguments?.containsKey("first") == true) {
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
requireActivity().finish()
}
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
onBackPressed()
}
)
}
}
)
lifecycleDisposable.bindTo(viewLifecycleOwner)
lifecycleDisposable += sharedViewModel.mediaErrors
@@ -139,6 +137,19 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med
}
override fun onToolbarNavigationClicked() {
requireActivity().onBackPressed()
onBackPressed()
}
fun onBackPressed() {
if (arguments?.containsKey("first") == true) {
requireActivity().finish()
return
}
if (navigator.isPreviousScreenMediaReview(findNavController()) && sharedViewModel.isSelectedMediaEmpty()) {
requireActivity().finish()
} else {
findNavController().popBackStack()
}
}
}