Skip to content

Commit 3238fe0

Browse files
committed
On Android allow pulling down only from the top to avoid breaking native gestures
1 parent 529b703 commit 3238fe0

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

packages/core/src/js/feedback/FeedbackFormManager.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import type { FeedbackFormStyles } from './FeedbackForm.types';
88
import { getFeedbackOptions } from './integration';
99
import { isModalSupported } from './utils';
1010

11+
const PULL_DOWN_CLOSE_THREESHOLD = 200;
12+
const PULL_DOWN_ANDROID_ACTIVATION_HEIGHT = 150;
13+
1114
class FeedbackFormManager {
1215
private static _isVisible = false;
1316
private static _setVisibility: (visible: boolean) => void;
@@ -53,21 +56,22 @@ class FeedbackFormProvider extends React.Component<FeedbackFormProviderProps> {
5356
panY: new Animated.Value(0),
5457
};
5558

56-
private _panResponder = (Platform.OS === 'android') ?
57-
PanResponder.create({ // Disable swiping on Android since it interferes with the platform gestures
58-
onStartShouldSetPanResponder: () => false,
59-
onMoveShouldSetPanResponder: () => false,
60-
}):
61-
PanResponder.create({
62-
onStartShouldSetPanResponder: () => true,
63-
onMoveShouldSetPanResponder: () => true,
59+
60+
private _panResponder = PanResponder.create({
61+
onStartShouldSetPanResponder: (evt, _gestureState) => {
62+
// On Android allow pulling down only from the top to avoid breaking native gestures
63+
return Platform.OS !== 'android' || evt.nativeEvent.pageY < PULL_DOWN_ANDROID_ACTIVATION_HEIGHT;
64+
},
65+
onMoveShouldSetPanResponder: (evt, _gestureState) => {
66+
return Platform.OS !== 'android' || evt.nativeEvent.pageY < PULL_DOWN_ANDROID_ACTIVATION_HEIGHT;
67+
},
6468
onPanResponderMove: (_, gestureState) => {
6569
if (gestureState.dy > 0) {
6670
this.state.panY.setValue(gestureState.dy);
6771
}
6872
},
6973
onPanResponderRelease: (_, gestureState) => {
70-
if (gestureState.dy > 200) { // Close on swipe below a certain threshold
74+
if (gestureState.dy > PULL_DOWN_CLOSE_THREESHOLD) { // Close on swipe below a certain threshold
7175
Animated.timing(this.state.panY, {
7276
toValue: 600,
7377
duration: 200,

0 commit comments

Comments
 (0)