Browse Source

connected Modal

Daniel Zlotin 8 years ago
parent
commit
9a85260af9

+ 7
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java View File

14
 
14
 
15
 public class Modal extends Dialog implements DialogInterface.OnDismissListener, ScreenStackContainer {
15
 public class Modal extends Dialog implements DialogInterface.OnDismissListener, ScreenStackContainer {
16
 
16
 
17
+    private final Activity activity;
17
     private final OnModalDismissedListener onModalDismissedListener;
18
     private final OnModalDismissedListener onModalDismissedListener;
18
 
19
 
19
     public interface OnModalDismissedListener {
20
     public interface OnModalDismissedListener {
25
 
26
 
26
     public Modal(Activity activity, OnModalDismissedListener onModalDismissedListener, ScreenParams screenParams) {
27
     public Modal(Activity activity, OnModalDismissedListener onModalDismissedListener, ScreenParams screenParams) {
27
         super(activity, R.style.Modal);
28
         super(activity, R.style.Modal);
29
+        this.activity = activity;
28
         this.onModalDismissedListener = onModalDismissedListener;
30
         this.onModalDismissedListener = onModalDismissedListener;
29
         this.screenParams = screenParams;
31
         this.screenParams = screenParams;
30
         createContent();
32
         createContent();
31
     }
33
     }
32
 
34
 
35
+    public Activity getActivity() {
36
+        return activity;
37
+    }
38
+
33
     private void createContent() {
39
     private void createContent() {
34
         setCancelable(true);
40
         setCancelable(true);
35
         setOnDismissListener(this);
41
         setOnDismissListener(this);
36
         requestWindowFeature(Window.FEATURE_NO_TITLE);
42
         requestWindowFeature(Window.FEATURE_NO_TITLE);
37
-        layout = new SingleScreenLayout(getContext(), screenParams);
43
+        layout = new SingleScreenLayout(getActivity(), screenParams);
38
         setContentView(layout.asView());
44
         setContentView(layout.asView());
39
     }
45
     }
40
 
46
 

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java View File

70
 
70
 
71
     @Override
71
     @Override
72
     protected void onDestroy() {
72
     protected void onDestroy() {
73
-        modalController.onDestroy();
73
+        modalController.destroy();
74
         layout.destroy();
74
         layout.destroy();
75
         super.onDestroy();
75
         super.onDestroy();
76
         if (currentActivity == null || currentActivity.isFinishing()) {
76
         if (currentActivity == null || currentActivity.isFinishing()) {

+ 7
- 7
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java View File

1
 package com.reactnativenavigation.layouts;
1
 package com.reactnativenavigation.layouts;
2
 
2
 
3
-import android.content.Context;
3
+import android.app.Activity;
4
 import android.view.View;
4
 import android.view.View;
5
 import android.widget.FrameLayout;
5
 import android.widget.FrameLayout;
6
 
6
 
17
     private final ScreenParams screenParams;
17
     private final ScreenParams screenParams;
18
     private ScreenStack stack;
18
     private ScreenStack stack;
19
 
19
 
20
-    public SingleScreenLayout(Context context, ScreenParams screenParams) {
21
-        super(context);
20
+    public SingleScreenLayout(Activity activity, ScreenParams screenParams) {
21
+        super(activity);
22
         this.screenParams = screenParams;
22
         this.screenParams = screenParams;
23
-        createStack(context);
23
+        createStack();
24
     }
24
     }
25
 
25
 
26
-    private void createStack(Context context) {
26
+    private void createStack() {
27
         if (stack != null) {
27
         if (stack != null) {
28
             stack.destroy();
28
             stack.destroy();
29
             removeView(stack);
29
             removeView(stack);
30
         }
30
         }
31
-        stack = new ScreenStack(context, screenParams);
31
+        stack = new ScreenStack(getContext(), screenParams);
32
         addView(stack, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
32
         addView(stack, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
33
     }
33
     }
34
 
34
 
64
 
64
 
65
     @Override
65
     @Override
66
     public void newStack(ScreenParams params) {
66
     public void newStack(ScreenParams params) {
67
-        createStack(getContext());
67
+        createStack();
68
     }
68
     }
69
 
69
 
70
     @Override
70
     @Override

+ 8
- 8
android/app/src/main/java/com/reactnativenavigation/screens/TabbedScreen.java View File

21
 
21
 
22
     private List<ContentView> contentViews;
22
     private List<ContentView> contentViews;
23
     private ViewPager viewPager;
23
     private ViewPager viewPager;
24
-    private ViewPagerAdapter viewPagerAdapter;
24
+    private ContentViewPagerAdapter adapter;
25
 
25
 
26
-    public  TabbedScreen(Context context, ScreenParams screenParams) {
26
+    public TabbedScreen(Context context, ScreenParams screenParams) {
27
         super(context, screenParams);
27
         super(context, screenParams);
28
     }
28
     }
29
 
29
 
45
             contentViews.add(contentView);
45
             contentViews.add(contentView);
46
         }
46
         }
47
 
47
 
48
-        viewPagerAdapter = new ViewPagerAdapter(viewPager, contentViews, screenParams.topTabParams);
49
-        viewPager.setAdapter(viewPagerAdapter);
48
+        adapter = new ContentViewPagerAdapter(viewPager, contentViews, screenParams.topTabParams);
49
+        viewPager.setAdapter(adapter);
50
         tabLayout.setupWithViewPager(viewPager);
50
         tabLayout.setupWithViewPager(viewPager);
51
     }
51
     }
52
 
52
 
61
 
61
 
62
     @Override
62
     @Override
63
     public void ensureUnmountOnDetachedFromWindow() {
63
     public void ensureUnmountOnDetachedFromWindow() {
64
-        for (ContentView contentView: contentViews) {
64
+        for (ContentView contentView : contentViews) {
65
             contentView.ensureUnmountOnDetachedFromWindow();
65
             contentView.ensureUnmountOnDetachedFromWindow();
66
         }
66
         }
67
     }
67
     }
68
 
68
 
69
     @Override
69
     @Override
70
     public void preventUnmountOnDetachedFromWindow() {
70
     public void preventUnmountOnDetachedFromWindow() {
71
-        for (ContentView contentView: contentViews) {
71
+        for (ContentView contentView : contentViews) {
72
             contentView.preventUnmountOnDetachedFromWindow();
72
             contentView.preventUnmountOnDetachedFromWindow();
73
         }
73
         }
74
     }
74
     }
75
 
75
 
76
 
76
 
77
-    public class ViewPagerAdapter extends PagerAdapter implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener {
77
+    public class ContentViewPagerAdapter extends PagerAdapter implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener {
78
 
78
 
79
         private ViewPager viewPager;
79
         private ViewPager viewPager;
80
         private List<ContentView> contentViews;
80
         private List<ContentView> contentViews;
81
         private List<TopTabParams> topTabParams;
81
         private List<TopTabParams> topTabParams;
82
 
82
 
83
-        public ViewPagerAdapter(ViewPager viewPager, List<ContentView> contentViews, List<TopTabParams> topTabParams) {
83
+        public ContentViewPagerAdapter(ViewPager viewPager, List<ContentView> contentViews, List<TopTabParams> topTabParams) {
84
             this.viewPager = viewPager;
84
             this.viewPager = viewPager;
85
             this.contentViews = contentViews;
85
             this.contentViews = contentViews;
86
             this.topTabParams = topTabParams;
86
             this.topTabParams = topTabParams;

+ 21
- 14
src/deprecated/platformSpecificDeprecated.android.js View File

21
   screen.passProps = params.passProps;
21
   screen.passProps = params.passProps;
22
   //const drawer = setupDrawer(params.drawer);
22
   //const drawer = setupDrawer(params.drawer);
23
 
23
 
24
-  screen.screenId = screen.screen;
25
-
26
   /*
24
   /*
27
    * adapt to new API
25
    * adapt to new API
28
    */
26
    */
27
+  screen.screenId = screen.screen;
29
   params.screen = adaptNavigationStyleToScreenStyle(screen);
28
   params.screen = adaptNavigationStyleToScreenStyle(screen);
30
   params.screen = adaptNavigationParams(screen);
29
   params.screen = adaptNavigationParams(screen);
31
 
30
 
139
 
138
 
140
 function navigatorSetButtons(navigator, navigatorEventID, params) {
139
 function navigatorSetButtons(navigator, navigatorEventID, params) {
141
   if (params.rightButtons) {
140
   if (params.rightButtons) {
142
-   params.rightButtons.forEach(function(button) {
143
-     if (button.icon) {
144
-       const icon = resolveAssetSource(button.icon);
145
-       if (icon) {
146
-         button.icon = icon.uri;
147
-       }
148
-     }
149
-   });
141
+    params.rightButtons.forEach(function(button) {
142
+      if (button.icon) {
143
+        const icon = resolveAssetSource(button.icon);
144
+        if (icon) {
145
+          button.icon = icon.uri;
146
+        }
147
+      }
148
+    });
150
   }
149
   }
151
   newPlatformSpecific.setScreenTitleBarButtons(navigator.screenInstanceID, navigatorEventID, params.rightButtons);
150
   newPlatformSpecific.setScreenTitleBarButtons(navigator.screenInstanceID, navigatorEventID, params.rightButtons);
152
 }
151
 }
197
 }
196
 }
198
 
197
 
199
 function showModal(params) {
198
 function showModal(params) {
200
-  //addNavigatorParams(params);
201
-  //addNavigatorButtons(params);
202
-  //addNavigationStyleParams(params);
203
-  //RctActivity.showModal(params);
199
+  addNavigatorParams(params);
200
+  addNavigatorButtons(params);
201
+  addNavigationStyleParams(params);
202
+
203
+  /*
204
+   * adapt to new API
205
+   */
206
+  params.screenId = params.screen;
207
+  let adapted = adaptNavigationStyleToScreenStyle(params);
208
+  adapted = adaptNavigationParams(adapted);
209
+
210
+  newPlatformSpecific.showModal(adapted);
204
 }
211
 }
205
 
212
 
206
 function dismissModal() {
213
 function dismissModal() {

+ 16
- 9
src/platformSpecific.android.js View File

4
 
4
 
5
 import Navigation from './Navigation';
5
 import Navigation from './Navigation';
6
 
6
 
7
+NativeBridge = NativeModules.NavigationReactModule;
8
+
7
 const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');
9
 const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');
8
 
10
 
9
 function startApp(activityParams) {
11
 function startApp(activityParams) {
13
     return;
15
     return;
14
   }
16
   }
15
 
17
 
16
-  NativeModules.NavigationReactModule.startApp(activityParams);
18
+  NativeBridge.startApp(activityParams);
17
 }
19
 }
18
 
20
 
19
 function push(screenParams) {
21
 function push(screenParams) {
20
-  NativeModules.NavigationReactModule.push(screenParams);
22
+  NativeBridge.push(screenParams);
21
 }
23
 }
22
 
24
 
23
 function pop(screenParams) {
25
 function pop(screenParams) {
24
-  NativeModules.NavigationReactModule.pop(screenParams);
26
+  NativeBridge.pop(screenParams);
25
 }
27
 }
26
 
28
 
27
 function popToRoot(screenParams) {
29
 function popToRoot(screenParams) {
28
-  NativeModules.NavigationReactModule.popToRoot(screenParams);
30
+  NativeBridge.popToRoot(screenParams);
29
 }
31
 }
30
 
32
 
31
 function newStack(screenParams) {
33
 function newStack(screenParams) {
32
-  NativeModules.NavigationReactModule.newStack(screenParams);
34
+  NativeBridge.newStack(screenParams);
33
 }
35
 }
34
 
36
 
35
 function toggleTopBarVisible(screenInstanceID, visible, animated) {
37
 function toggleTopBarVisible(screenInstanceID, visible, animated) {
36
-  NativeModules.NavigationReactModule.setTopBarVisible(screenInstanceID, visible, animated);
38
+  NativeBridge.setTopBarVisible(screenInstanceID, visible, animated);
37
 }
39
 }
38
 
40
 
39
 function setScreenTitleBarTitle(screenInstanceID, title) {
41
 function setScreenTitleBarTitle(screenInstanceID, title) {
40
-  NativeModules.NavigationReactModule.setScreenTitleBarTitle(screenInstanceID, title);
42
+  NativeBridge.setScreenTitleBarTitle(screenInstanceID, title);
41
 }
43
 }
42
 
44
 
43
 function setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons) {
45
 function setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons) {
44
-  NativeModules.NavigationReactModule.setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons);
46
+  NativeBridge.setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons);
47
+}
48
+
49
+function showModal(screenParams) {
50
+  NativeBridge.showModal(screenParams);
45
 }
51
 }
46
 
52
 
47
 module.exports = {
53
 module.exports = {
52
   newStack,
58
   newStack,
53
   toggleTopBarVisible,
59
   toggleTopBarVisible,
54
   setScreenTitleBarTitle,
60
   setScreenTitleBarTitle,
55
-  setScreenTitleBarButtons
61
+  setScreenTitleBarButtons,
62
+  showModal
56
 };
63
 };