Yedidya Kennard 9 gadus atpakaļ
vecāks
revīzija
2bcc122807

+ 5
- 3
android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java Parādīt failu

202
 
202
 
203
     public abstract void push(Screen screen);
203
     public abstract void push(Screen screen);
204
 
204
 
205
+    public abstract Screen pop(String navID);
206
+
205
     @Override
207
     @Override
206
     public boolean onCreateOptionsMenu(Menu menu) {
208
     public boolean onCreateOptionsMenu(Menu menu) {
207
         mMenu = menu;
209
         mMenu = menu;
250
 
252
 
251
     @Override
253
     @Override
252
     public void onBackPressed() {
254
     public void onBackPressed() {
253
-        if (mReactInstanceManager != null) {
255
+        if (mReactInstanceManager != null)
254
             mReactInstanceManager.onBackPressed();
256
             mReactInstanceManager.onBackPressed();
255
-        } else {
257
+        //TODO uncomment and add current navID
258
+         else //if(pop() == null)
256
             super.onBackPressed();
259
             super.onBackPressed();
257
-        }
258
     }
260
     }
259
 
261
 
260
     @Override
262
     @Override

+ 6
- 0
android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java Parādīt failu

59
     public void push(Screen screen) {
59
     public void push(Screen screen) {
60
         //TODO
60
         //TODO
61
     }
61
     }
62
+
63
+    @Override
64
+    public Screen pop(String navID) {
65
+        return null;
66
+        //TODO
67
+    }
62
 }
68
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java Parādīt failu

43
     public void push(Screen screen) {
43
     public void push(Screen screen) {
44
         screenStack.push(screen);
44
         screenStack.push(screen);
45
     }
45
     }
46
+
47
+    @Override
48
+    public Screen pop(String navID) {
49
+        return screenStack.pop();
50
+    }
46
 }
51
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java Parādīt failu

45
         adapter.pushScreen(screen);
45
         adapter.pushScreen(screen);
46
     }
46
     }
47
 
47
 
48
+    @Override
49
+    public Screen pop(String navID) {
50
+        return adapter.pop(navID);
51
+    }
52
+
48
     private void setupToolbar() {
53
     private void setupToolbar() {
49
         setSupportActionBar(mToolbar);
54
         setSupportActionBar(mToolbar);
50
         mToolbar.setScreens(mScreens);
55
         mToolbar.setScreens(mScreens);

+ 10
- 2
android/app/src/main/java/com/reactnativenavigation/adapters/ViewPagerAdapter.java Parādīt failu

3
 import android.support.design.widget.TabLayout;
3
 import android.support.design.widget.TabLayout;
4
 import android.support.v4.view.PagerAdapter;
4
 import android.support.v4.view.PagerAdapter;
5
 import android.support.v4.view.ViewPager;
5
 import android.support.v4.view.ViewPager;
6
+import android.support.v7.widget.Toolbar;
6
 import android.view.View;
7
 import android.view.View;
7
 import android.view.ViewGroup;
8
 import android.view.ViewGroup;
8
 
9
 
33
     private final Map<String, ScreenStack> stacksByNavId;
34
     private final Map<String, ScreenStack> stacksByNavId;
34
 
35
 
35
 
36
 
36
-    public ViewPagerAdapter(BaseReactActivity context, ViewPager viewPager, RnnToolBar toolbar,
37
+    public ViewPagerAdapter(BaseReactActivity context, ViewPager viewPager, Toolbar toolbar,
37
                             ArrayList<Screen> screens) {
38
                             ArrayList<Screen> screens) {
38
         mContext = context;
39
         mContext = context;
39
         mViewPager = viewPager;
40
         mViewPager = viewPager;
54
         stack.push(screen);
55
         stack.push(screen);
55
     }
56
     }
56
 
57
 
58
+    public Screen pop(String navID){
59
+        ScreenStack stack = stacksByNavId.get(navID);
60
+        if(stack != null)
61
+            return stack.pop();
62
+        return null;
63
+    }
64
+
57
     @Override
65
     @Override
58
     public Object instantiateItem(ViewGroup container, int position) {
66
     public Object instantiateItem(ViewGroup container, int position) {
59
         ScreenStack view = screenStacks.get(position);
67
         ScreenStack view = screenStacks.get(position);
92
         Screen screen = screenStacks.get(position).peek();
100
         Screen screen = screenStacks.get(position).peek();
93
         params.putString(Screen.KEY_NAVIGATOR_EVENT_ID, screen.navigatorEventId);
101
         params.putString(Screen.KEY_NAVIGATOR_EVENT_ID, screen.navigatorEventId);
94
 
102
 
95
-        mToolbar.setupToolbarButtonsAsync(mScreens.get(position));
103
+//        mToolbar.setupToolbarButtonsAsync(mScreens.get(position));
96
 
104
 
97
         RctManager.getInstance().sendEvent(EVENT_ON_TAB_SELECTED, screen.navigatorEventId, params);
105
         RctManager.getInstance().sendEvent(EVENT_ON_TAB_SELECTED, screen.navigatorEventId, params);
98
     }
106
     }

+ 22
- 3
android/app/src/main/java/com/reactnativenavigation/modules/RctActivityModule.java Parādīt failu

65
     }
65
     }
66
 
66
 
67
     @ReactMethod
67
     @ReactMethod
68
-    public void navigatorPush(ReadableMap screen) {
69
-        BaseReactActivity context = ContextProvider.getActivityContext();
68
+    public void navigatorPush(final ReadableMap screen) {
69
+        final BaseReactActivity context = ContextProvider.getActivityContext();
70
          if (context != null && !context.isFinishing()) {
70
          if (context != null && !context.isFinishing()) {
71
-             context.push(new Screen(screen));
71
+             context.runOnUiThread(new Runnable() {
72
+                 @Override
73
+                 public void run() {
74
+                     context.push(new Screen(screen));
75
+                 }
76
+             });
77
+        }
78
+    }
79
+
80
+    @ReactMethod
81
+    public void navigatorPop(final ReadableMap navigator) {
82
+        final String navID = navigator.getString("navigatorID");
83
+        final BaseReactActivity context = ContextProvider.getActivityContext();
84
+        if (context != null && !context.isFinishing()) {
85
+            context.runOnUiThread(new Runnable() {
86
+                @Override
87
+                public void run() {
88
+                    context.pop(navID);
89
+                }
90
+            });
72
         }
91
         }
73
     }
92
     }
74
 }
93
 }

+ 11
- 0
android/app/src/main/java/com/reactnativenavigation/views/ScreenStack.java Parādīt failu

1
 package com.reactnativenavigation.views;
1
 package com.reactnativenavigation.views;
2
 
2
 
3
 import android.animation.LayoutTransition;
3
 import android.animation.LayoutTransition;
4
+import android.view.View;
4
 import android.widget.FrameLayout;
5
 import android.widget.FrameLayout;
5
 
6
 
6
 import com.facebook.react.ReactInstanceManager;
7
 import com.facebook.react.ReactInstanceManager;
35
     }
36
     }
36
 
37
 
37
     public void push(Screen screen){
38
     public void push(Screen screen){
39
+        View oldView = null;
40
+        if(!stack.isEmpty())
41
+            oldView = stack.peek().view;
38
         RctView view = new RctView(reactActivity, mReactInstanceManager, screen);
42
         RctView view = new RctView(reactActivity, mReactInstanceManager, screen);
39
         addView(view, MATCH_PARENT, MATCH_PARENT);
43
         addView(view, MATCH_PARENT, MATCH_PARENT);
44
+        if(oldView!=null)
45
+            removeView(oldView);
40
         stack.push(new ScreenView(screen, view));
46
         stack.push(new ScreenView(screen, view));
41
     }
47
     }
42
 
48
 
43
     public Screen pop(){
49
     public Screen pop(){
50
+        //TODO maybe return null if size is 1?
51
+        if(stack.isEmpty())
52
+            return null;
44
         ScreenView popped = stack.pop();
53
         ScreenView popped = stack.pop();
45
         removeView(popped.view);
54
         removeView(popped.view);
55
+        if(!stack.isEmpty());
56
+        addView(stack.peek().view);
46
         return popped.screen;
57
         return popped.screen;
47
     }
58
     }
48
 
59
 

+ 6
- 1
src/platformSpecific.android.js Parādīt failu

56
   RctActivity.navigatorPush(params);
56
   RctActivity.navigatorPush(params);
57
 }
57
 }
58
 
58
 
59
+function navigatorPop(navigator, params) {
60
+  RctActivity.navigatorPop(navigator);
61
+}
62
+
59
 function addNavigatorParams(screen, navigator = null, idx = '') {
63
 function addNavigatorParams(screen, navigator = null, idx = '') {
60
   screen.navigatorID = navigator ? navigator.navigatorID : utils.getRandomId() + '_nav' + idx;
64
   screen.navigatorID = navigator ? navigator.navigatorID : utils.getRandomId() + '_nav' + idx;
61
   screen.screenInstanceID = utils.getRandomId();
65
   screen.screenInstanceID = utils.getRandomId();
83
 export default {
87
 export default {
84
   startSingleScreenApp,
88
   startSingleScreenApp,
85
   startTabBasedApp,
89
   startTabBasedApp,
86
-  navigatorPush
90
+  navigatorPush,
91
+  navigatorPop
87
 }
92
 }