Allow swipe up to close viewer when viewing last story.

This commit is contained in:
Alex Hart
2022-06-23 15:44:22 -03:00
committed by Cody Henthorne
parent 6ddb5b983f
commit 6b745ba58a

View File

@@ -192,7 +192,7 @@ class StoryViewerPageFragment :
viewModel.setIsUserTouching(false)
val canCloseFromHorizontalSlide = requireView().translationX > DimensionUnit.DP.toPixels(56f)
val canCloseFromVerticalSlide = requireView().translationY > 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()
} else {
@@ -869,10 +869,12 @@ class StoryViewerPageFragment :
override fun onScroll(e1: MotionEvent, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
val isFirstStory = sharedViewModel.stateSnapshot.page == 0
val isLastStory = sharedViewModel.stateSnapshot.pages.lastIndex == sharedViewModel.stateSnapshot.page
val isXMagnitudeGreaterThanYMagnitude = abs(distanceX) > abs(distanceY) || viewToTranslate.translationX > 0f
val isFirstAndHasYTranslationOrNegativeY = isFirstStory && (viewToTranslate.translationY > 0f || distanceY < 0f)
val isLastAndHasYTranslationOrNegativeY = isLastStory && (viewToTranslate.translationY < 0f || distanceY > 0f)
sharedViewModel.setIsChildScrolling(isXMagnitudeGreaterThanYMagnitude || isFirstAndHasYTranslationOrNegativeY)
sharedViewModel.setIsChildScrolling(isXMagnitudeGreaterThanYMagnitude || isFirstAndHasYTranslationOrNegativeY || isLastAndHasYTranslationOrNegativeY)
if (isFirstStory) {
val delta = max(0f, (e2.rawY - e1.rawY)) / 3f
val percent = INTERPOLATOR.getInterpolation(delta / maxSlide)
@@ -882,6 +884,15 @@ class StoryViewerPageFragment :
viewToTranslate.translationY = distance
}
if (isLastStory) {
val delta = max(0f, (e1.rawY - e2.rawY)) / 3f
val percent = -INTERPOLATOR.getInterpolation(delta / maxSlide)
val distance = maxSlide * percent
viewToTranslate.animate().cancel()
viewToTranslate.translationY = distance
}
val delta = max(0f, (e2.rawX - e1.rawX)) / 3f
val percent = INTERPOLATOR.getInterpolation(delta / maxSlide)
val distance = maxSlide * percent