mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-27 14:40:22 +00:00
Prevent wrong closing animation for stories.
This commit is contained in:
@@ -5,6 +5,7 @@ import android.graphics.Shader
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
@@ -89,7 +90,7 @@ class StoryViewerFragment :
|
||||
lifecycleDisposable.bindTo(viewLifecycleOwner)
|
||||
lifecycleDisposable += viewModel.state.observeOn(AndroidSchedulers.mainThread()).subscribe { state ->
|
||||
if (state.noPosts) {
|
||||
ActivityCompat.finishAfterTransition(requireActivity())
|
||||
onBackPressed(adapter.getRecipientId(storyPager.currentItem))
|
||||
}
|
||||
|
||||
adapter.setPages(state.pages)
|
||||
@@ -100,7 +101,7 @@ class StoryViewerFragment :
|
||||
pagerOnPageSelectedLock = false
|
||||
|
||||
if (state.page >= state.pages.size) {
|
||||
ActivityCompat.finishAfterTransition(requireActivity())
|
||||
onBackPressed(adapter.getRecipientId(storyPager.currentItem))
|
||||
lifecycleDisposable.clear()
|
||||
}
|
||||
}
|
||||
@@ -148,6 +149,23 @@ class StoryViewerFragment :
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
object : OnBackPressedCallback(true) {
|
||||
override fun handleOnBackPressed() {
|
||||
onBackPressed(adapter.getRecipientId(storyPager.currentItem))
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun onBackPressed(currentId: RecipientId) {
|
||||
if (viewModel.getInitialRecipientId() != currentId) {
|
||||
requireActivity().finish()
|
||||
} else {
|
||||
ActivityCompat.finishAfterTransition(requireActivity())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
|
||||
@@ -24,6 +24,10 @@ class StoryViewerPagerAdapter(
|
||||
DiffUtil.calculateDiff(callback).dispatchUpdatesTo(this)
|
||||
}
|
||||
|
||||
fun getRecipientId(position: Int): RecipientId {
|
||||
return pages[position]
|
||||
}
|
||||
|
||||
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
|
||||
super.onAttachedToRecyclerView(recyclerView)
|
||||
recyclerView.overScrollMode = RecyclerView.OVER_SCROLL_NEVER
|
||||
|
||||
@@ -91,6 +91,10 @@ class StoryViewerViewModel(
|
||||
refresh()
|
||||
}
|
||||
|
||||
fun getInitialRecipientId(): RecipientId {
|
||||
return storyViewerArgs.recipientId
|
||||
}
|
||||
|
||||
fun setIsDisplayingFirstTimeNavigation(isDisplayingFirstTimeNavigation: Boolean) {
|
||||
firstTimeNavigationPublisher.onNext(isDisplayingFirstTimeNavigation)
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.constraintlayout.widget.ConstraintSet
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.view.GestureDetectorCompat
|
||||
@@ -230,7 +231,7 @@ class StoryViewerPageFragment :
|
||||
)
|
||||
|
||||
closeView.setOnClickListener {
|
||||
requireActivity().onBackPressed()
|
||||
onBackPressed()
|
||||
}
|
||||
|
||||
val addToGroupStoryDelegate = AddToGroupStoryDelegate(this)
|
||||
@@ -288,7 +289,7 @@ class StoryViewerPageFragment :
|
||||
val canCloseFromHorizontalSlide = requireView().translationX > DimensionUnit.DP.toPixels(56f)
|
||||
val canCloseFromVerticalSlide = requireView().translationY > DimensionUnit.DP.toPixels(56f) || requireView().translationY < -DimensionUnit.DP.toPixels(56f)
|
||||
if ((canCloseFromHorizontalSlide || canCloseFromVerticalSlide) && event.actionMasked == MotionEvent.ACTION_UP) {
|
||||
requireActivity().onBackPressed()
|
||||
onBackPressed()
|
||||
} else {
|
||||
sharedViewModel.setIsChildScrolling(false)
|
||||
requireView().animate()
|
||||
@@ -516,6 +517,14 @@ class StoryViewerPageFragment :
|
||||
}
|
||||
}
|
||||
|
||||
private fun onBackPressed() {
|
||||
if (sharedViewModel.getInitialRecipientId() != storyViewerPageArgs.recipientId) {
|
||||
requireActivity().finish()
|
||||
} else {
|
||||
ActivityCompat.finishAfterTransition(requireActivity())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
viewModel.setIsFragmentResumed(true)
|
||||
|
||||
Reference in New Issue
Block a user