Преглед изворни кода

removed store, viewControllers now have id

Daniel Zlotin пре 7 година
родитељ
комит
f6924be92e

+ 1
- 3
lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java Прегледај датотеку

11
 
11
 
12
 public abstract class NavigationApplication extends Application implements ReactApplication, Application.ActivityLifecycleCallbacks {
12
 public abstract class NavigationApplication extends Application implements ReactApplication, Application.ActivityLifecycleCallbacks {
13
 
13
 
14
-	private Store store;
15
 	private NavigationReactNativeHost reactNativeHost;
14
 	private NavigationReactNativeHost reactNativeHost;
16
 	private NavigationReactInitializer initializer;
15
 	private NavigationReactInitializer initializer;
17
 
16
 
18
 	@Override
17
 	@Override
19
 	public void onCreate() {
18
 	public void onCreate() {
20
 		super.onCreate();
19
 		super.onCreate();
21
-		store = new Store();
22
-		reactNativeHost = new NavigationReactNativeHost(this, isDebug(), store);
20
+		reactNativeHost = new NavigationReactNativeHost(this, isDebug());
23
 		initializer = new NavigationReactInitializer(reactNativeHost.getReactInstanceManager(), isDebug());
21
 		initializer = new NavigationReactInitializer(reactNativeHost.getReactInstanceManager(), isDebug());
24
 		registerActivityLifecycleCallbacks(this);
22
 		registerActivityLifecycleCallbacks(this);
25
 	}
23
 	}

+ 4
- 13
lib/android/app/src/main/java/com/reactnativenavigation/layout/LayoutFactory.java Прегледај датотеку

3
 import android.app.Activity;
3
 import android.app.Activity;
4
 
4
 
5
 import com.facebook.react.ReactInstanceManager;
5
 import com.facebook.react.ReactInstanceManager;
6
-import com.reactnativenavigation.Store;
7
 import com.reactnativenavigation.layout.impl.ReactRootViewController;
6
 import com.reactnativenavigation.layout.impl.ReactRootViewController;
8
 import com.reactnativenavigation.viewcontrollers.StackController;
7
 import com.reactnativenavigation.viewcontrollers.StackController;
9
 import com.reactnativenavigation.viewcontrollers.ViewController;
8
 import com.reactnativenavigation.viewcontrollers.ViewController;
12
 
11
 
13
 	private final Activity activity;
12
 	private final Activity activity;
14
 	private final ReactInstanceManager reactInstanceManager;
13
 	private final ReactInstanceManager reactInstanceManager;
15
-	private final Store store;
16
 
14
 
17
-	public LayoutFactory(Activity activity, final ReactInstanceManager reactInstanceManager, final Store store) {
15
+	public LayoutFactory(Activity activity, final ReactInstanceManager reactInstanceManager) {
18
 		this.activity = activity;
16
 		this.activity = activity;
19
 		this.reactInstanceManager = reactInstanceManager;
17
 		this.reactInstanceManager = reactInstanceManager;
20
-		this.store = store;
21
 	}
18
 	}
22
 
19
 
23
-	public ViewController createAndSaveToStore(LayoutNode node) {
24
-		ViewController viewController = create(node);
25
-		store.setViewController(node.id, viewController);
26
-		return viewController;
27
-	}
28
-
29
-	private ViewController create(final LayoutNode node) {
20
+	public ViewController create(final LayoutNode node) {
30
 		switch (node.type) {
21
 		switch (node.type) {
31
 			case Container:
22
 			case Container:
32
 				return createContainer(node);
23
 				return createContainer(node);
86
 	}
77
 	}
87
 
78
 
88
 	private ViewController createContainerStack(LayoutNode node) {
79
 	private ViewController createContainerStack(LayoutNode node) {
89
-		StackController stackController = new StackController(activity);
80
+		StackController stackController = new StackController(activity, node.id);
90
 		for (LayoutNode child : node.children) {
81
 		for (LayoutNode child : node.children) {
91
-			stackController.push(createAndSaveToStore(child));
82
+			stackController.push(create(child));
92
 		}
83
 		}
93
 		return stackController;
84
 		return stackController;
94
 	}
85
 	}

+ 2
- 4
lib/android/app/src/main/java/com/reactnativenavigation/layout/impl/ReactRootViewController.java Прегледај датотеку

11
 
11
 
12
 public class ReactRootViewController extends ViewController {
12
 public class ReactRootViewController extends ViewController {
13
 
13
 
14
-	private final String id;
15
 	private final String name;
14
 	private final String name;
16
 	private final ReactInstanceManager reactInstanceManager;
15
 	private final ReactInstanceManager reactInstanceManager;
17
 	private boolean attachedToReactInstance = false;
16
 	private boolean attachedToReactInstance = false;
18
 
17
 
19
 	public ReactRootViewController(final Activity activity, final String id, final String name, final ReactInstanceManager reactInstanceManager) {
18
 	public ReactRootViewController(final Activity activity, final String id, final String name, final ReactInstanceManager reactInstanceManager) {
20
-		super(activity);
21
-		this.id = id;
19
+		super(activity, id);
22
 		this.name = name;
20
 		this.name = name;
23
 		this.reactInstanceManager = reactInstanceManager;
21
 		this.reactInstanceManager = reactInstanceManager;
24
 	}
22
 	}
61
 	protected View createView() {
59
 	protected View createView() {
62
 		ReactRootView reactRootView = new ReactRootView(getActivity());
60
 		ReactRootView reactRootView = new ReactRootView(getActivity());
63
 		Bundle opts = new Bundle();
61
 		Bundle opts = new Bundle();
64
-		opts.putString("id", this.id);
62
+		opts.putString("id", getId());
65
 		reactRootView.startReactApplication(this.reactInstanceManager, this.name, opts);
63
 		reactRootView.startReactApplication(this.reactInstanceManager, this.name, opts);
66
 		reactRootView.setEventListener(new ReactRootView.ReactRootViewEventListener() {
64
 		reactRootView.setEventListener(new ReactRootView.ReactRootViewEventListener() {
67
 			@Override
65
 			@Override

+ 8
- 11
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java Прегледај датотеку

8
 import com.facebook.react.bridge.ReactMethod;
8
 import com.facebook.react.bridge.ReactMethod;
9
 import com.facebook.react.bridge.ReadableMap;
9
 import com.facebook.react.bridge.ReadableMap;
10
 import com.reactnativenavigation.NavigationActivity;
10
 import com.reactnativenavigation.NavigationActivity;
11
-import com.reactnativenavigation.Store;
12
 import com.reactnativenavigation.layout.LayoutFactory;
11
 import com.reactnativenavigation.layout.LayoutFactory;
13
 import com.reactnativenavigation.layout.LayoutNode;
12
 import com.reactnativenavigation.layout.LayoutNode;
14
 import com.reactnativenavigation.parse.JSONParser;
13
 import com.reactnativenavigation.parse.JSONParser;
20
 public class NavigationModule extends ReactContextBaseJavaModule {
19
 public class NavigationModule extends ReactContextBaseJavaModule {
21
 	private static final String NAME = "RNNBridgeModule";
20
 	private static final String NAME = "RNNBridgeModule";
22
 	private final ReactInstanceManager reactInstanceManager;
21
 	private final ReactInstanceManager reactInstanceManager;
23
-	private final Store store;
24
 
22
 
25
-	public NavigationModule(final ReactApplicationContext reactContext, final ReactInstanceManager reactInstanceManager, final Store store) {
23
+	public NavigationModule(final ReactApplicationContext reactContext, final ReactInstanceManager reactInstanceManager) {
26
 		super(reactContext);
24
 		super(reactContext);
27
 		this.reactInstanceManager = reactInstanceManager;
25
 		this.reactInstanceManager = reactInstanceManager;
28
-		this.store = store;
29
 	}
26
 	}
30
 
27
 
31
 	@Override
28
 	@Override
39
 			@Override
36
 			@Override
40
 			public void run() {
37
 			public void run() {
41
 				final LayoutNode layoutTree = LayoutNodeParser.parse(JSONParser.parse(rawLayoutTree));
38
 				final LayoutNode layoutTree = LayoutNodeParser.parse(JSONParser.parse(rawLayoutTree));
42
-				final ViewController viewController = newLayoutFactory().createAndSaveToStore(layoutTree);
39
+				final ViewController viewController = newLayoutFactory().create(layoutTree);
43
 				navigator().setRoot(viewController);
40
 				navigator().setRoot(viewController);
44
 			}
41
 			}
45
 		});
42
 		});
51
 			@Override
48
 			@Override
52
 			public void run() {
49
 			public void run() {
53
 				final LayoutNode layoutTree = LayoutNodeParser.parse(JSONParser.parse(rawLayoutTree));
50
 				final LayoutNode layoutTree = LayoutNodeParser.parse(JSONParser.parse(rawLayoutTree));
54
-				final ViewController viewController = newLayoutFactory().createAndSaveToStore(layoutTree);
55
-				store.getViewController(onContainerId).getStackController().push(viewController);
51
+				final ViewController viewController = newLayoutFactory().create(layoutTree);
52
+//				store.getViewController(onContainerId).getStackController().push(viewController);
56
 			}
53
 			}
57
 		});
54
 		});
58
 	}
55
 	}
62
 		handle(new Runnable() {
59
 		handle(new Runnable() {
63
 			@Override
60
 			@Override
64
 			public void run() {
61
 			public void run() {
65
-				store.getViewController(onContainerId).getStackController().pop(store.getViewController(onContainerId));
62
+//				store.getViewController(onContainerId).getStackController().pop(store.getViewController(onContainerId));
66
 			}
63
 			}
67
 		});
64
 		});
68
 	}
65
 	}
72
 		handle(new Runnable() {
69
 		handle(new Runnable() {
73
 			@Override
70
 			@Override
74
 			public void run() {
71
 			public void run() {
75
-				store.getViewController(onContainerId).getStackController().popTo(store.getViewController(toContainerId));
72
+//				store.getViewController(onContainerId).getStackController().popTo(store.getViewController(toContainerId));
76
 			}
73
 			}
77
 		});
74
 		});
78
 	}
75
 	}
82
 		handle(new Runnable() {
79
 		handle(new Runnable() {
83
 			@Override
80
 			@Override
84
 			public void run() {
81
 			public void run() {
85
-				store.getViewController(onContainerId).getStackController().popToRoot();
82
+//				store.getViewController(onContainerId).getStackController().popToRoot();
86
 			}
83
 			}
87
 		});
84
 		});
88
 	}
85
 	}
97
 
94
 
98
 	@NonNull
95
 	@NonNull
99
 	private LayoutFactory newLayoutFactory() {
96
 	private LayoutFactory newLayoutFactory() {
100
-		return new LayoutFactory(activity(), reactInstanceManager, store);
97
+		return new LayoutFactory(activity(), reactInstanceManager);
101
 	}
98
 	}
102
 
99
 
103
 	private void handle(Runnable task) {
100
 	private void handle(Runnable task) {

+ 2
- 5
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.java Прегледај датотеку

6
 import com.facebook.react.bridge.NativeModule;
6
 import com.facebook.react.bridge.NativeModule;
7
 import com.facebook.react.bridge.ReactApplicationContext;
7
 import com.facebook.react.bridge.ReactApplicationContext;
8
 import com.facebook.react.uimanager.ViewManager;
8
 import com.facebook.react.uimanager.ViewManager;
9
-import com.reactnativenavigation.Store;
10
 
9
 
11
 import java.util.Arrays;
10
 import java.util.Arrays;
12
 import java.util.Collections;
11
 import java.util.Collections;
15
 public class NavigationPackage implements ReactPackage {
14
 public class NavigationPackage implements ReactPackage {
16
 
15
 
17
 	private ReactNativeHost reactNativeHost;
16
 	private ReactNativeHost reactNativeHost;
18
-	private Store store;
19
 
17
 
20
-	public NavigationPackage(final ReactNativeHost reactNativeHost, final Store store) {
18
+	public NavigationPackage(final ReactNativeHost reactNativeHost) {
21
 		this.reactNativeHost = reactNativeHost;
19
 		this.reactNativeHost = reactNativeHost;
22
-		this.store = store;
23
 	}
20
 	}
24
 
21
 
25
 	@Override
22
 	@Override
26
 	public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
23
 	public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
27
 		return Arrays.<NativeModule>asList(
24
 		return Arrays.<NativeModule>asList(
28
-				new NavigationModule(reactContext, reactNativeHost.getReactInstanceManager(), store)
25
+				new NavigationModule(reactContext, reactNativeHost.getReactInstanceManager())
29
 		);
26
 		);
30
 	}
27
 	}
31
 
28
 

+ 2
- 5
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java Прегледај датотеку

5
 import com.facebook.react.ReactNativeHost;
5
 import com.facebook.react.ReactNativeHost;
6
 import com.facebook.react.ReactPackage;
6
 import com.facebook.react.ReactPackage;
7
 import com.facebook.react.shell.MainReactPackage;
7
 import com.facebook.react.shell.MainReactPackage;
8
-import com.reactnativenavigation.Store;
9
 
8
 
10
 import java.util.Arrays;
9
 import java.util.Arrays;
11
 import java.util.List;
10
 import java.util.List;
13
 public class NavigationReactNativeHost extends ReactNativeHost {
12
 public class NavigationReactNativeHost extends ReactNativeHost {
14
 
13
 
15
 	private final boolean isDebug;
14
 	private final boolean isDebug;
16
-	private Store store;
17
 
15
 
18
-	public NavigationReactNativeHost(Application application, boolean isDebug, final Store store) {
16
+	public NavigationReactNativeHost(Application application, boolean isDebug) {
19
 		super(application);
17
 		super(application);
20
 		this.isDebug = isDebug;
18
 		this.isDebug = isDebug;
21
-		this.store = store;
22
 	}
19
 	}
23
 
20
 
24
 	@Override
21
 	@Override
30
 	protected List<ReactPackage> getPackages() {
27
 	protected List<ReactPackage> getPackages() {
31
 		return Arrays.<ReactPackage>asList(
28
 		return Arrays.<ReactPackage>asList(
32
 				new MainReactPackage(),
29
 				new MainReactPackage(),
33
-				new NavigationPackage(this, store)
30
+				new NavigationPackage(this)
34
 		);
31
 		);
35
 	}
32
 	}
36
 }
33
 }

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/Navigator.java Прегледај датотеку

9
 	private boolean activityResumed = false;
9
 	private boolean activityResumed = false;
10
 
10
 
11
 	public Navigator(final Activity activity) {
11
 	public Navigator(final Activity activity) {
12
-		super(activity);
12
+		super(activity, "navigator");
13
 	}
13
 	}
14
 
14
 
15
 	@NonNull
15
 	@NonNull

+ 2
- 2
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/StackController.java Прегледај датотеку

11
 public class StackController extends ViewController {
11
 public class StackController extends ViewController {
12
 	private final ArrayDeque<ViewController> stack = new ArrayDeque<>();
12
 	private final ArrayDeque<ViewController> stack = new ArrayDeque<>();
13
 
13
 
14
-	public StackController(final Activity activity) {
15
-		super(activity);
14
+	public StackController(final Activity activity, String id) {
15
+		super(activity, id);
16
 	}
16
 	}
17
 
17
 
18
 	public void push(final ViewController child) {
18
 	public void push(final ViewController child) {

+ 7
- 1
lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java Прегледај датотеку

9
 	private View view;
9
 	private View view;
10
 	private final Activity activity;
10
 	private final Activity activity;
11
 	private StackController stackController;
11
 	private StackController stackController;
12
+	private String id;
12
 
13
 
13
-	public ViewController(Activity activity) {
14
+	public ViewController(Activity activity, String id) {
14
 		this.activity = activity;
15
 		this.activity = activity;
16
+		this.id = id;
15
 	}
17
 	}
16
 
18
 
17
 	@NonNull
19
 	@NonNull
41
 		}
43
 		}
42
 		return view;
44
 		return view;
43
 	}
45
 	}
46
+
47
+	public String getId() {
48
+		return id;
49
+	}
44
 }
50
 }

+ 0
- 31
lib/android/app/src/test/java/com/reactnativenavigation/StoreTest.java Прегледај датотеку

1
-package com.reactnativenavigation;
2
-
3
-import android.app.Activity;
4
-
5
-import com.reactnativenavigation.mocks.SimpleViewController;
6
-
7
-import org.junit.Test;
8
-
9
-import static org.assertj.core.api.Java6Assertions.assertThat;
10
-import static org.mockito.Mockito.mock;
11
-
12
-public class StoreTest extends BaseTest {
13
-
14
-	private Store uut;
15
-
16
-	@Override
17
-	public void beforeEach() {
18
-		super.beforeEach();
19
-		uut = new Store();
20
-	}
21
-
22
-	@Test
23
-	public void holdsViewControllersById() throws Exception {
24
-		SimpleViewController viewController = new SimpleViewController(mock(Activity.class), "my controller");
25
-
26
-		assertThat(uut.getViewController("the id")).isNull();
27
-
28
-		uut.setViewController("the id", viewController);
29
-		assertThat(uut.getViewController("the id")).isEqualTo(viewController);
30
-	}
31
-}

+ 3
- 6
lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java Прегледај датотеку

6
 import com.reactnativenavigation.viewcontrollers.ViewController;
6
 import com.reactnativenavigation.viewcontrollers.ViewController;
7
 
7
 
8
 public class SimpleViewController extends ViewController {
8
 public class SimpleViewController extends ViewController {
9
-	private final String name;
10
-
11
-	public SimpleViewController(final Activity activity, String name) {
12
-		super(activity);
13
-		this.name = name;
9
+	public SimpleViewController(final Activity activity, String id) {
10
+		super(activity, id);
14
 	}
11
 	}
15
 
12
 
16
 	@Override
13
 	@Override
20
 
17
 
21
 	@Override
18
 	@Override
22
 	public String toString() {
19
 	public String toString() {
23
-		return "SimpleViewController " + name;
20
+		return "SimpleViewController " + getId();
24
 	}
21
 	}
25
 }
22
 }

+ 0
- 2
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/NavigatorTest.java Прегледај датотеку

58
 		assertHasSingleChildViewOf(child2);
58
 		assertHasSingleChildViewOf(child2);
59
 	}
59
 	}
60
 
60
 
61
-
62
-
63
 	private void assertHasSingleChildViewOf(ViewController vc) {
61
 	private void assertHasSingleChildViewOf(ViewController vc) {
64
 		assertThat(uut.getView().getChildCount()).isEqualTo(1);
62
 		assertThat(uut.getView().getChildCount()).isEqualTo(1);
65
 		assertThat(uut.getView().getChildAt(0)).isEqualTo(vc.getView()).isNotNull();
63
 		assertThat(uut.getView().getChildAt(0)).isEqualTo(vc.getView()).isNotNull();

+ 2
- 2
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/StackControllerTest.java Прегледај датотеку

23
 	public void beforeEach() {
23
 	public void beforeEach() {
24
 		super.beforeEach();
24
 		super.beforeEach();
25
 		activity = newActivity();
25
 		activity = newActivity();
26
-		uut = new StackController(activity);
26
+		uut = new StackController(activity, "uut");
27
 		child1 = new SimpleViewController(activity, "child1");
27
 		child1 = new SimpleViewController(activity, "child1");
28
 		child2 = new SimpleViewController(activity, "child2");
28
 		child2 = new SimpleViewController(activity, "child2");
29
 		child3 = new SimpleViewController(activity, "child3");
29
 		child3 = new SimpleViewController(activity, "child3");
77
 		uut.push(child1);
77
 		uut.push(child1);
78
 		assertThat(child1.getStackController()).isEqualTo(uut);
78
 		assertThat(child1.getStackController()).isEqualTo(uut);
79
 
79
 
80
-		StackController anotherNavController = new StackController(activity);
80
+		StackController anotherNavController = new StackController(activity, "another");
81
 		anotherNavController.push(child2);
81
 		anotherNavController.push(child2);
82
 		assertThat(child2.getStackController()).isEqualTo(anotherNavController);
82
 		assertThat(child2.getStackController()).isEqualTo(anotherNavController);
83
 	}
83
 	}

+ 7
- 2
lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/ViewControllerTest.java Прегледај датотеку

35
 	@Test
35
 	@Test
36
 	public void canOverrideViewCreation() throws Exception {
36
 	public void canOverrideViewCreation() throws Exception {
37
 		final View otherView = new View(activity);
37
 		final View otherView = new View(activity);
38
-		ViewController myController = new ViewController(activity) {
38
+		ViewController myController = new ViewController(activity, "vc") {
39
 			@Override
39
 			@Override
40
 			protected View createView() {
40
 			protected View createView() {
41
 				return otherView;
41
 				return otherView;
47
 	@Test
47
 	@Test
48
 	public void holdsAReferenceToStackControllerOrNull() throws Exception {
48
 	public void holdsAReferenceToStackControllerOrNull() throws Exception {
49
 		assertThat(uut.getStackController()).isNull();
49
 		assertThat(uut.getStackController()).isNull();
50
-		StackController nav = new StackController(activity);
50
+		StackController nav = new StackController(activity, "stack");
51
 		nav.push(uut);
51
 		nav.push(uut);
52
 		assertThat(uut.getStackController()).isEqualTo(nav);
52
 		assertThat(uut.getStackController()).isEqualTo(nav);
53
 	}
53
 	}
56
 	public void handleBackDefaultFalse() throws Exception {
56
 	public void handleBackDefaultFalse() throws Exception {
57
 		assertThat(uut.handleBack()).isFalse();
57
 		assertThat(uut.handleBack()).isFalse();
58
 	}
58
 	}
59
+
60
+	@Test
61
+	public void holdsId() throws Exception {
62
+		assertThat(uut.getId()).isEqualTo("uut");
63
+	}
59
 }
64
 }