Daniel Zlotin 7 years ago
parent
commit
f6c635f839

+ 3
- 3
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java View File

@@ -47,9 +47,9 @@ public class NavigationModule extends ReactContextBaseJavaModule {
47 47
 		handle(new Runnable() {
48 48
 			@Override
49 49
 			public void run() {
50
-//				final LayoutNode layoutTree = LayoutNodeParser.parse(JSONParser.parse(rawLayoutTree));
51
-//				final ViewController viewController = newLayoutFactory().create(layoutTree);
52
-////				store.getViewController(onContainerId).getStackController().push(viewController);
50
+				final LayoutNode layoutTree = LayoutNodeParser.parse(JSONParser.parse(rawLayoutTree));
51
+				final ViewController viewController = newLayoutFactory().create(layoutTree);
52
+//				store.getViewController(onContainerId).getStackController().push(viewController);
53 53
 			}
54 54
 		});
55 55
 	}

+ 13
- 7
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/Navigator.java View File

@@ -7,7 +7,10 @@ import android.widget.FrameLayout;
7 7
 
8 8
 import com.reactnativenavigation.utils.CompatUtils;
9 9
 
10
-public class Navigator extends ViewController {
10
+import java.util.Collection;
11
+import java.util.Collections;
12
+
13
+public class Navigator extends ParentController {
11 14
 
12 15
 	private ViewController root;
13 16
 	private boolean activityResumed = false;
@@ -22,10 +25,9 @@ public class Navigator extends ViewController {
22 25
 		return new FrameLayout(getActivity());
23 26
 	}
24 27
 
25
-	@NonNull
26 28
 	@Override
27
-	public FrameLayout getView() {
28
-		return (FrameLayout) super.getView();
29
+	public Collection<ViewController> getChildControllers() {
30
+		return Collections.singletonList(root);
29 31
 	}
30 32
 
31 33
 	/*
@@ -64,8 +66,12 @@ public class Navigator extends ViewController {
64 66
 	}
65 67
 
66 68
 	public void push(final String onId, final ViewController viewController) {
67
-		if (root instanceof StackController) {
68
-			((StackController) root).push(viewController);
69
-		}
69
+		ViewController found = root.findControllerById(onId);
70
+		if (found == null) return;
71
+
72
+		StackController parentStackController = found.getParentStackController();
73
+		if (parentStackController == null) return;
74
+
75
+		parentStackController.push(viewController);
70 76
 	}
71 77
 }

+ 2
- 2
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/StackController.java View File

@@ -18,7 +18,7 @@ public class StackController extends ParentController {
18 18
 	public void push(final ViewController child) {
19 19
 		final ViewController previousTop = peek();
20 20
 
21
-		child.setStackController(this);
21
+		child.setParentStackController(this);
22 22
 		stack.push(child.getId(), child);
23 23
 
24 24
 		getView().addView(child.getView());
@@ -80,7 +80,7 @@ public class StackController extends ParentController {
80 80
 
81 81
 	@Nullable
82 82
 	@Override
83
-	public StackController getStackController() {
83
+	public StackController getParentStackController() {
84 84
 		return this;
85 85
 	}
86 86
 

+ 5
- 5
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java View File

@@ -11,7 +11,7 @@ public abstract class ViewController {
11 11
 	private final Activity activity;
12 12
 	private final String id;
13 13
 	private View view;
14
-	private StackController stackController;
14
+	private StackController parentStackController;
15 15
 
16 16
 	public ViewController(Activity activity, String id) {
17 17
 		this.activity = activity;
@@ -30,12 +30,12 @@ public abstract class ViewController {
30 30
 	}
31 31
 
32 32
 	@Nullable
33
-	public StackController getStackController() {
34
-		return stackController;
33
+	public StackController getParentStackController() {
34
+		return parentStackController;
35 35
 	}
36 36
 
37
-	void setStackController(final StackController stackController) {
38
-		this.stackController = stackController;
37
+	void setParentStackController(final StackController parentStackController) {
38
+		this.parentStackController = parentStackController;
39 39
 	}
40 40
 
41 41
 	@NonNull

+ 3
- 2
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/NavigatorTest.java View File

@@ -93,7 +93,7 @@ public class NavigatorTest extends BaseTest {
93 93
 	public void push_OnCorrectStackByFindingChildId() throws Exception {
94 94
 		BottomTabsController bottomTabsController = new BottomTabsController(activity, "tabsController");
95 95
 		StackController stack1 = new StackController(activity, "stack1");
96
-		StackController stack2 = new StackController(activity, "stack1");
96
+		StackController stack2 = new StackController(activity, "stack2");
97 97
 		stack1.push(child1);
98 98
 		stack2.push(child2);
99 99
 		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
@@ -102,7 +102,8 @@ public class NavigatorTest extends BaseTest {
102 102
 		SimpleViewController newChild = new SimpleViewController(activity, "new child");
103 103
 		uut.push(child2.getId(), newChild);
104 104
 
105
-
105
+		assertThat(stack1.getChildControllers()).doesNotContain(newChild);
106
+		assertThat(stack2.getChildControllers()).contains(newChild);
106 107
 	}
107 108
 
108 109
 	private void assertHasSingleChildViewOf(ViewController parent, ViewController child) {

+ 4
- 4
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/StackControllerTest.java View File

@@ -73,13 +73,13 @@ public class StackControllerTest extends BaseTest {
73 73
 
74 74
 	@Test
75 75
 	public void pushAssignsRefToSelfOnPushedController() throws Exception {
76
-		assertThat(child1.getStackController()).isNull();
76
+		assertThat(child1.getParentStackController()).isNull();
77 77
 		uut.push(child1);
78
-		assertThat(child1.getStackController()).isEqualTo(uut);
78
+		assertThat(child1.getParentStackController()).isEqualTo(uut);
79 79
 
80 80
 		StackController anotherNavController = new StackController(activity, "another");
81 81
 		anotherNavController.push(child2);
82
-		assertThat(child2.getStackController()).isEqualTo(anotherNavController);
82
+		assertThat(child2.getParentStackController()).isEqualTo(anotherNavController);
83 83
 	}
84 84
 
85 85
 	@Test
@@ -176,7 +176,7 @@ public class StackControllerTest extends BaseTest {
176 176
 
177 177
 	@Test
178 178
 	public void getStackControllerReturnsSelf() throws Exception {
179
-		assertThat(uut.getStackController()).isEqualTo(uut);
179
+		assertThat(uut.getParentStackController()).isEqualTo(uut);
180 180
 	}
181 181
 
182 182
 	@Test

+ 2
- 2
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/ViewControllerTest.java View File

@@ -46,10 +46,10 @@ public class ViewControllerTest extends BaseTest {
46 46
 
47 47
 	@Test
48 48
 	public void holdsAReferenceToStackControllerOrNull() throws Exception {
49
-		assertThat(uut.getStackController()).isNull();
49
+		assertThat(uut.getParentStackController()).isNull();
50 50
 		StackController nav = new StackController(activity, "stack");
51 51
 		nav.push(uut);
52
-		assertThat(uut.getStackController()).isEqualTo(nav);
52
+		assertThat(uut.getParentStackController()).isEqualTo(nav);
53 53
 	}
54 54
 
55 55
 	@Test