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
 
2
 
3
 import android.app.Activity;
3
 import android.app.Activity;
4
 import android.os.Bundle;
4
 import android.os.Bundle;
5
+import android.support.annotation.NonNull;
5
 import android.view.View;
6
 import android.view.View;
6
 
7
 
7
 import com.facebook.react.ReactInstanceManager;
8
 import com.facebook.react.ReactInstanceManager;
55
 //		}
56
 //		}
56
 //	}
57
 //	}
57
 
58
 
59
+	@NonNull
58
 	@Override
60
 	@Override
59
 	protected View createView() {
61
 	protected View createView() {
60
 		ReactRootView reactRootView = new ReactRootView(getActivity());
62
 		ReactRootView reactRootView = new ReactRootView(getActivity());

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

15
 	@NonNull
15
 	@NonNull
16
 	@Override
16
 	@Override
17
 	protected View createView() {
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
 	public boolean isActivityResumed() {
27
 	public boolean isActivityResumed() {
24
 	}
29
 	}
25
 
30
 
26
 	public void setRoot(final ViewController viewController) {
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
 	public void onActivityCreated() {
36
 	public void onActivityCreated() {

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

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

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

9
 import org.robolectric.Shadows;
9
 import org.robolectric.Shadows;
10
 
10
 
11
 import static org.assertj.core.api.Java6Assertions.assertThat;
11
 import static org.assertj.core.api.Java6Assertions.assertThat;
12
-import static org.mockito.Mockito.spy;
13
 
12
 
14
 public class NavigatorTest extends BaseTest {
13
 public class NavigatorTest extends BaseTest {
15
 	private Activity activity;
14
 	private Activity activity;
16
 	private Navigator uut;
15
 	private Navigator uut;
17
-	private SimpleViewController viewController;
16
+	private ViewController child1;
17
+	private ViewController child2;
18
 
18
 
19
 	@Override
19
 	@Override
20
 	public void beforeEach() {
20
 	public void beforeEach() {
21
 		super.beforeEach();
21
 		super.beforeEach();
22
 		activity = newActivity();
22
 		activity = newActivity();
23
-		viewController = spy(new SimpleViewController(activity, "simpleViewController"));
24
 		uut = new Navigator(activity);
23
 		uut = new Navigator(activity);
24
+		child1 = new SimpleViewController(activity, "child1");
25
+		child2 = new SimpleViewController(activity, "child2");
25
 	}
26
 	}
26
 
27
 
27
 
28
 
42
 		uut.onActivityCreated();
43
 		uut.onActivityCreated();
43
 		assertThat(Shadows.shadowOf(activity).getContentView()).isNotNull().isEqualTo(uut.getView());
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
 }