Explorar el Código

work on modal

Daniel Zlotin hace 8 años
padre
commit
7397a9d795

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Ver fichero

92
 
92
 
93
     @ReactMethod
93
     @ReactMethod
94
     public void showModal(final ReadableMap params) {
94
     public void showModal(final ReadableMap params) {
95
+        NavigationCommandsHandler.showModal(BundleConverter.toBundle(params));
95
     }
96
     }
96
 
97
 
97
     @ReactMethod
98
     @ReactMethod

+ 23
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java Ver fichero

1
 package com.reactnativenavigation.controllers;
1
 package com.reactnativenavigation.controllers;
2
 
2
 
3
-public class Modal {
3
+import android.app.Dialog;
4
+import android.content.Context;
5
+import android.content.DialogInterface;
6
+import android.view.Window;
7
+
8
+import com.reactnativenavigation.R;
9
+import com.reactnativenavigation.params.ScreenParams;
10
+
11
+public class Modal extends Dialog implements DialogInterface.OnDismissListener {
12
+    private final ScreenParams screenParams;
13
+
14
+    public Modal(Context context, ScreenParams screenParams) {
15
+        super(context, R.style.Modal);
16
+        this.screenParams = screenParams;
17
+        setCancelable(true);
18
+        requestWindowFeature(Window.FEATURE_NO_TITLE);
19
+
20
+    }
21
+
22
+    @Override
23
+    public void onDismiss(DialogInterface dialog) {
24
+
25
+    }
4
 }
26
 }

+ 21
- 7
android/app/src/main/java/com/reactnativenavigation/controllers/ModalController.java Ver fichero

1
 package com.reactnativenavigation.controllers;
1
 package com.reactnativenavigation.controllers;
2
 
2
 
3
+import android.app.Activity;
4
+
5
+import com.reactnativenavigation.params.ScreenParams;
6
+
7
+import java.util.Stack;
8
+
3
 public class ModalController {
9
 public class ModalController {
10
+    private final Activity activity;
11
+    private Stack<Modal> stack = new Stack<>();
12
+
13
+    public ModalController(Activity activity) {
14
+        this.activity = activity;
15
+    }
16
+
17
+
18
+    public void showModal(ScreenParams screenParams) {
19
+        Modal modal = new Modal(activity, screenParams);
20
+        modal.show();
21
+        stack.add(modal);
22
+    }
23
+
4
     public boolean onBackPressed() {
24
     public boolean onBackPressed() {
5
         return false;
25
         return false;
6
     }
26
     }
8
     public void onDestroy() {
28
     public void onDestroy() {
9
 
29
 
10
     }
30
     }
11
-
12
-//    private final Stack<RnnModal> modals = new Stack<>();
13
-//
14
-//    public ModalController() {
15
-//    }
16
-//
17
-//    public void add(RnnModal modal) {
31
+    //    public void add(RnnModal modal) {
18
 //        modals.add(modal);
32
 //        modals.add(modal);
19
 //    }
33
 //    }
20
 //
34
 //

+ 10
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java Ver fichero

28
      */
28
      */
29
     static NavigationActivity currentActivity;
29
     static NavigationActivity currentActivity;
30
 
30
 
31
-    private final ModalController modalController = new ModalController();
32
     private ActivityParams activityParams;
31
     private ActivityParams activityParams;
32
+    private ModalController modalController;
33
     private Layout layout;
33
     private Layout layout;
34
 
34
 
35
     @Override
35
     @Override
40
         activityParams = NavigationCommandsHandler.getActivityParams(getIntent());
40
         activityParams = NavigationCommandsHandler.getActivityParams(getIntent());
41
 
41
 
42
         createLayout();
42
         createLayout();
43
+        createModalController();
44
+    }
45
+
46
+    private void createModalController() {
47
+        modalController = new ModalController(this);
43
     }
48
     }
44
 
49
 
45
     private void createLayout() {
50
     private void createLayout() {
125
     void setTopBarVisible(String screenInstanceID, boolean hidden, boolean animated) {
130
     void setTopBarVisible(String screenInstanceID, boolean hidden, boolean animated) {
126
         layout.setTopBarVisible(screenInstanceID, hidden, animated);
131
         layout.setTopBarVisible(screenInstanceID, hidden, animated);
127
     }
132
     }
133
+
134
+    void showModal(ScreenParams screenParams) {
135
+        modalController.showModal(screenParams);
136
+    }
128
 }
137
 }

+ 16
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationCommandsHandler.java Ver fichero

103
             }
103
             }
104
         });
104
         });
105
     }
105
     }
106
+
107
+    public static void showModal(Bundle params) {
108
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
109
+        if (currentActivity == null) {
110
+            return;
111
+        }
112
+
113
+        final ScreenParams screenParams = ScreenParamsParser.parse(params);
114
+
115
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
116
+            @Override
117
+            public void run() {
118
+                currentActivity.showModal(screenParams);
119
+            }
120
+        });
121
+    }
106
 }
122
 }

+ 1
- 1
android/app/src/main/java/com/reactnativenavigation/params/ScreenParams.java Ver fichero

14
     //    public String tabLabel; TODO when tabs are supported move to TabParams
14
     //    public String tabLabel; TODO when tabs are supported move to TabParams
15
     //    public Drawable tabIcon;
15
     //    public Drawable tabIcon;
16
 
16
 
17
-    // TODO navigationParams should be a class with a `toBundle` method or something. Then we wouldn't neet to keep these two fields here
17
+    // TODO navigationParams should be a terminated. destroyed. annihilated. disintegrated. banished from existence.
18
     public String screenInstanceId;
18
     public String screenInstanceId;
19
     public String navigatorEventId;
19
     public String navigatorEventId;
20
     public Bundle navigationParams;
20
     public Bundle navigationParams;