Kaynağa Gözat

work on modal

Daniel Zlotin 8 yıl önce
ebeveyn
işleme
7397a9d795

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Dosyayı Görüntüle

@@ -92,6 +92,7 @@ public class NavigationReactModule extends ReactContextBaseJavaModule {
92 92
 
93 93
     @ReactMethod
94 94
     public void showModal(final ReadableMap params) {
95
+        NavigationCommandsHandler.showModal(BundleConverter.toBundle(params));
95 96
     }
96 97
 
97 98
     @ReactMethod

+ 23
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java Dosyayı Görüntüle

@@ -1,4 +1,26 @@
1 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 Dosyayı Görüntüle

@@ -1,6 +1,26 @@
1 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 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 24
     public boolean onBackPressed() {
5 25
         return false;
6 26
     }
@@ -8,13 +28,7 @@ public class ModalController {
8 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 32
 //        modals.add(modal);
19 33
 //    }
20 34
 //

+ 10
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java Dosyayı Görüntüle

@@ -28,8 +28,8 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
28 28
      */
29 29
     static NavigationActivity currentActivity;
30 30
 
31
-    private final ModalController modalController = new ModalController();
32 31
     private ActivityParams activityParams;
32
+    private ModalController modalController;
33 33
     private Layout layout;
34 34
 
35 35
     @Override
@@ -40,6 +40,11 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
40 40
         activityParams = NavigationCommandsHandler.getActivityParams(getIntent());
41 41
 
42 42
         createLayout();
43
+        createModalController();
44
+    }
45
+
46
+    private void createModalController() {
47
+        modalController = new ModalController(this);
43 48
     }
44 49
 
45 50
     private void createLayout() {
@@ -125,4 +130,8 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
125 130
     void setTopBarVisible(String screenInstanceID, boolean hidden, boolean animated) {
126 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 Dosyayı Görüntüle

@@ -103,4 +103,20 @@ public class NavigationCommandsHandler {
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 Dosyayı Görüntüle

@@ -14,7 +14,7 @@ public class ScreenParams {
14 14
     //    public String tabLabel; TODO when tabs are supported move to TabParams
15 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 18
     public String screenInstanceId;
19 19
     public String navigatorEventId;
20 20
     public Bundle navigationParams;