From 6b745ba58a54f504f4e022e5da1b6c4603a1d2a6 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 23 Jun 2022 15:44:22 -0300 Subject: [PATCH] Allow swipe up to close viewer when viewing last story. --- .../viewer/page/StoryViewerPageFragment.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt index 044ba951ac..ee38f9af0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt @@ -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