@@ -8,6 +8,9 @@ import type { FeedbackFormStyles } from './FeedbackForm.types';
88import { getFeedbackOptions } from './integration' ;
99import { isModalSupported } from './utils' ;
1010
11+ const PULL_DOWN_CLOSE_THREESHOLD = 200 ;
12+ const PULL_DOWN_ANDROID_ACTIVATION_HEIGHT = 150 ;
13+
1114class 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