Browse Source

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 years ago
parent
commit
f9151f0314

+ 7
- 5
lib/android/app/src/main/java/com/reactnativenavigation/anim/TopBarAnimator.java View File

@@ -15,15 +15,17 @@ import com.reactnativenavigation.views.TopBar;
15 15
 public class TopBarAnimator {
16 16
 
17 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 21
     private TopBar topBar;
22 22
     private View contentView;
23 23
 
24
+    public TopBarAnimator(TopBar topBar) {
25
+        this.topBar = topBar;
26
+    }
27
+
24 28
     public TopBarAnimator(TopBar topBar, View contentView) {
25
-        decelerateInterpolator = new DecelerateInterpolator();
26
-        accelerateInterpolator = new AccelerateInterpolator();
27 29
         this.topBar = topBar;
28 30
         this.contentView = contentView;
29 31
     }
@@ -60,7 +62,7 @@ public class TopBarAnimator {
60 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 66
         ObjectAnimator topbarAnim = ObjectAnimator.ofFloat(topBar, View.TRANSLATION_Y, startTranslation, -1 * topBar.getMeasuredHeight());
65 67
         topbarAnim.setInterpolator(interpolator);
66 68
         topbarAnim.setDuration(duration);

+ 22
- 54
lib/android/app/src/main/java/com/reactnativenavigation/anim/TopBarCollapseBehavior.java View File

@@ -3,61 +3,33 @@ package com.reactnativenavigation.anim;
3 3
 
4 4
 import android.view.View;
5 5
 
6
-import com.facebook.react.uimanager.events.EventDispatcher;
7 6
 import com.reactnativenavigation.interfaces.ScrollEventListener;
8
-import com.reactnativenavigation.utils.UiThread;
9 7
 import com.reactnativenavigation.views.TopBar;
10 8
 
11
-public class TopBarCollapseBehavior {
9
+public class TopBarCollapseBehavior implements ScrollEventListener.OnScrollListener, ScrollEventListener.OnDragListener {
12 10
     private TopBar topBar;
13
-
14
-    private EventDispatcher eventDispatcher;
15 11
     private ScrollEventListener scrollEventListener;
16
-    private boolean dragStarted;
17 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 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 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 33
         if (nextTranslation < -measuredHeight && topBar.getVisibility() == View.VISIBLE) {
62 34
             topBar.setVisibility(View.GONE);
63 35
             topBar.setTranslationY(-measuredHeight);
@@ -66,7 +38,9 @@ public class TopBarCollapseBehavior {
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 44
         if (topBar.getVisibility() == View.GONE && nextTranslation > -measuredHeight) {
71 45
             topBar.setVisibility(View.VISIBLE);
72 46
             topBar.setTranslationY(nextTranslation);
@@ -75,19 +49,13 @@ public class TopBarCollapseBehavior {
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 View File

@@ -1,23 +1,52 @@
1 1
 package com.reactnativenavigation.interfaces;
2 2
 
3 3
 import com.facebook.react.uimanager.events.Event;
4
+import com.facebook.react.uimanager.events.EventDispatcher;
4 5
 import com.facebook.react.uimanager.events.EventDispatcherListener;
5 6
 import com.facebook.react.views.scroll.ScrollEvent;
6 7
 import com.reactnativenavigation.utils.ReflectionUtils;
8
+import com.reactnativenavigation.utils.UiThread;
7 9
 
8 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 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 52
     @Override
@@ -31,19 +60,53 @@ public class ScrollEventListener implements EventDispatcherListener {
31 60
         try {
32 61
             if ("topScroll".equals(event.getEventName())) {
33 62
                 int scrollY = (int) ReflectionUtils.getDeclaredField(event, "mScrollY");
34
-                verticalScrollListener.onVerticalScroll(scrollY, prevScrollY);
63
+                onVerticalScroll(scrollY, prevScrollY);
35 64
                 if (scrollY != prevScrollY) {
36 65
                     prevScrollY = scrollY;
37 66
                 }
38 67
             } else if ("topScrollBeginDrag".equals(event.getEventName())) {
39 68
                 double velocity = (double) ReflectionUtils.getDeclaredField(event, "mYVelocity");
40
-                verticalScrollListener.onDrag(true, velocity);
69
+                onDrag(true, velocity);
41 70
             } else if ("topScrollEndDrag".equals(event.getEventName())) {
42 71
                 double velocity = (double) ReflectionUtils.getDeclaredField(event, "mYVelocity");
43
-                verticalScrollListener.onDrag(false, velocity);
72
+                onDrag(false, velocity);
44 73
             }
45 74
         } catch (Exception e) {
46 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 View File

@@ -7,6 +7,10 @@ import android.view.View;
7 7
 
8 8
 import com.facebook.react.ReactInstanceManager;
9 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 14
 import com.reactnativenavigation.viewcontrollers.ComponentViewController;
11 15
 
12 16
 @SuppressLint("ViewConstructor")
@@ -64,4 +68,14 @@ public class ReactView extends ReactRootView implements ComponentViewController.
64 68
 	public void sendOnNavigationButtonPressed(String buttonId) {
65 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 View File

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

+ 17
- 11
lib/android/app/src/main/java/com/reactnativenavigation/views/ComponentLayout.java View File

@@ -1,16 +1,17 @@
1 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 16
 @SuppressLint("ViewConstructor")
16 17
 public class ComponentLayout extends RelativeLayout implements ReactComponent, TitleBarButton.OnClickListener {
@@ -19,10 +20,10 @@ public class ComponentLayout extends RelativeLayout implements ReactComponent, T
19 20
     private IReactView reactView;
20 21
     private final OptionsPresenter optionsPresenter;
21 22
 
22
-	public ComponentLayout(Context context, IReactView reactView, EventDispatcher eventDispatcher) {
23
+	public ComponentLayout(Context context, IReactView reactView) {
23 24
 		super(context);
24 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 27
         optionsPresenter = new OptionsPresenter(this);
27 28
         initViews();
28 29
     }
@@ -69,6 +70,11 @@ public class ComponentLayout extends RelativeLayout implements ReactComponent, T
69 70
         reactView.sendOnNavigationButtonPressed(buttonId);
70 71
     }
71 72
 
73
+    @Override
74
+    public ScrollEventListener getScrollEventListener() {
75
+        return reactView.getScrollEventListener();
76
+    }
77
+
72 78
     @Override
73 79
     public TopBar getTopBar() {
74 80
         return topBar;

+ 5
- 6
lib/android/app/src/main/java/com/reactnativenavigation/views/ComponentViewCreator.java View File

@@ -1,11 +1,10 @@
1 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 9
 public class ComponentViewCreator implements ComponentViewController.ReactViewCreator {
11 10
 
@@ -18,6 +17,6 @@ public class ComponentViewCreator implements ComponentViewController.ReactViewCr
18 17
 	@Override
19 18
 	public ComponentViewController.IReactView create(Activity activity, String componentId, String componentName) {
20 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 View File

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

+ 6
- 0
lib/android/app/src/main/java/com/reactnativenavigation/views/TopTab.java View File

@@ -5,6 +5,7 @@ import android.content.Context;
5 5
 import android.view.View;
6 6
 import android.widget.FrameLayout;
7 7
 
8
+import com.reactnativenavigation.interfaces.ScrollEventListener;
8 9
 import com.reactnativenavigation.viewcontrollers.ComponentViewController.IReactView;
9 10
 
10 11
 @SuppressLint("ViewConstructor")
@@ -47,4 +48,9 @@ public class TopTab extends FrameLayout implements IReactView {
47 48
     public void sendOnNavigationButtonPressed(String buttonId) {
48 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 View File

@@ -26,7 +26,7 @@ public class TopTabsLayout extends RelativeLayout implements Component, TitleBar
26 26
         super(context);
27 27
         this.tabs = tabs;
28 28
         viewPager = new TopTabsViewPager(context, tabs, adapter);
29
-        topBar = new TopBar(context, viewPager, this, null);
29
+        topBar = new TopBar(context, viewPager, null, this);
30 30
         topBar.setId(View.generateViewId());
31 31
         optionsPresenter = new OptionsPresenter(this);
32 32
         initViews();

+ 7
- 1
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java View File

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

+ 0
- 70
lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentView.java View File

@@ -1,70 +0,0 @@
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 View File

@@ -3,6 +3,7 @@ package com.reactnativenavigation.mocks;
3 3
 import android.content.*;
4 4
 import android.view.*;
5 5
 
6
+import com.reactnativenavigation.interfaces.ScrollEventListener;
6 7
 import com.reactnativenavigation.viewcontrollers.*;
7 8
 
8 9
 public class TopTabLayoutMock extends View implements ComponentViewController.IReactView {
@@ -40,4 +41,9 @@ public class TopTabLayoutMock extends View implements ComponentViewController.IR
40 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 View File

@@ -9,7 +9,7 @@ import static org.assertj.core.api.Java6Assertions.*;
9 9
 public class TopBarTest extends BaseTest {
10 10
     @Test
11 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 13
         assertThat(topBar.getTitle()).isEmpty();
14 14
 
15 15
         topBar.setTitle("new title");