ソースを参照

removing layout interface so that we can better control individual containers

Daniel Zlotin 8 年 前
コミット
5b4c4e6142

lib/android/app/src/main/java/com/reactnativenavigation/controllers/ActivityLifecycleDelegate.java → lib/android/app/src/main/java/com/reactnativenavigation/ActivityLifecycleDelegate.java ファイルの表示

@@ -1,9 +1,7 @@
1
-package com.reactnativenavigation.controllers;
1
+package com.reactnativenavigation;
2 2
 
3 3
 import com.facebook.react.ReactInstanceManager;
4 4
 import com.facebook.react.bridge.ReactContext;
5
-import com.facebook.react.modules.core.DeviceEventManagerModule;
6
-import com.reactnativenavigation.NavigationActivity;
7 5
 import com.reactnativenavigation.react.DevPermissionRequest;
8 6
 import com.reactnativenavigation.react.NavigationEventEmitter;
9 7
 
@@ -61,7 +59,7 @@ public class ActivityLifecycleDelegate {
61 59
 
62 60
 	private void emitAppLaunchedOnceIfNeeded() {
63 61
 		if (appLaunchEmitted.compareAndSet(false, true)) {
64
-			new NavigationEventEmitter(reactInstanceManager.getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)).appLaunched();
62
+			new NavigationEventEmitter(reactInstanceManager.getCurrentReactContext()).appLaunched();
65 63
 		}
66 64
 	}
67 65
 

+ 2
- 2
lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java ファイルの表示

@@ -6,7 +6,7 @@ import android.support.v7.app.AppCompatActivity;
6 6
 import android.view.View;
7 7
 
8 8
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
9
-import com.reactnativenavigation.layout.StackLayout;
9
+import com.reactnativenavigation.layout.containers.ContainerStack;
10 10
 
11 11
 public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
12 12
 	private View contentView;
@@ -53,7 +53,7 @@ public class NavigationActivity extends AppCompatActivity implements DefaultHard
53 53
 
54 54
 	@Override
55 55
 	public void onBackPressed() {
56
-		if (!(contentView instanceof StackLayout) || !((StackLayout) contentView).onBackPressed()) {
56
+		if (!(contentView instanceof ContainerStack) || !((ContainerStack) contentView).onBackPressed()) {
57 57
 			super.onBackPressed();
58 58
 		}
59 59
 	}

+ 0
- 1
lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java ファイルの表示

@@ -4,7 +4,6 @@ import android.app.Application;
4 4
 
5 5
 import com.facebook.react.ReactApplication;
6 6
 import com.facebook.react.ReactNativeHost;
7
-import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
8 7
 import com.reactnativenavigation.react.NavigationReactNativeHost;
9 8
 
10 9
 public abstract class NavigationApplication extends Application implements ReactApplication {

+ 0
- 11
lib/android/app/src/main/java/com/reactnativenavigation/layout/StackLayout.java ファイルの表示

@@ -1,11 +0,0 @@
1
-package com.reactnativenavigation.layout;
2
-
3
-import com.reactnativenavigation.layout.containers.Container;
4
-
5
-public interface StackLayout {
6
-	void push(Container view);
7
-
8
-	void pop();
9
-
10
-	boolean onBackPressed();
11
-}

+ 2
- 3
lib/android/app/src/main/java/com/reactnativenavigation/layout/containers/Container.java ファイルの表示

@@ -7,7 +7,6 @@ import android.widget.FrameLayout;
7 7
 
8 8
 import com.facebook.react.ReactInstanceManager;
9 9
 import com.facebook.react.ReactRootView;
10
-import com.facebook.react.modules.core.DeviceEventManagerModule;
11 10
 import com.reactnativenavigation.react.NavigationEventEmitter;
12 11
 
13 12
 public class Container extends FrameLayout {
@@ -54,11 +53,11 @@ public class Container extends FrameLayout {
54 53
 	}
55 54
 
56 55
 	private void onStart() {
57
-		new NavigationEventEmitter(reactInstanceManager.getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)).containerStart(id);
56
+		new NavigationEventEmitter(reactInstanceManager.getCurrentReactContext()).containerStart(id);
58 57
 	}
59 58
 
60 59
 	private void onStop() {
61
-		new NavigationEventEmitter(reactInstanceManager.getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)).containerStop(id);
60
+		new NavigationEventEmitter(reactInstanceManager.getCurrentReactContext()).containerStop(id);
62 61
 	}
63 62
 
64 63
 }

+ 1
- 7
lib/android/app/src/main/java/com/reactnativenavigation/layout/containers/ContainerStack.java ファイルの表示

@@ -3,11 +3,9 @@ package com.reactnativenavigation.layout.containers;
3 3
 import android.content.Context;
4 4
 import android.widget.FrameLayout;
5 5
 
6
-import com.reactnativenavigation.layout.StackLayout;
7
-
8 6
 import java.util.Stack;
9 7
 
10
-public class ContainerStack extends FrameLayout implements StackLayout {
8
+public class ContainerStack extends FrameLayout {
11 9
 
12 10
 	private Stack<Container> stack = new Stack<>();
13 11
 
@@ -15,8 +13,6 @@ public class ContainerStack extends FrameLayout implements StackLayout {
15 13
 		super(context);
16 14
 	}
17 15
 
18
-
19
-	@Override
20 16
 	public void push(Container view) {
21 17
 		stack.push(view);
22 18
 		addView(view);
@@ -26,7 +22,6 @@ public class ContainerStack extends FrameLayout implements StackLayout {
26 22
 		}
27 23
 	}
28 24
 
29
-	@Override
30 25
 	public void pop() {
31 26
 		Container top = stack.pop();
32 27
 		removeView(top);
@@ -37,7 +32,6 @@ public class ContainerStack extends FrameLayout implements StackLayout {
37 32
 		}
38 33
 	}
39 34
 
40
-	@Override
41 35
 	public boolean onBackPressed() {
42 36
 		if (stack.isEmpty()) {
43 37
 			return false;

+ 4
- 2
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationEventEmitter.java ファイルの表示

@@ -1,7 +1,9 @@
1 1
 package com.reactnativenavigation.react;
2 2
 
3 3
 import com.facebook.react.bridge.Arguments;
4
+import com.facebook.react.bridge.ReactContext;
4 5
 import com.facebook.react.bridge.WritableMap;
6
+import com.facebook.react.modules.core.DeviceEventManagerModule;
5 7
 
6 8
 import static com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
7 9
 
@@ -12,8 +14,8 @@ public class NavigationEventEmitter {
12 14
 
13 15
 	private final RCTDeviceEventEmitter emitter;
14 16
 
15
-	public NavigationEventEmitter(final RCTDeviceEventEmitter emitter) {
16
-		this.emitter = emitter;
17
+	public NavigationEventEmitter(ReactContext reactContext) {
18
+		this.emitter = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
17 19
 	}
18 20
 
19 21
 	public void appLaunched() {

+ 3
- 3
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java ファイルの表示

@@ -10,8 +10,8 @@ import com.facebook.react.bridge.ReadableMap;
10 10
 import com.reactnativenavigation.NavigationActivity;
11 11
 import com.reactnativenavigation.layout.LayoutFactory;
12 12
 import com.reactnativenavigation.layout.LayoutNode;
13
-import com.reactnativenavigation.layout.StackLayout;
14 13
 import com.reactnativenavigation.layout.containers.Container;
14
+import com.reactnativenavigation.layout.containers.ContainerStack;
15 15
 import com.reactnativenavigation.utils.UiThread;
16 16
 
17 17
 public class NavigationModule extends ReactContextBaseJavaModule {
@@ -49,7 +49,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
49 49
 				final LayoutNode layoutNode = LayoutNode.parse(ArgsParser.parse(layoutTree));
50 50
 				LayoutFactory factory = new LayoutFactory(activity(), reactInstanceManager);
51 51
 				final View rootView = factory.create(layoutNode);
52
-				((StackLayout) activity().getContentView()).push((Container) rootView);
52
+				((ContainerStack) activity().getContentView()).push((Container) rootView);
53 53
 			}
54 54
 		});
55 55
 	}
@@ -59,7 +59,7 @@ public class NavigationModule extends ReactContextBaseJavaModule {
59 59
 		handle(new Runnable() {
60 60
 			@Override
61 61
 			public void run() {
62
-				((StackLayout) activity().getContentView()).pop();
62
+				((ContainerStack) activity().getContentView()).pop();
63 63
 			}
64 64
 		});
65 65
 	}