Ver código fonte

removing layout interface so that we can better control individual containers

Daniel Zlotin 8 anos atrás
pai
commit
5b4c4e6142

lib/android/app/src/main/java/com/reactnativenavigation/controllers/ActivityLifecycleDelegate.java → lib/android/app/src/main/java/com/reactnativenavigation/ActivityLifecycleDelegate.java Ver arquivo

1
-package com.reactnativenavigation.controllers;
1
+package com.reactnativenavigation;
2
 
2
 
3
 import com.facebook.react.ReactInstanceManager;
3
 import com.facebook.react.ReactInstanceManager;
4
 import com.facebook.react.bridge.ReactContext;
4
 import com.facebook.react.bridge.ReactContext;
5
-import com.facebook.react.modules.core.DeviceEventManagerModule;
6
-import com.reactnativenavigation.NavigationActivity;
7
 import com.reactnativenavigation.react.DevPermissionRequest;
5
 import com.reactnativenavigation.react.DevPermissionRequest;
8
 import com.reactnativenavigation.react.NavigationEventEmitter;
6
 import com.reactnativenavigation.react.NavigationEventEmitter;
9
 
7
 
61
 
59
 
62
 	private void emitAppLaunchedOnceIfNeeded() {
60
 	private void emitAppLaunchedOnceIfNeeded() {
63
 		if (appLaunchEmitted.compareAndSet(false, true)) {
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 Ver arquivo

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

+ 0
- 1
lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java Ver arquivo

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

+ 0
- 11
lib/android/app/src/main/java/com/reactnativenavigation/layout/StackLayout.java Ver arquivo

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 Ver arquivo

7
 
7
 
8
 import com.facebook.react.ReactInstanceManager;
8
 import com.facebook.react.ReactInstanceManager;
9
 import com.facebook.react.ReactRootView;
9
 import com.facebook.react.ReactRootView;
10
-import com.facebook.react.modules.core.DeviceEventManagerModule;
11
 import com.reactnativenavigation.react.NavigationEventEmitter;
10
 import com.reactnativenavigation.react.NavigationEventEmitter;
12
 
11
 
13
 public class Container extends FrameLayout {
12
 public class Container extends FrameLayout {
54
 	}
53
 	}
55
 
54
 
56
 	private void onStart() {
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
 	private void onStop() {
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 Ver arquivo

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

+ 4
- 2
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationEventEmitter.java Ver arquivo

1
 package com.reactnativenavigation.react;
1
 package com.reactnativenavigation.react;
2
 
2
 
3
 import com.facebook.react.bridge.Arguments;
3
 import com.facebook.react.bridge.Arguments;
4
+import com.facebook.react.bridge.ReactContext;
4
 import com.facebook.react.bridge.WritableMap;
5
 import com.facebook.react.bridge.WritableMap;
6
+import com.facebook.react.modules.core.DeviceEventManagerModule;
5
 
7
 
6
 import static com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
8
 import static com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
7
 
9
 
12
 
14
 
13
 	private final RCTDeviceEventEmitter emitter;
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
 	public void appLaunched() {
21
 	public void appLaunched() {

+ 3
- 3
lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java Ver arquivo

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