Pārlūkot izejas kodu

Pull EventDispatcher to Application scope (#2508)

Application class can now be accessed statically using Context to access AppModule
which provides dependencies needed throughout the app.
Guy Carmeli 6 gadus atpakaļ
vecāks
revīzija
f9151f0314

+ 7
- 5
lib/android/app/src/main/java/com/reactnativenavigation/anim/TopBarAnimator.java Parādīt failu

15
 public class TopBarAnimator {
15
 public class TopBarAnimator {
16
 
16
 
17
     private static final int DURATION_TOPBAR = 300;
17
     private static final int DURATION_TOPBAR = 300;
18
-    private DecelerateInterpolator decelerateInterpolator;
19
-    private AccelerateInterpolator accelerateInterpolator;
18
+    private final DecelerateInterpolator decelerateInterpolator = new DecelerateInterpolator();
19
+    private final AccelerateInterpolator accelerateInterpolator = new AccelerateInterpolator();
20
 
20
 
21
     private TopBar topBar;
21
     private TopBar topBar;
22
     private View contentView;
22
     private View contentView;
23
 
23
 
24
+    public TopBarAnimator(TopBar topBar) {
25
+        this.topBar = topBar;
26
+    }
27
+
24
     public TopBarAnimator(TopBar topBar, View contentView) {
28
     public TopBarAnimator(TopBar topBar, View contentView) {
25
-        decelerateInterpolator = new DecelerateInterpolator();
26
-        accelerateInterpolator = new AccelerateInterpolator();
27
         this.topBar = topBar;
29
         this.topBar = topBar;
28
         this.contentView = contentView;
30
         this.contentView = contentView;
29
     }
31
     }
60
         hide(0, accelerateInterpolator, DURATION_TOPBAR);
62
         hide(0, accelerateInterpolator, DURATION_TOPBAR);
61
     }
63
     }
62
 
64
 
63
-    public void hide(float startTranslation, TimeInterpolator interpolator, int duration) {
65
+    void hide(float startTranslation, TimeInterpolator interpolator, int duration) {
64
         ObjectAnimator topbarAnim = ObjectAnimator.ofFloat(topBar, View.TRANSLATION_Y, startTranslation, -1 * topBar.getMeasuredHeight());
66
         ObjectAnimator topbarAnim = ObjectAnimator.ofFloat(topBar, View.TRANSLATION_Y, startTranslation, -1 * topBar.getMeasuredHeight());
65
         topbarAnim.setInterpolator(interpolator);
67
         topbarAnim.setInterpolator(interpolator);
66
         topbarAnim.setDuration(duration);
68
         topbarAnim.setDuration(duration);

+ 22
- 54
lib/android/app/src/main/java/com/reactnativenavigation/anim/TopBarCollapseBehavior.java Parādīt failu

3
 
3
 
4
 import android.view.View;
4
 import android.view.View;
5
 
5
 
6
-import com.facebook.react.uimanager.events.EventDispatcher;
7
 import com.reactnativenavigation.interfaces.ScrollEventListener;
6
 import com.reactnativenavigation.interfaces.ScrollEventListener;
8
-import com.reactnativenavigation.utils.UiThread;
9
 import com.reactnativenavigation.views.TopBar;
7
 import com.reactnativenavigation.views.TopBar;
10
 
8
 
11
-public class TopBarCollapseBehavior {
9
+public class TopBarCollapseBehavior implements ScrollEventListener.OnScrollListener, ScrollEventListener.OnDragListener {
12
     private TopBar topBar;
10
     private TopBar topBar;
13
-
14
-    private EventDispatcher eventDispatcher;
15
     private ScrollEventListener scrollEventListener;
11
     private ScrollEventListener scrollEventListener;
16
-    private boolean dragStarted;
17
     private TopBarAnimator animator;
12
     private TopBarAnimator animator;
18
 
13
 
19
-    public TopBarCollapseBehavior(EventDispatcher eventDispatcher, TopBar topBar) {
20
-        this.eventDispatcher = eventDispatcher;
14
+    public TopBarCollapseBehavior(TopBar topBar, ScrollEventListener scrollEventListener) {
21
         this.topBar = topBar;
15
         this.topBar = topBar;
22
-        this.animator = new TopBarAnimator(topBar, null);
16
+        this.animator = new TopBarAnimator(topBar);
17
+        this.scrollEventListener = scrollEventListener;
23
     }
18
     }
24
 
19
 
25
     public void enableCollapse() {
20
     public void enableCollapse() {
26
-        scrollEventListener = (new ScrollEventListener(new ScrollEventListener.OnVerticalScrollListener() {
27
-            @Override
28
-            public void onVerticalScroll(int scrollY, int oldScrollY) {
29
-                if (scrollY < 0) return;
30
-                if (!dragStarted) return;
31
-
32
-                final int scrollDiff = calcScrollDiff(scrollY, oldScrollY, topBar.getMeasuredHeight());
33
-                final float nextTranslation = topBar.getTranslationY() - scrollDiff;
34
-                if (scrollDiff < 0) {
35
-                    down(topBar.getMeasuredHeight(), nextTranslation);
36
-                } else {
37
-                    up(topBar.getMeasuredHeight(), nextTranslation);
38
-                }
39
-            }
21
+        scrollEventListener.register(topBar, this, this);
22
+    }
40
 
23
 
41
-            @Override
42
-            public void onDrag(boolean started, double velocity) {
43
-                dragStarted = started;
44
-                UiThread.post(() -> {
45
-                    if (!dragStarted) {
46
-                        if (velocity > 0) {
47
-                            animator.show(topBar.getTranslationY(), null, 100);
48
-                        } else {
49
-                            animator.hide(topBar.getTranslationY(), null, 100);
50
-                        }
51
-                    }
52
-                });
53
-            }
54
-        }));
55
-        if (eventDispatcher != null) {
56
-            eventDispatcher.addListener(scrollEventListener);
57
-        }
24
+    public void disableCollapse() {
25
+        scrollEventListener.unregister();
26
+        topBar.setVisibility(View.VISIBLE);
27
+        topBar.setTranslationY(0);
58
     }
28
     }
59
 
29
 
60
-    private void up(int measuredHeight, float nextTranslation) {
30
+    @Override
31
+    public void onScrollUp(float nextTranslation) {
32
+        final int measuredHeight = topBar.getMeasuredHeight();
61
         if (nextTranslation < -measuredHeight && topBar.getVisibility() == View.VISIBLE) {
33
         if (nextTranslation < -measuredHeight && topBar.getVisibility() == View.VISIBLE) {
62
             topBar.setVisibility(View.GONE);
34
             topBar.setVisibility(View.GONE);
63
             topBar.setTranslationY(-measuredHeight);
35
             topBar.setTranslationY(-measuredHeight);
66
         }
38
         }
67
     }
39
     }
68
 
40
 
69
-    private void down(int measuredHeight, float nextTranslation) {
41
+    @Override
42
+    public void onScrollDown(float nextTranslation) {
43
+        final int measuredHeight = topBar.getMeasuredHeight();
70
         if (topBar.getVisibility() == View.GONE && nextTranslation > -measuredHeight) {
44
         if (topBar.getVisibility() == View.GONE && nextTranslation > -measuredHeight) {
71
             topBar.setVisibility(View.VISIBLE);
45
             topBar.setVisibility(View.VISIBLE);
72
             topBar.setTranslationY(nextTranslation);
46
             topBar.setTranslationY(nextTranslation);
75
         }
49
         }
76
     }
50
     }
77
 
51
 
78
-    private int calcScrollDiff(int scrollY, int oldScrollY, int measuredHeight) {
79
-        int diff = scrollY - oldScrollY;
80
-        if (Math.abs(diff) > measuredHeight) {
81
-            diff = (Math.abs(diff) / diff) * measuredHeight;
82
-        }
83
-        return diff;
52
+    @Override
53
+    public void onShow() {
54
+        animator.show(topBar.getTranslationY(), null, 100);
84
     }
55
     }
85
 
56
 
86
-    public void disableCollapse() {
87
-        if (eventDispatcher != null) {
88
-            eventDispatcher.removeListener(scrollEventListener);
89
-        }
90
-        topBar.setVisibility(View.VISIBLE);
91
-        topBar.setTranslationY(0);
57
+    @Override
58
+    public void onHide() {
59
+        animator.hide(topBar.getTranslationY(), null, 100);
92
     }
60
     }
93
 }
61
 }

+ 72
- 9
lib/android/app/src/main/java/com/reactnativenavigation/interfaces/ScrollEventListener.java Parādīt failu

1
 package com.reactnativenavigation.interfaces;
1
 package com.reactnativenavigation.interfaces;
2
 
2
 
3
 import com.facebook.react.uimanager.events.Event;
3
 import com.facebook.react.uimanager.events.Event;
4
+import com.facebook.react.uimanager.events.EventDispatcher;
4
 import com.facebook.react.uimanager.events.EventDispatcherListener;
5
 import com.facebook.react.uimanager.events.EventDispatcherListener;
5
 import com.facebook.react.views.scroll.ScrollEvent;
6
 import com.facebook.react.views.scroll.ScrollEvent;
6
 import com.reactnativenavigation.utils.ReflectionUtils;
7
 import com.reactnativenavigation.utils.ReflectionUtils;
8
+import com.reactnativenavigation.utils.UiThread;
7
 
9
 
8
 public class ScrollEventListener implements EventDispatcherListener {
10
 public class ScrollEventListener implements EventDispatcherListener {
9
 
11
 
10
-    private OnVerticalScrollListener verticalScrollListener;
12
+    public interface OnScrollListener {
13
+        void onScrollUp(float nextTranslation);
14
+
15
+        void onScrollDown(float nextTranslation);
16
+    }
17
+
18
+    public interface OnDragListener {
19
+        void onShow();
20
+
21
+        void onHide();
22
+    }
23
+
24
+    public interface ScrollAwareView {
25
+        int getMeasuredHeight();
26
+
27
+        float getTranslationY();
28
+    }
29
+
30
+    private ScrollAwareView view;
31
+    private OnScrollListener onScrollListener;
32
+    private OnDragListener dragListener;
33
+    private EventDispatcher eventDispatcher;
11
     private int prevScrollY = -1;
34
     private int prevScrollY = -1;
35
+    private boolean dragStarted;
12
 
36
 
13
-    public interface OnVerticalScrollListener {
14
-        void onVerticalScroll(int scrollY, int oldScrollY);
37
+    public ScrollEventListener(EventDispatcher eventDispatcher) {
38
+        this.eventDispatcher = eventDispatcher;
39
+    }
15
 
40
 
16
-        void onDrag(boolean started, double velocity);
41
+    public void register(ScrollAwareView scrollAwareView, OnScrollListener scrollListener, OnDragListener dragListener) {
42
+        this.view = scrollAwareView;
43
+        this.onScrollListener = scrollListener;
44
+        this.dragListener = dragListener;
45
+        eventDispatcher.addListener(this);
17
     }
46
     }
18
 
47
 
19
-    public ScrollEventListener(OnVerticalScrollListener verticalScrollListener) {
20
-        this.verticalScrollListener = verticalScrollListener;
48
+    public void unregister() {
49
+        eventDispatcher.removeListener(this);
21
     }
50
     }
22
 
51
 
23
     @Override
52
     @Override
31
         try {
60
         try {
32
             if ("topScroll".equals(event.getEventName())) {
61
             if ("topScroll".equals(event.getEventName())) {
33
                 int scrollY = (int) ReflectionUtils.getDeclaredField(event, "mScrollY");
62
                 int scrollY = (int) ReflectionUtils.getDeclaredField(event, "mScrollY");
34
-                verticalScrollListener.onVerticalScroll(scrollY, prevScrollY);
63
+                onVerticalScroll(scrollY, prevScrollY);
35
                 if (scrollY != prevScrollY) {
64
                 if (scrollY != prevScrollY) {
36
                     prevScrollY = scrollY;
65
                     prevScrollY = scrollY;
37
                 }
66
                 }
38
             } else if ("topScrollBeginDrag".equals(event.getEventName())) {
67
             } else if ("topScrollBeginDrag".equals(event.getEventName())) {
39
                 double velocity = (double) ReflectionUtils.getDeclaredField(event, "mYVelocity");
68
                 double velocity = (double) ReflectionUtils.getDeclaredField(event, "mYVelocity");
40
-                verticalScrollListener.onDrag(true, velocity);
69
+                onDrag(true, velocity);
41
             } else if ("topScrollEndDrag".equals(event.getEventName())) {
70
             } else if ("topScrollEndDrag".equals(event.getEventName())) {
42
                 double velocity = (double) ReflectionUtils.getDeclaredField(event, "mYVelocity");
71
                 double velocity = (double) ReflectionUtils.getDeclaredField(event, "mYVelocity");
43
-                verticalScrollListener.onDrag(false, velocity);
72
+                onDrag(false, velocity);
44
             }
73
             }
45
         } catch (Exception e) {
74
         } catch (Exception e) {
46
             e.printStackTrace();
75
             e.printStackTrace();
47
         }
76
         }
48
     }
77
     }
78
+
79
+    private void onVerticalScroll(int scrollY, int oldScrollY) {
80
+        if (scrollY < 0) return;
81
+        if (!dragStarted) return;
82
+
83
+        final int scrollDiff = calcScrollDiff(scrollY, oldScrollY, view.getMeasuredHeight());
84
+        final float translationY = view.getTranslationY() - scrollDiff;
85
+        if (scrollDiff < 0) {
86
+            onScrollListener.onScrollDown(translationY);
87
+        } else {
88
+            onScrollListener.onScrollUp(translationY);
89
+        }
90
+    }
91
+
92
+    private int calcScrollDiff(int scrollY, int oldScrollY, int measuredHeight) {
93
+        int diff = scrollY - oldScrollY;
94
+        if (Math.abs(diff) > measuredHeight) {
95
+            diff = (Math.abs(diff) / diff) * measuredHeight;
96
+        }
97
+        return diff;
98
+    }
99
+
100
+    private void onDrag(boolean started, double velocity) {
101
+        dragStarted = started;
102
+        UiThread.post(() -> {
103
+            if (!dragStarted) {
104
+                if (velocity > 0) {
105
+                    dragListener.onShow();
106
+                } else {
107
+                    dragListener.onHide();
108
+                }
109
+            }
110
+        });
111
+    }
49
 }
112
 }

+ 14
- 0
lib/android/app/src/main/java/com/reactnativenavigation/react/ReactView.java Parādīt failu

7
 
7
 
8
 import com.facebook.react.ReactInstanceManager;
8
 import com.facebook.react.ReactInstanceManager;
9
 import com.facebook.react.ReactRootView;
9
 import com.facebook.react.ReactRootView;
10
+import com.facebook.react.bridge.ReactContext;
11
+import com.facebook.react.uimanager.UIManagerModule;
12
+import com.facebook.react.uimanager.events.EventDispatcher;
13
+import com.reactnativenavigation.interfaces.ScrollEventListener;
10
 import com.reactnativenavigation.viewcontrollers.ComponentViewController;
14
 import com.reactnativenavigation.viewcontrollers.ComponentViewController;
11
 
15
 
12
 @SuppressLint("ViewConstructor")
16
 @SuppressLint("ViewConstructor")
64
 	public void sendOnNavigationButtonPressed(String buttonId) {
68
 	public void sendOnNavigationButtonPressed(String buttonId) {
65
 		new NavigationEvent(reactInstanceManager.getCurrentReactContext()).sendOnNavigationButtonPressed(componentId, buttonId);
69
 		new NavigationEvent(reactInstanceManager.getCurrentReactContext()).sendOnNavigationButtonPressed(componentId, buttonId);
66
 	}
70
 	}
71
+
72
+    @Override
73
+    public ScrollEventListener getScrollEventListener() {
74
+        return new ScrollEventListener(getEventDispatcher());
75
+    }
76
+
77
+    public EventDispatcher getEventDispatcher() {
78
+        ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
79
+        return reactContext == null ? null : reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher();
80
+    }
67
 }
81
 }

+ 3
- 0
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ComponentViewController.java Parādīt failu

4
 import android.support.annotation.*;
4
 import android.support.annotation.*;
5
 import android.view.*;
5
 import android.view.*;
6
 
6
 
7
+import com.reactnativenavigation.interfaces.ScrollEventListener;
7
 import com.reactnativenavigation.parse.*;
8
 import com.reactnativenavigation.parse.*;
8
 import com.reactnativenavigation.presentation.*;
9
 import com.reactnativenavigation.presentation.*;
9
 import com.reactnativenavigation.views.*;
10
 import com.reactnativenavigation.views.*;
28
         void sendComponentStop();
29
         void sendComponentStop();
29
 
30
 
30
         void sendOnNavigationButtonPressed(String buttonId);
31
         void sendOnNavigationButtonPressed(String buttonId);
32
+
33
+        ScrollEventListener getScrollEventListener();
31
     }
34
     }
32
 
35
 
33
     private final String componentName;
36
     private final String componentName;

+ 17
- 11
lib/android/app/src/main/java/com/reactnativenavigation/views/ComponentLayout.java Parādīt failu

1
 package com.reactnativenavigation.views;
1
 package com.reactnativenavigation.views;
2
 
2
 
3
-import android.annotation.*;
4
-import android.content.*;
5
-import android.view.*;
6
-import android.widget.*;
3
+import android.annotation.SuppressLint;
4
+import android.content.Context;
5
+import android.view.View;
6
+import android.widget.RelativeLayout;
7
 
7
 
8
-import com.facebook.react.uimanager.events.*;
9
-import com.reactnativenavigation.parse.*;
10
-import com.reactnativenavigation.presentation.*;
11
-import com.reactnativenavigation.viewcontrollers.ComponentViewController.*;
8
+import com.reactnativenavigation.interfaces.ScrollEventListener;
9
+import com.reactnativenavigation.parse.Options;
10
+import com.reactnativenavigation.presentation.OptionsPresenter;
11
+import com.reactnativenavigation.viewcontrollers.ComponentViewController.IReactView;
12
 
12
 
13
-import static android.view.ViewGroup.LayoutParams.*;
13
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
14
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
14
 
15
 
15
 @SuppressLint("ViewConstructor")
16
 @SuppressLint("ViewConstructor")
16
 public class ComponentLayout extends RelativeLayout implements ReactComponent, TitleBarButton.OnClickListener {
17
 public class ComponentLayout extends RelativeLayout implements ReactComponent, TitleBarButton.OnClickListener {
19
     private IReactView reactView;
20
     private IReactView reactView;
20
     private final OptionsPresenter optionsPresenter;
21
     private final OptionsPresenter optionsPresenter;
21
 
22
 
22
-	public ComponentLayout(Context context, IReactView reactView, EventDispatcher eventDispatcher) {
23
+	public ComponentLayout(Context context, IReactView reactView) {
23
 		super(context);
24
 		super(context);
24
 		this.reactView = reactView;
25
 		this.reactView = reactView;
25
-		this.topBar = new TopBar(context, reactView.asView(), this, eventDispatcher);
26
+		this.topBar = new TopBar(context, reactView.asView(), reactView.getScrollEventListener(), this);
26
         optionsPresenter = new OptionsPresenter(this);
27
         optionsPresenter = new OptionsPresenter(this);
27
         initViews();
28
         initViews();
28
     }
29
     }
69
         reactView.sendOnNavigationButtonPressed(buttonId);
70
         reactView.sendOnNavigationButtonPressed(buttonId);
70
     }
71
     }
71
 
72
 
73
+    @Override
74
+    public ScrollEventListener getScrollEventListener() {
75
+        return reactView.getScrollEventListener();
76
+    }
77
+
72
     @Override
78
     @Override
73
     public TopBar getTopBar() {
79
     public TopBar getTopBar() {
74
         return topBar;
80
         return topBar;

+ 5
- 6
lib/android/app/src/main/java/com/reactnativenavigation/views/ComponentViewCreator.java Parādīt failu

1
 package com.reactnativenavigation.views;
1
 package com.reactnativenavigation.views;
2
 
2
 
3
-import android.app.*;
3
+import android.app.Activity;
4
 
4
 
5
-import com.facebook.react.*;
6
-import com.facebook.react.uimanager.*;
7
-import com.reactnativenavigation.react.*;
8
-import com.reactnativenavigation.viewcontrollers.*;
5
+import com.facebook.react.ReactInstanceManager;
6
+import com.reactnativenavigation.react.ReactComponentViewCreator;
7
+import com.reactnativenavigation.viewcontrollers.ComponentViewController;
9
 
8
 
10
 public class ComponentViewCreator implements ComponentViewController.ReactViewCreator {
9
 public class ComponentViewCreator implements ComponentViewController.ReactViewCreator {
11
 
10
 
18
 	@Override
17
 	@Override
19
 	public ComponentViewController.IReactView create(Activity activity, String componentId, String componentName) {
18
 	public ComponentViewController.IReactView create(Activity activity, String componentId, String componentName) {
20
         ComponentViewController.IReactView reactView = new ReactComponentViewCreator(instanceManager).create(activity, componentId, componentName);
19
         ComponentViewController.IReactView reactView = new ReactComponentViewCreator(instanceManager).create(activity, componentId, componentName);
21
-        return new ComponentLayout(activity, reactView, instanceManager.getCurrentReactContext().getNativeModule(UIManagerModule.class).getEventDispatcher());
20
+        return new ComponentLayout(activity, reactView);
22
 	}
21
 	}
23
 }
22
 }

+ 4
- 4
lib/android/app/src/main/java/com/reactnativenavigation/views/TopBar.java Parādīt failu

13
 import android.view.ViewGroup;
13
 import android.view.ViewGroup;
14
 import android.widget.TextView;
14
 import android.widget.TextView;
15
 
15
 
16
-import com.facebook.react.uimanager.events.EventDispatcher;
17
 import com.reactnativenavigation.anim.TopBarAnimator;
16
 import com.reactnativenavigation.anim.TopBarAnimator;
18
 import com.reactnativenavigation.anim.TopBarCollapseBehavior;
17
 import com.reactnativenavigation.anim.TopBarCollapseBehavior;
18
+import com.reactnativenavigation.interfaces.ScrollEventListener;
19
 import com.reactnativenavigation.parse.Button;
19
 import com.reactnativenavigation.parse.Button;
20
 import com.reactnativenavigation.parse.Color;
20
 import com.reactnativenavigation.parse.Color;
21
 import com.reactnativenavigation.parse.Number;
21
 import com.reactnativenavigation.parse.Number;
25
 import java.util.ArrayList;
25
 import java.util.ArrayList;
26
 
26
 
27
 @SuppressLint("ViewConstructor")
27
 @SuppressLint("ViewConstructor")
28
-public class TopBar extends AppBarLayout {
28
+public class TopBar extends AppBarLayout implements ScrollEventListener.ScrollAwareView {
29
     private final Toolbar titleBar;
29
     private final Toolbar titleBar;
30
     private TitleBarButton.OnClickListener onClickListener;
30
     private TitleBarButton.OnClickListener onClickListener;
31
     private final TopBarCollapseBehavior collapsingBehavior;
31
     private final TopBarCollapseBehavior collapsingBehavior;
32
     private final TopBarAnimator animator;
32
     private final TopBarAnimator animator;
33
     private TopTabs topTabs;
33
     private TopTabs topTabs;
34
 
34
 
35
-    public TopBar(final Context context, View contentView, TitleBarButton.OnClickListener onClickListener, EventDispatcher eventDispatcher) {
35
+    public TopBar(final Context context, View contentView, ScrollEventListener scrollEventListener, TitleBarButton.OnClickListener onClickListener) {
36
         super(context);
36
         super(context);
37
         this.onClickListener = onClickListener;
37
         this.onClickListener = onClickListener;
38
-        collapsingBehavior = new TopBarCollapseBehavior(eventDispatcher, this);
38
+        collapsingBehavior = new TopBarCollapseBehavior(this, scrollEventListener);
39
         titleBar = new Toolbar(context);
39
         titleBar = new Toolbar(context);
40
         topTabs = new TopTabs(getContext());
40
         topTabs = new TopTabs(getContext());
41
         this.animator = new TopBarAnimator(this, contentView);
41
         this.animator = new TopBarAnimator(this, contentView);

+ 6
- 0
lib/android/app/src/main/java/com/reactnativenavigation/views/TopTab.java Parādīt failu

5
 import android.view.View;
5
 import android.view.View;
6
 import android.widget.FrameLayout;
6
 import android.widget.FrameLayout;
7
 
7
 
8
+import com.reactnativenavigation.interfaces.ScrollEventListener;
8
 import com.reactnativenavigation.viewcontrollers.ComponentViewController.IReactView;
9
 import com.reactnativenavigation.viewcontrollers.ComponentViewController.IReactView;
9
 
10
 
10
 @SuppressLint("ViewConstructor")
11
 @SuppressLint("ViewConstructor")
47
     public void sendOnNavigationButtonPressed(String buttonId) {
48
     public void sendOnNavigationButtonPressed(String buttonId) {
48
         reactView.sendOnNavigationButtonPressed(buttonId);
49
         reactView.sendOnNavigationButtonPressed(buttonId);
49
     }
50
     }
51
+
52
+    @Override
53
+    public ScrollEventListener getScrollEventListener() {
54
+        return reactView.getScrollEventListener();
55
+    }
50
 }
56
 }

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/views/TopTabsLayout.java Parādīt failu

26
         super(context);
26
         super(context);
27
         this.tabs = tabs;
27
         this.tabs = tabs;
28
         viewPager = new TopTabsViewPager(context, tabs, adapter);
28
         viewPager = new TopTabsViewPager(context, tabs, adapter);
29
-        topBar = new TopBar(context, viewPager, this, null);
29
+        topBar = new TopBar(context, viewPager, null, this);
30
         topBar.setId(View.generateViewId());
30
         topBar.setId(View.generateViewId());
31
         optionsPresenter = new OptionsPresenter(this);
31
         optionsPresenter = new OptionsPresenter(this);
32
         initViews();
32
         initViews();

+ 7
- 1
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java Parādīt failu

4
 import android.view.*;
4
 import android.view.*;
5
 import android.widget.*;
5
 import android.widget.*;
6
 
6
 
7
+import com.reactnativenavigation.interfaces.ScrollEventListener;
7
 import com.reactnativenavigation.parse.*;
8
 import com.reactnativenavigation.parse.*;
8
 import com.reactnativenavigation.presentation.*;
9
 import com.reactnativenavigation.presentation.*;
9
 import com.reactnativenavigation.views.*;
10
 import com.reactnativenavigation.views.*;
17
     public TestComponentLayout(final Context context) {
18
     public TestComponentLayout(final Context context) {
18
         super(context);
19
         super(context);
19
         contentView = new View(context);
20
         contentView = new View(context);
20
-        topBar = new TopBar(context, contentView, this, null);
21
+        topBar = new TopBar(context, contentView, null, this);
21
         addView(topBar);
22
         addView(topBar);
22
         addView(contentView);
23
         addView(contentView);
23
         optionsPresenter = new OptionsPresenter(this);
24
         optionsPresenter = new OptionsPresenter(this);
73
 
74
 
74
     }
75
     }
75
 
76
 
77
+    @Override
78
+    public ScrollEventListener getScrollEventListener() {
79
+        return null;
80
+    }
81
+
76
     @Override
82
     @Override
77
     public void onPress(String buttonId) {
83
     public void onPress(String buttonId) {
78
 
84
 

+ 0
- 70
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentView.java Parādīt failu

1
-package com.reactnativenavigation.mocks;
2
-
3
-import android.content.*;
4
-import android.view.*;
5
-
6
-import com.reactnativenavigation.parse.*;
7
-import com.reactnativenavigation.views.*;
8
-
9
-public class TestComponentView extends View implements ReactComponent, TitleBarButton.OnClickListener {
10
-
11
-    private TopBar topBar;
12
-
13
-    public TestComponentView(final Context context) {
14
-        super(context);
15
-        topBar = new TopBar(context, this, this, null);
16
-
17
-    }
18
-
19
-    @Override
20
-    public boolean isReady() {
21
-        return false;
22
-    }
23
-
24
-    @Override
25
-    public View asView() {
26
-        return this;
27
-    }
28
-
29
-    @Override
30
-    public void destroy() {
31
-    }
32
-
33
-    @Override
34
-    public void sendComponentStart() {
35
-    }
36
-
37
-    @Override
38
-    public void sendComponentStop() {
39
-    }
40
-
41
-    @Override
42
-    public void applyOptions(Options options) {
43
-
44
-    }
45
-
46
-    @Override
47
-    public void sendOnNavigationButtonPressed(String id) {
48
-
49
-    }
50
-
51
-    @Override
52
-    public TopBar getTopBar() {
53
-        return topBar;
54
-    }
55
-
56
-    @Override
57
-    public void drawBehindTopBar() {
58
-
59
-    }
60
-
61
-    @Override
62
-    public void drawBelowTopBar() {
63
-
64
-    }
65
-
66
-    @Override
67
-    public void onPress(String buttonId) {
68
-
69
-    }
70
-}

+ 6
- 0
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopTabLayoutMock.java Parādīt failu

3
 import android.content.*;
3
 import android.content.*;
4
 import android.view.*;
4
 import android.view.*;
5
 
5
 
6
+import com.reactnativenavigation.interfaces.ScrollEventListener;
6
 import com.reactnativenavigation.viewcontrollers.*;
7
 import com.reactnativenavigation.viewcontrollers.*;
7
 
8
 
8
 public class TopTabLayoutMock extends View implements ComponentViewController.IReactView {
9
 public class TopTabLayoutMock extends View implements ComponentViewController.IReactView {
40
     public void sendOnNavigationButtonPressed(String buttonId) {
41
     public void sendOnNavigationButtonPressed(String buttonId) {
41
 
42
 
42
     }
43
     }
44
+
45
+    @Override
46
+    public ScrollEventListener getScrollEventListener() {
47
+        return null;
48
+    }
43
 }
49
 }

+ 1
- 1
lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java Parādīt failu

9
 public class TopBarTest extends BaseTest {
9
 public class TopBarTest extends BaseTest {
10
     @Test
10
     @Test
11
     public void title() throws Exception {
11
     public void title() throws Exception {
12
-        TopBar topBar = new TopBar(newActivity(), null, buttonId -> {}, null);
12
+        TopBar topBar = new TopBar(newActivity(), null, null, buttonId -> {});
13
         assertThat(topBar.getTitle()).isEmpty();
13
         assertThat(topBar.getTitle()).isEmpty();
14
 
14
 
15
         topBar.setTitle("new title");
15
         topBar.setTitle("new title");