Daniel Zlotin 7 years ago
parent
commit
f6c635f839

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

47
 		handle(new Runnable() {
47
 		handle(new Runnable() {
48
 			@Override
48
 			@Override
49
 			public void run() {
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
 
8
 import com.reactnativenavigation.utils.CompatUtils;
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
 	private ViewController root;
15
 	private ViewController root;
13
 	private boolean activityResumed = false;
16
 	private boolean activityResumed = false;
22
 		return new FrameLayout(getActivity());
25
 		return new FrameLayout(getActivity());
23
 	}
26
 	}
24
 
27
 
25
-	@NonNull
26
 	@Override
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
 	}
66
 	}
65
 
67
 
66
 	public void push(final String onId, final ViewController viewController) {
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
 	public void push(final ViewController child) {
18
 	public void push(final ViewController child) {
19
 		final ViewController previousTop = peek();
19
 		final ViewController previousTop = peek();
20
 
20
 
21
-		child.setStackController(this);
21
+		child.setParentStackController(this);
22
 		stack.push(child.getId(), child);
22
 		stack.push(child.getId(), child);
23
 
23
 
24
 		getView().addView(child.getView());
24
 		getView().addView(child.getView());
80
 
80
 
81
 	@Nullable
81
 	@Nullable
82
 	@Override
82
 	@Override
83
-	public StackController getStackController() {
83
+	public StackController getParentStackController() {
84
 		return this;
84
 		return this;
85
 	}
85
 	}
86
 
86
 

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

11
 	private final Activity activity;
11
 	private final Activity activity;
12
 	private final String id;
12
 	private final String id;
13
 	private View view;
13
 	private View view;
14
-	private StackController stackController;
14
+	private StackController parentStackController;
15
 
15
 
16
 	public ViewController(Activity activity, String id) {
16
 	public ViewController(Activity activity, String id) {
17
 		this.activity = activity;
17
 		this.activity = activity;
30
 	}
30
 	}
31
 
31
 
32
 	@Nullable
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
 	@NonNull
41
 	@NonNull

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

93
 	public void push_OnCorrectStackByFindingChildId() throws Exception {
93
 	public void push_OnCorrectStackByFindingChildId() throws Exception {
94
 		BottomTabsController bottomTabsController = new BottomTabsController(activity, "tabsController");
94
 		BottomTabsController bottomTabsController = new BottomTabsController(activity, "tabsController");
95
 		StackController stack1 = new StackController(activity, "stack1");
95
 		StackController stack1 = new StackController(activity, "stack1");
96
-		StackController stack2 = new StackController(activity, "stack1");
96
+		StackController stack2 = new StackController(activity, "stack2");
97
 		stack1.push(child1);
97
 		stack1.push(child1);
98
 		stack2.push(child2);
98
 		stack2.push(child2);
99
 		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
99
 		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
102
 		SimpleViewController newChild = new SimpleViewController(activity, "new child");
102
 		SimpleViewController newChild = new SimpleViewController(activity, "new child");
103
 		uut.push(child2.getId(), newChild);
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
 	private void assertHasSingleChildViewOf(ViewController parent, ViewController child) {
109
 	private void assertHasSingleChildViewOf(ViewController parent, ViewController child) {

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

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

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

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