Browse Source

navigator setRoot

Daniel Zlotin 7 years ago
parent
commit
4ebe331d05

+ 2
- 0
lib/android/app/src/main/java/com/reactnativenavigation/layout/impl/ReactRootViewController.java View File

@@ -2,6 +2,7 @@ package com.reactnativenavigation.layout.impl;
2 2
 
3 3
 import android.app.Activity;
4 4
 import android.os.Bundle;
5
+import android.support.annotation.NonNull;
5 6
 import android.view.View;
6 7
 
7 8
 import com.facebook.react.ReactInstanceManager;
@@ -55,6 +56,7 @@ public class ReactRootViewController extends ViewController {
55 56
 //		}
56 57
 //	}
57 58
 
59
+	@NonNull
58 60
 	@Override
59 61
 	protected View createView() {
60 62
 		ReactRootView reactRootView = new ReactRootView(getActivity());

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

@@ -15,8 +15,13 @@ public class Navigator extends ViewController {
15 15
 	@NonNull
16 16
 	@Override
17 17
 	protected View createView() {
18
-		FrameLayout view = new FrameLayout(getActivity());
19
-		return view;
18
+		return new FrameLayout(getActivity());
19
+	}
20
+
21
+	@NonNull
22
+	@Override
23
+	public FrameLayout getView() {
24
+		return (FrameLayout) super.getView();
20 25
 	}
21 26
 
22 27
 	public boolean isActivityResumed() {
@@ -24,10 +29,8 @@ public class Navigator extends ViewController {
24 29
 	}
25 30
 
26 31
 	public void setRoot(final ViewController viewController) {
27
-		getActivity().setContentView(viewController.getView());
28
-		if (activityResumed) {
29
-//			viewController.onStart();
30
-		}
32
+		getView().removeAllViews();
33
+		getView().addView(viewController.getView());
31 34
 	}
32 35
 
33 36
 	public void onActivityCreated() {

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

@@ -1,6 +1,7 @@
1 1
 package com.reactnativenavigation.viewcontrollers;
2 2
 
3 3
 import android.app.Activity;
4
+import android.support.annotation.NonNull;
4 5
 import android.support.annotation.Nullable;
5 6
 import android.view.ViewGroup;
6 7
 import android.widget.FrameLayout;
@@ -71,11 +72,13 @@ public class StackController extends ViewController {
71 72
 		}
72 73
 	}
73 74
 
75
+	@NonNull
74 76
 	@Override
75 77
 	public ViewGroup getView() {
76 78
 		return (ViewGroup) super.getView();
77 79
 	}
78 80
 
81
+	@NonNull
79 82
 	@Override
80 83
 	protected ViewGroup createView() {
81 84
 		return new FrameLayout(getActivity());

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

@@ -9,19 +9,20 @@ import org.junit.Test;
9 9
 import org.robolectric.Shadows;
10 10
 
11 11
 import static org.assertj.core.api.Java6Assertions.assertThat;
12
-import static org.mockito.Mockito.spy;
13 12
 
14 13
 public class NavigatorTest extends BaseTest {
15 14
 	private Activity activity;
16 15
 	private Navigator uut;
17
-	private SimpleViewController viewController;
16
+	private ViewController child1;
17
+	private ViewController child2;
18 18
 
19 19
 	@Override
20 20
 	public void beforeEach() {
21 21
 		super.beforeEach();
22 22
 		activity = newActivity();
23
-		viewController = spy(new SimpleViewController(activity, "simpleViewController"));
24 23
 		uut = new Navigator(activity);
24
+		child1 = new SimpleViewController(activity, "child1");
25
+		child2 = new SimpleViewController(activity, "child2");
25 26
 	}
26 27
 
27 28
 
@@ -42,4 +43,24 @@ public class NavigatorTest extends BaseTest {
42 43
 		uut.onActivityCreated();
43 44
 		assertThat(Shadows.shadowOf(activity).getContentView()).isNotNull().isEqualTo(uut.getView());
44 45
 	}
46
+
47
+	@Test
48
+	public void setRoot_AddsChildControllerView() throws Exception {
49
+		assertThat(uut.getView().getChildCount()).isZero();
50
+		uut.setRoot(child1);
51
+		assertHasSingleChildViewOf(child1);
52
+	}
53
+
54
+	@Test
55
+	public void setRoot_ReplacesExistingChildControllerView() throws Exception {
56
+		uut.setRoot(child1);
57
+		uut.setRoot(child2);
58
+		assertHasSingleChildViewOf(child2);
59
+	}
60
+
61
+	private void assertHasSingleChildViewOf(ViewController vc) {
62
+		assertThat(uut.getView().getChildCount()).isEqualTo(1);
63
+		assertThat(uut.getView().getChildAt(0)).isEqualTo(vc.getView()).isNotNull();
64
+	}
65
+
45 66
 }