Ver código fonte

modals android

Daniel Zlotin 7 anos atrás
pai
commit
1eefe4bef5

+ 1
- 7
AndroidE2E/app/src/androidTest/java/com/reactnativenavigation/e2e/androide2e/ModalsTest.java Ver arquivo

15
 		assertExists(By.text("Modal Screen"));
15
 		assertExists(By.text("Modal Screen"));
16
 	}
16
 	}
17
 
17
 
18
-	@Ignore
19
 	@Test
18
 	@Test
20
 	public void dismissModal() throws Exception {
19
 	public void dismissModal() throws Exception {
21
 		launchTheApp();
20
 		launchTheApp();
28
 
27
 
29
 	}
28
 	}
30
 
29
 
31
-	@Ignore
32
 	@Test
30
 	@Test
33
 	public void showMultipleModals() throws Exception {
31
 	public void showMultipleModals() throws Exception {
34
 		launchTheApp();
32
 		launchTheApp();
46
 		assertMainShown();
44
 		assertMainShown();
47
 	}
45
 	}
48
 
46
 
49
-	@Ignore
50
 	@Test
47
 	@Test
51
 	public void dismissUnknownContainerId() throws Exception {
48
 	public void dismissUnknownContainerId() throws Exception {
52
 		launchTheApp();
49
 		launchTheApp();
61
 		assertMainShown();
58
 		assertMainShown();
62
 	}
59
 	}
63
 
60
 
64
-	@Ignore
65
 	@Test
61
 	@Test
66
 	public void dismissModalByContainerIdWhenNotOnTop() throws Exception {
62
 	public void dismissModalByContainerIdWhenNotOnTop() throws Exception {
67
 		launchTheApp();
63
 		launchTheApp();
79
 		assertMainShown();
75
 		assertMainShown();
80
 	}
76
 	}
81
 
77
 
82
-	@Ignore
83
 	@Test
78
 	@Test
84
 	public void dismissAllPreviousModalsByIdWhenTheyAreBelowTopPresented() throws Exception {
79
 	public void dismissAllPreviousModalsByIdWhenTheyAreBelowTopPresented() throws Exception {
85
 		launchTheApp();
80
 		launchTheApp();
98
 		assertMainShown();
93
 		assertMainShown();
99
 	}
94
 	}
100
 
95
 
101
-	@Ignore
102
 	@Test
96
 	@Test
103
 	public void dismissSomeModalByIdDeepInTheStack() throws Exception {
97
 	public void dismissSomeModalByIdDeepInTheStack() throws Exception {
104
 		launchTheApp();
98
 		launchTheApp();
110
 		elementByText("SHOW MODAL").click();
104
 		elementByText("SHOW MODAL").click();
111
 		assertExists(By.text("Modal Stack Position: 3"));
105
 		assertExists(By.text("Modal Stack Position: 3"));
112
 
106
 
113
-		elementByText("DISMISS FIRST IN THE STACK").click();
107
+		elementByText("DISMISS FIRST IN STACK").click();
114
 		assertExists(By.text("Modal Stack Position: 3"));
108
 		assertExists(By.text("Modal Stack Position: 3"));
115
 
109
 
116
 		elementByText("DISMISS MODAL").click();
110
 		elementByText("DISMISS MODAL").click();

+ 10
- 0
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java Ver arquivo

96
 		});
96
 		});
97
 	}
97
 	}
98
 
98
 
99
+	@ReactMethod
100
+	public void dismissModal(final String containerId) {
101
+		handle(new Runnable() {
102
+			@Override
103
+			public void run() {
104
+				navigator().dismissModal(containerId);
105
+			}
106
+		});
107
+	}
108
+
99
 	private NavigationActivity activity() {
109
 	private NavigationActivity activity() {
100
 		return (NavigationActivity) getCurrentActivity();
110
 		return (NavigationActivity) getCurrentActivity();
101
 	}
111
 	}

+ 25
- 0
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/Navigator.java Ver arquivo

3
 import android.app.Activity;
3
 import android.app.Activity;
4
 import android.app.Dialog;
4
 import android.app.Dialog;
5
 import android.support.annotation.NonNull;
5
 import android.support.annotation.NonNull;
6
+import android.support.annotation.Nullable;
7
+import android.support.v4.util.Pair;
6
 import android.view.ViewGroup;
8
 import android.view.ViewGroup;
7
 import android.widget.FrameLayout;
9
 import android.widget.FrameLayout;
8
 
10
 
11
 
13
 
12
 import java.util.Collection;
14
 import java.util.Collection;
13
 import java.util.Collections;
15
 import java.util.Collections;
16
+import java.util.HashMap;
17
+import java.util.Map;
14
 
18
 
15
 import static android.view.View.MeasureSpec.EXACTLY;
19
 import static android.view.View.MeasureSpec.EXACTLY;
16
 import static android.view.View.MeasureSpec.makeMeasureSpec;
20
 import static android.view.View.MeasureSpec.makeMeasureSpec;
18
 public class Navigator extends ParentController {
22
 public class Navigator extends ParentController {
19
 
23
 
20
 	private ViewController root;
24
 	private ViewController root;
25
+	private HashMap<ViewController, Dialog> modals = new HashMap<>();
21
 
26
 
22
 	public Navigator(final Activity activity) {
27
 	public Navigator(final Activity activity) {
23
 		super(activity, "navigator" + CompatUtils.generateViewId());
28
 		super(activity, "navigator" + CompatUtils.generateViewId());
107
 		Dialog dialog = new Dialog(getActivity(), R.style.Modal);
112
 		Dialog dialog = new Dialog(getActivity(), R.style.Modal);
108
 		dialog.setContentView(viewController.getView());
113
 		dialog.setContentView(viewController.getView());
109
 		dialog.show();
114
 		dialog.show();
115
+		modals.put(viewController, dialog);
116
+	}
117
+
118
+	public void dismissModal(final String containerId) {
119
+		Pair<ViewController, Dialog> pair = findModalByContainerId(containerId);
120
+		if (pair != null) {
121
+			pair.second.dismiss();
122
+			modals.remove(pair.first);
123
+		}
124
+	}
125
+
126
+	@Nullable
127
+	private Pair<ViewController, Dialog> findModalByContainerId(String containerId) {
128
+		for (Map.Entry<ViewController, Dialog> entry : modals.entrySet()) {
129
+			ViewController vc = entry.getKey().findControllerById(containerId);
130
+			if (vc != null) {
131
+				return Pair.create(entry.getKey(), entry.getValue());
132
+			}
133
+		}
134
+		return null;
110
 	}
135
 	}
111
 }
136
 }