Преглед на файлове

Various fab fixes

* Don't show fab of a screen that's pushed to a none active tab
* Change fab when navigating back in the stack with back button
* Add screens before SnackbarAndFabContainer
Guy Carmeli преди 8 години
родител
ревизия
f7250b2753

+ 3
- 1
android/app/src/main/java/com/reactnativenavigation/layouts/BottomTabsLayout.java Целия файл

127
         if (getCurrentScreenStack().canPop()) {
127
         if (getCurrentScreenStack().canPop()) {
128
             getCurrentScreenStack().pop(true);
128
             getCurrentScreenStack().pop(true);
129
             setBottomTabsStyleFromCurrentScreen();
129
             setBottomTabsStyleFromCurrentScreen();
130
+            EventBus.instance.post(new ScreenChangedEvent(getCurrentScreenStack().peek().getScreenParams()));
130
             return true;
131
             return true;
131
         } else {
132
         } else {
132
             return false;
133
             return false;
206
         screenStack.push(params, createScreenLayoutParams(params));
207
         screenStack.push(params, createScreenLayoutParams(params));
207
         if (isCurrentStack(screenStack)) {
208
         if (isCurrentStack(screenStack)) {
208
             bottomTabs.setStyleFromScreen(params.styleParams);
209
             bottomTabs.setStyleFromScreen(params.styleParams);
210
+            EventBus.instance.post(new ScreenChangedEvent(params));
209
         }
211
         }
210
-        EventBus.instance.post(new ScreenChangedEvent(params));
211
     }
212
     }
212
 
213
 
213
     @Override
214
     @Override
324
                 @Override
325
                 @Override
325
                 public void onScreenPopAnimationEnd() {
326
                 public void onScreenPopAnimationEnd() {
326
                     setBottomTabsStyleFromCurrentScreen();
327
                     setBottomTabsStyleFromCurrentScreen();
328
+                    EventBus.instance.post(new ScreenChangedEvent(getCurrentScreenStack().peek().getScreenParams()));
327
                 }
329
                 }
328
             });
330
             });
329
             return true;
331
             return true;

+ 14
- 11
android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java Целия файл

5
 import android.util.Log;
5
 import android.util.Log;
6
 import android.view.View;
6
 import android.view.View;
7
 import android.widget.RelativeLayout;
7
 import android.widget.RelativeLayout;
8
+import android.widget.RelativeLayout.LayoutParams;
8
 
9
 
9
 import com.reactnativenavigation.NavigationApplication;
10
 import com.reactnativenavigation.NavigationApplication;
10
 import com.reactnativenavigation.params.ScreenParams;
11
 import com.reactnativenavigation.params.ScreenParams;
48
         keyboardVisibilityDetector = new KeyboardVisibilityDetector(parent);
49
         keyboardVisibilityDetector = new KeyboardVisibilityDetector(parent);
49
     }
50
     }
50
 
51
 
51
-    public void pushInitialScreenWithAnimation(final ScreenParams initialScreenParams, RelativeLayout.LayoutParams params) {
52
+    public void pushInitialScreenWithAnimation(final ScreenParams initialScreenParams, LayoutParams params) {
52
         isStackVisible = true;
53
         isStackVisible = true;
53
         pushInitialScreen(initialScreenParams, params);
54
         pushInitialScreen(initialScreenParams, params);
54
         final Screen screen = stack.peek();
55
         final Screen screen = stack.peek();
61
         });
62
         });
62
     }
63
     }
63
 
64
 
64
-    public void pushInitialScreen(ScreenParams initialScreenParams, RelativeLayout.LayoutParams params) {
65
+    public void pushInitialScreen(ScreenParams initialScreenParams, LayoutParams params) {
65
         Screen initialScreen = ScreenFactory.create(activity, initialScreenParams, leftButtonOnClickListener);
66
         Screen initialScreen = ScreenFactory.create(activity, initialScreenParams, leftButtonOnClickListener);
66
         initialScreen.setVisibility(View.INVISIBLE);
67
         initialScreen.setVisibility(View.INVISIBLE);
67
         addScreen(initialScreen, params);
68
         addScreen(initialScreen, params);
68
     }
69
     }
69
 
70
 
70
-    public void push(final ScreenParams params, RelativeLayout.LayoutParams layoutParams) {
71
+    public void push(final ScreenParams params, LayoutParams layoutParams) {
71
         Screen nextScreen = ScreenFactory.create(activity, params, leftButtonOnClickListener);
72
         Screen nextScreen = ScreenFactory.create(activity, params, leftButtonOnClickListener);
72
         final Screen previousScreen = stack.peek();
73
         final Screen previousScreen = stack.peek();
73
         if (isStackVisible) {
74
         if (isStackVisible) {
74
-            pushScreenToVisibleStack(params, layoutParams, nextScreen, previousScreen);
75
+            pushScreenToVisibleStack(layoutParams, nextScreen, previousScreen);
75
         } else {
76
         } else {
76
             pushScreenToInvisibleStack(layoutParams, nextScreen, previousScreen);
77
             pushScreenToInvisibleStack(layoutParams, nextScreen, previousScreen);
77
         }
78
         }
78
     }
79
     }
79
 
80
 
80
-    private void pushScreenToVisibleStack(final ScreenParams params, RelativeLayout.LayoutParams layoutParams,
81
-                                          final Screen nextScreen, final Screen previousScreen) {
81
+    private void pushScreenToVisibleStack(LayoutParams layoutParams, final Screen nextScreen, final Screen previousScreen) {
82
         nextScreen.setVisibility(View.INVISIBLE);
82
         nextScreen.setVisibility(View.INVISIBLE);
83
         addScreen(nextScreen, layoutParams);
83
         addScreen(nextScreen, layoutParams);
84
         nextScreen.setOnDisplayListener(new Screen.OnDisplayListener() {
84
         nextScreen.setOnDisplayListener(new Screen.OnDisplayListener() {
85
             @Override
85
             @Override
86
             public void onDisplay() {
86
             public void onDisplay() {
87
-                nextScreen.show(params.animateScreenTransitions, new Runnable() {
87
+                nextScreen.show(nextScreen.screenParams.animateScreenTransitions, new Runnable() {
88
                     @Override
88
                     @Override
89
                     public void run() {
89
                     public void run() {
90
                         removePreviousWithoutUnmount(previousScreen);
90
                         removePreviousWithoutUnmount(previousScreen);
94
         });
94
         });
95
     }
95
     }
96
 
96
 
97
-    private void pushScreenToInvisibleStack(RelativeLayout.LayoutParams layoutParams, Screen nextScreen,
98
-                                            Screen previousScreen) {
97
+    private void pushScreenToInvisibleStack(LayoutParams layoutParams, Screen nextScreen, Screen previousScreen) {
99
         nextScreen.setVisibility(View.INVISIBLE);
98
         nextScreen.setVisibility(View.INVISIBLE);
100
         addScreen(nextScreen, layoutParams);
99
         addScreen(nextScreen, layoutParams);
101
         removePreviousWithoutUnmount(previousScreen);
100
         removePreviousWithoutUnmount(previousScreen);
102
     }
101
     }
103
 
102
 
104
-    private void addScreen(Screen screen, RelativeLayout.LayoutParams layoutParams) {
105
-        parent.addView(screen, layoutParams);
103
+    private void addScreen(Screen screen, LayoutParams layoutParams) {
104
+        addScreenBeforeSnackbarAndFabLayout(screen, layoutParams);
106
         stack.push(screen);
105
         stack.push(screen);
107
     }
106
     }
108
 
107
 
108
+    private void addScreenBeforeSnackbarAndFabLayout(Screen screen, LayoutParams layoutParams) {
109
+        parent.addView(screen, parent.getChildCount() - 1, layoutParams);
110
+    }
111
+
109
     private void removePreviousWithoutUnmount(Screen previous) {
112
     private void removePreviousWithoutUnmount(Screen previous) {
110
         previous.preventUnmountOnDetachedFromWindow();
113
         previous.preventUnmountOnDetachedFromWindow();
111
         parent.removeView(previous);
114
         parent.removeView(previous);