Browse Source

navigator pop

Daniel Zlotin 7 years ago
parent
commit
7923cbcbbe

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

27
 
27
 
28
 	@Override
28
 	@Override
29
 	public Collection<ViewController> getChildControllers() {
29
 	public Collection<ViewController> getChildControllers() {
30
-		return Collections.singletonList(root);
30
+		return root == null ? Collections.<ViewController>emptyList() : Collections.singletonList(root);
31
 	}
31
 	}
32
 
32
 
33
 	/*
33
 	/*
65
 		getView().addView(viewController.getView());
65
 		getView().addView(viewController.getView());
66
 	}
66
 	}
67
 
67
 
68
-	public void push(final String onId, final ViewController viewController) {
69
-		ViewController found = root.findControllerById(onId);
68
+	public void push(final String fromId, final ViewController viewController) {
69
+		ViewController found = findControllerById(fromId);
70
 		if (found == null) return;
70
 		if (found == null) return;
71
 
71
 
72
 		StackController parentStackController = found.getParentStackController();
72
 		StackController parentStackController = found.getParentStackController();
74
 
74
 
75
 		parentStackController.push(viewController);
75
 		parentStackController.push(viewController);
76
 	}
76
 	}
77
+
78
+	public void pop(final String fromId) {
79
+		ViewController found = findControllerById(fromId);
80
+		if (found == null) return;
81
+
82
+		StackController parentStackController = found.getParentStackController();
83
+		if (parentStackController == null) return;
84
+
85
+		parentStackController.pop();
86
+	}
77
 }
87
 }

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

18
 	private Navigator uut;
18
 	private Navigator uut;
19
 	private ViewController child1;
19
 	private ViewController child1;
20
 	private ViewController child2;
20
 	private ViewController child2;
21
+	private ViewController child3;
21
 
22
 
22
 	@Override
23
 	@Override
23
 	public void beforeEach() {
24
 	public void beforeEach() {
26
 		uut = new Navigator(activity);
27
 		uut = new Navigator(activity);
27
 		child1 = new SimpleViewController(activity, "child1");
28
 		child1 = new SimpleViewController(activity, "child1");
28
 		child2 = new SimpleViewController(activity, "child2");
29
 		child2 = new SimpleViewController(activity, "child2");
30
+		child3 = new SimpleViewController(activity, "child3");
29
 	}
31
 	}
30
 
32
 
31
 
33
 
97
 		stack1.push(child1);
99
 		stack1.push(child1);
98
 		stack2.push(child2);
100
 		stack2.push(child2);
99
 		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
101
 		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
100
-
101
 		uut.setRoot(bottomTabsController);
102
 		uut.setRoot(bottomTabsController);
103
+
102
 		SimpleViewController newChild = new SimpleViewController(activity, "new child");
104
 		SimpleViewController newChild = new SimpleViewController(activity, "new child");
103
 		uut.push(child2.getId(), newChild);
105
 		uut.push(child2.getId(), newChild);
104
 
106
 
106
 		assertThat(stack2.getChildControllers()).contains(newChild);
108
 		assertThat(stack2.getChildControllers()).contains(newChild);
107
 	}
109
 	}
108
 
110
 
111
+	@Test
112
+	public void pop_InvalidDoesNothing() throws Exception {
113
+		uut.pop("123");
114
+		uut.setRoot(child1);
115
+		uut.pop(child1.getId());
116
+	}
117
+
118
+	@Test
119
+	public void pop_FromCorrectStackByFindingChildId() throws Exception {
120
+		BottomTabsController bottomTabsController = new BottomTabsController(activity, "tabsController");
121
+		StackController stack1 = new StackController(activity, "stack1");
122
+		StackController stack2 = new StackController(activity, "stack2");
123
+		stack1.push(child1);
124
+		stack2.push(child2);
125
+		stack2.push(child3);
126
+		bottomTabsController.setTabs(Arrays.<ViewController>asList(stack1, stack2));
127
+		uut.setRoot(bottomTabsController);
128
+
129
+		uut.pop(child2.getId());
130
+
131
+		assertThat(stack2.getChildControllers()).containsOnly(child2);
132
+	}
133
+
109
 	private void assertHasSingleChildViewOf(ViewController parent, ViewController child) {
134
 	private void assertHasSingleChildViewOf(ViewController parent, ViewController child) {
110
 		assertThat(((ViewGroup) parent.getView()).getChildCount()).isEqualTo(1);
135
 		assertThat(((ViewGroup) parent.getView()).getChildCount()).isEqualTo(1);
111
 		assertThat(((ViewGroup) parent.getView()).getChildAt(0)).isEqualTo(child.getView()).isNotNull();
136
 		assertThat(((ViewGroup) parent.getView()).getChildAt(0)).isEqualTo(child.getView()).isNotNull();