From 02ec7f104d327df53df687ddd1b8ac5b1cdc04ba Mon Sep 17 00:00:00 2001 From: DimitrisRK <55595100+DimitrisRK@users.noreply.github.com> Date: Tue, 7 Jul 2020 05:05:40 +0300 Subject: [PATCH] fix(scroll-view): android 'isScrollEnabled' will apply if changed while gesture is underway (#8695) --- e2e/ui-tests-app/app/scroll-view/main-page.ts | 1 + .../app/scroll-view/scroll-enabled-page.ts | 25 +++++++++++++++++++ .../app/scroll-view/scroll-enabled-page.xml | 7 ++++++ .../widgets/HorizontalScrollView.java | 2 +- .../widgets/VerticalScrollView.java | 2 +- 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.ts create mode 100644 e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.xml diff --git a/e2e/ui-tests-app/app/scroll-view/main-page.ts b/e2e/ui-tests-app/app/scroll-view/main-page.ts index 6f84bec33..8089762ea 100644 --- a/e2e/ui-tests-app/app/scroll-view/main-page.ts +++ b/e2e/ui-tests-app/app/scroll-view/main-page.ts @@ -17,6 +17,7 @@ export function loadExamples() { examples.set("safe-area-images", "scroll-view/safe-area-images-page"); examples.set("safe-area-images-overflow", "scroll-view/safe-area-images-overflow-page"); examples.set("layout-outside-scroll", "scroll-view/layout-outside-scroll-page"); + examples.set("scroll-enabled", "scroll-view/scroll-enabled-page"); return examples; } diff --git a/e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.ts b/e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.ts new file mode 100644 index 000000000..4be65ab52 --- /dev/null +++ b/e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.ts @@ -0,0 +1,25 @@ +import { EventData as ObservableEventData } from "tns-core-modules/data/observable"; +import { GestureStateTypes, PanGestureEventData } from "tns-core-modules/ui/gestures"; +import { Page } from "tns-core-modules/ui/page"; + +export function pageLoaded(args: ObservableEventData) { + var page = args.object; +} + +export function panLayout(args: PanGestureEventData) +{ + const scrollView = args.object.parent; + + if (args.state === GestureStateTypes.began) { + args.object.previousDeltaY = 0; + scrollView.isScrollEnabled = false; + } + else if (args.state === GestureStateTypes.changed) { + const diff = (args.deltaY - args.object.previousDeltaY); + args.object.translateY += diff; + args.object.previousDeltaY = args.deltaY; + } + else if (args.state === GestureStateTypes.ended) { + scrollView.isScrollEnabled = true; + } +} diff --git a/e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.xml b/e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.xml new file mode 100644 index 000000000..ee85aac1d --- /dev/null +++ b/e2e/ui-tests-app/app/scroll-view/scroll-enabled-page.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java b/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java index c63489719..af8a05125 100644 --- a/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java +++ b/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/HorizontalScrollView.java @@ -70,7 +70,7 @@ public class HorizontalScrollView extends android.widget.HorizontalScrollView { @Override public boolean onTouchEvent(MotionEvent ev) { - if (!this.scrollEnabled && ev.getAction() == MotionEvent.ACTION_DOWN) { + if (!this.scrollEnabled && (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE)) { return false; } diff --git a/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java b/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java index db109467c..23144c2d9 100644 --- a/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java +++ b/tns-core-modules-widgets/android/widgets/src/main/java/org/nativescript/widgets/VerticalScrollView.java @@ -70,7 +70,7 @@ public class VerticalScrollView extends ScrollView { @Override public boolean onTouchEvent(MotionEvent ev) { - if (!this.scrollEnabled && ev.getAction() == MotionEvent.ACTION_DOWN) { + if (!this.scrollEnabled && (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE)) { return false; }