소스 검색

add support for react-native 0.57.0 (#3851)

Abdullah Alradadi 6 년 전
부모
커밋
ab2f33592d

+ 3
- 0
lib/android/app/build.gradle 파일 보기

@@ -57,6 +57,9 @@ android {
57 57
         reactNative56 {
58 58
             dimension "RNN.reactNativeVersion"
59 59
         }
60
+        reactNative57 {
61
+            dimension "RNN.reactNativeVersion"
62
+        }
60 63
     }
61 64
 }
62 65
 

lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java → lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java 파일 보기


+ 108
- 0
lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java 파일 보기

@@ -0,0 +1,108 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import android.app.Application;
4
+import android.support.annotation.NonNull;
5
+import android.support.annotation.Nullable;
6
+
7
+import com.facebook.infer.annotation.Assertions;
8
+import com.facebook.react.ReactInstanceManager;
9
+import com.facebook.react.ReactInstanceManagerBuilder;
10
+import com.facebook.react.ReactNativeHost;
11
+import com.facebook.react.ReactPackage;
12
+import com.facebook.react.common.LifecycleState;
13
+import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
14
+import com.facebook.react.shell.MainReactPackage;
15
+import com.reactnativenavigation.NavigationApplication;
16
+
17
+import java.util.ArrayList;
18
+import java.util.List;
19
+
20
+/**
21
+ * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage}
22
+ * and user-defined additional packages.
23
+ */
24
+public class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider {
25
+
26
+    private final boolean isDebug;
27
+    private final List<ReactPackage> additionalReactPackages;
28
+    private @Nullable NavigationDevBundleDownloadListener bundleListener;
29
+    private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() {
30
+        @Override
31
+        public void onSuccess() {
32
+            if (bundleListener != null) {
33
+                bundleListener.onSuccess();
34
+            }
35
+        }
36
+    };
37
+
38
+
39
+    public NavigationReactNativeHost(NavigationApplication application) {
40
+        this(application, application.isDebug(), application.createAdditionalReactPackages());
41
+    }
42
+
43
+    @SuppressWarnings("WeakerAccess")
44
+    public NavigationReactNativeHost(Application application, boolean isDebug, final List<ReactPackage> additionalReactPackages) {
45
+        super(application);
46
+        this.isDebug = isDebug;
47
+        this.additionalReactPackages = additionalReactPackages;
48
+    }
49
+
50
+    @Override
51
+    public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) {
52
+        bundleListener = listener;
53
+    }
54
+
55
+    @Override
56
+    public boolean getUseDeveloperSupport() {
57
+        return isDebug;
58
+    }
59
+
60
+    @Override
61
+    protected List<ReactPackage> getPackages() {
62
+        List<ReactPackage> packages = new ArrayList<>();
63
+        boolean hasMainReactPackage = false;
64
+        packages.add(new NavigationPackage(this));
65
+        if (additionalReactPackages != null) {
66
+            for (ReactPackage p : additionalReactPackages) {
67
+                if (!(p instanceof NavigationPackage)) {
68
+                    packages.add(p);
69
+                }
70
+                if (p instanceof MainReactPackage) hasMainReactPackage = true;
71
+            }
72
+        }
73
+        if (!hasMainReactPackage) {
74
+            packages.add(new MainReactPackage());
75
+        }
76
+        return packages;
77
+    }
78
+
79
+    protected ReactInstanceManager createReactInstanceManager() {
80
+        ReactInstanceManagerBuilder builder = ReactInstanceManager.builder()
81
+                .setApplication(getApplication())
82
+                .setJSMainModulePath(getJSMainModuleName())
83
+                .setUseDeveloperSupport(getUseDeveloperSupport())
84
+                .setRedBoxHandler(getRedBoxHandler())
85
+                .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory())
86
+                .setUIImplementationProvider(getUIImplementationProvider())
87
+                .setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
88
+                .setDevBundleDownloadListener(getDevBundleDownloadListener());
89
+
90
+        for (ReactPackage reactPackage : getPackages()) {
91
+            builder.addPackage(reactPackage);
92
+        }
93
+
94
+        String jsBundleFile = getJSBundleFile();
95
+        if (jsBundleFile != null) {
96
+            builder.setJSBundleFile(jsBundleFile);
97
+        } else {
98
+            builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName()));
99
+        }
100
+        return builder.build();
101
+    }
102
+
103
+    @SuppressWarnings("WeakerAccess")
104
+    @NonNull
105
+    protected DevBundleDownloadListener getDevBundleDownloadListener() {
106
+        return bundleListenerMediator;
107
+    }
108
+}

+ 108
- 0
lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java 파일 보기

@@ -0,0 +1,108 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import android.app.Application;
4
+import android.support.annotation.NonNull;
5
+import android.support.annotation.Nullable;
6
+
7
+import com.facebook.infer.annotation.Assertions;
8
+import com.facebook.react.ReactInstanceManager;
9
+import com.facebook.react.ReactInstanceManagerBuilder;
10
+import com.facebook.react.ReactNativeHost;
11
+import com.facebook.react.ReactPackage;
12
+import com.facebook.react.common.LifecycleState;
13
+import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
14
+import com.facebook.react.shell.MainReactPackage;
15
+import com.reactnativenavigation.NavigationApplication;
16
+
17
+import java.util.ArrayList;
18
+import java.util.List;
19
+
20
+/**
21
+ * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage}
22
+ * and user-defined additional packages.
23
+ */
24
+public class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider {
25
+
26
+    private final boolean isDebug;
27
+    private final List<ReactPackage> additionalReactPackages;
28
+    private @Nullable NavigationDevBundleDownloadListener bundleListener;
29
+    private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() {
30
+        @Override
31
+        public void onSuccess() {
32
+            if (bundleListener != null) {
33
+                bundleListener.onSuccess();
34
+            }
35
+        }
36
+    };
37
+
38
+
39
+    public NavigationReactNativeHost(NavigationApplication application) {
40
+        this(application, application.isDebug(), application.createAdditionalReactPackages());
41
+    }
42
+
43
+    @SuppressWarnings("WeakerAccess")
44
+    public NavigationReactNativeHost(Application application, boolean isDebug, final List<ReactPackage> additionalReactPackages) {
45
+        super(application);
46
+        this.isDebug = isDebug;
47
+        this.additionalReactPackages = additionalReactPackages;
48
+    }
49
+
50
+    @Override
51
+    public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) {
52
+        bundleListener = listener;
53
+    }
54
+
55
+    @Override
56
+    public boolean getUseDeveloperSupport() {
57
+        return isDebug;
58
+    }
59
+
60
+    @Override
61
+    protected List<ReactPackage> getPackages() {
62
+        List<ReactPackage> packages = new ArrayList<>();
63
+        boolean hasMainReactPackage = false;
64
+        packages.add(new NavigationPackage(this));
65
+        if (additionalReactPackages != null) {
66
+            for (ReactPackage p : additionalReactPackages) {
67
+                if (!(p instanceof NavigationPackage)) {
68
+                    packages.add(p);
69
+                }
70
+                if (p instanceof MainReactPackage) hasMainReactPackage = true;
71
+            }
72
+        }
73
+        if (!hasMainReactPackage) {
74
+            packages.add(new MainReactPackage());
75
+        }
76
+        return packages;
77
+    }
78
+
79
+    protected ReactInstanceManager createReactInstanceManager() {
80
+        ReactInstanceManagerBuilder builder = ReactInstanceManager.builder()
81
+                .setApplication(getApplication())
82
+                .setJSMainModulePath(getJSMainModuleName())
83
+                .setUseDeveloperSupport(getUseDeveloperSupport())
84
+                .setRedBoxHandler(getRedBoxHandler())
85
+                .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory())
86
+                .setUIImplementationProvider(getUIImplementationProvider())
87
+                .setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
88
+                .setDevBundleDownloadListener(getDevBundleDownloadListener());
89
+
90
+        for (ReactPackage reactPackage : getPackages()) {
91
+            builder.addPackage(reactPackage);
92
+        }
93
+
94
+        String jsBundleFile = getJSBundleFile();
95
+        if (jsBundleFile != null) {
96
+            builder.setJSBundleFile(jsBundleFile);
97
+        } else {
98
+            builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName()));
99
+        }
100
+        return builder.build();
101
+    }
102
+
103
+    @SuppressWarnings("WeakerAccess")
104
+    @NonNull
105
+    protected DevBundleDownloadListener getDevBundleDownloadListener() {
106
+        return bundleListenerMediator;
107
+    }
108
+}

+ 28
- 0
lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java 파일 보기

@@ -0,0 +1,28 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import com.facebook.react.bridge.NativeDeltaClient;
4
+import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
5
+
6
+import javax.annotation.Nullable;
7
+
8
+public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener, NavigationDevBundleDownloadListener {
9
+    @Override
10
+    public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) {
11
+        onSuccess();
12
+    }
13
+
14
+    @Override
15
+    public void onSuccess() {
16
+
17
+    }
18
+
19
+    @Override
20
+    public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) {
21
+
22
+    }
23
+
24
+    @Override
25
+    public void onFailure(Exception cause) {
26
+
27
+    }
28
+}

+ 28
- 0
lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java 파일 보기

@@ -0,0 +1,28 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import com.facebook.react.bridge.NativeDeltaClient;
4
+import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
5
+
6
+import javax.annotation.Nullable;
7
+
8
+public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener {
9
+    @Override
10
+    public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) {
11
+        onSuccess();
12
+    }
13
+
14
+    @Override
15
+    public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) {
16
+
17
+    }
18
+
19
+    @Override
20
+    public void onFailure(Exception cause) {
21
+
22
+    }
23
+
24
+    @Override
25
+    public void onSuccess() {
26
+
27
+    }
28
+}

+ 107
- 0
lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java 파일 보기

@@ -0,0 +1,107 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import android.app.Application;
4
+import android.support.annotation.NonNull;
5
+import android.support.annotation.Nullable;
6
+
7
+import com.facebook.infer.annotation.Assertions;
8
+import com.facebook.react.ReactInstanceManager;
9
+import com.facebook.react.ReactInstanceManagerBuilder;
10
+import com.facebook.react.ReactNativeHost;
11
+import com.facebook.react.ReactPackage;
12
+import com.facebook.react.common.LifecycleState;
13
+import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
14
+import com.facebook.react.shell.MainReactPackage;
15
+import com.reactnativenavigation.NavigationApplication;
16
+
17
+import java.util.ArrayList;
18
+import java.util.List;
19
+
20
+/**
21
+ * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage}
22
+ * and user-defined additional packages.
23
+ */
24
+public class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider {
25
+
26
+    private final boolean isDebug;
27
+    private final List<ReactPackage> additionalReactPackages;
28
+    private @Nullable NavigationDevBundleDownloadListener bundleListener;
29
+    private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() {
30
+        @Override
31
+        public void onSuccess() {
32
+            if (bundleListener != null) {
33
+                bundleListener.onSuccess();
34
+            }
35
+        }
36
+    };
37
+
38
+
39
+    public NavigationReactNativeHost(NavigationApplication application) {
40
+        this(application, application.isDebug(), application.createAdditionalReactPackages());
41
+    }
42
+
43
+    @SuppressWarnings("WeakerAccess")
44
+    public NavigationReactNativeHost(Application application, boolean isDebug, final List<ReactPackage> additionalReactPackages) {
45
+        super(application);
46
+        this.isDebug = isDebug;
47
+        this.additionalReactPackages = additionalReactPackages;
48
+    }
49
+
50
+    @Override
51
+    public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) {
52
+        bundleListener = listener;
53
+    }
54
+
55
+    @Override
56
+    public boolean getUseDeveloperSupport() {
57
+        return isDebug;
58
+    }
59
+
60
+    @Override
61
+    protected List<ReactPackage> getPackages() {
62
+        List<ReactPackage> packages = new ArrayList<>();
63
+        boolean hasMainReactPackage = false;
64
+        packages.add(new NavigationPackage(this));
65
+        if (additionalReactPackages != null) {
66
+            for (ReactPackage p : additionalReactPackages) {
67
+                if (!(p instanceof NavigationPackage)) {
68
+                    packages.add(p);
69
+                }
70
+                if (p instanceof MainReactPackage) hasMainReactPackage = true;
71
+            }
72
+        }
73
+        if (!hasMainReactPackage) {
74
+            packages.add(new MainReactPackage());
75
+        }
76
+        return packages;
77
+    }
78
+
79
+    protected ReactInstanceManager createReactInstanceManager() {
80
+        ReactInstanceManagerBuilder builder = ReactInstanceManager.builder()
81
+                .setApplication(getApplication())
82
+                .setJSMainModulePath(getJSMainModuleName())
83
+                .setUseDeveloperSupport(getUseDeveloperSupport())
84
+                .setRedBoxHandler(getRedBoxHandler())
85
+                .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory())
86
+                .setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
87
+                .setDevBundleDownloadListener(getDevBundleDownloadListener());
88
+
89
+        for (ReactPackage reactPackage : getPackages()) {
90
+            builder.addPackage(reactPackage);
91
+        }
92
+
93
+        String jsBundleFile = getJSBundleFile();
94
+        if (jsBundleFile != null) {
95
+            builder.setJSBundleFile(jsBundleFile);
96
+        } else {
97
+            builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName()));
98
+        }
99
+        return builder.build();
100
+    }
101
+
102
+    @SuppressWarnings("WeakerAccess")
103
+    @NonNull
104
+    protected DevBundleDownloadListener getDevBundleDownloadListener() {
105
+        return bundleListenerMediator;
106
+    }
107
+}

+ 25
- 0
lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java 파일 보기

@@ -0,0 +1,25 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import com.facebook.react.bridge.NativeDeltaClient;
4
+import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
5
+
6
+import javax.annotation.Nullable;
7
+
8
+public abstract class ReloadHandlerFacade implements DevBundleDownloadListener {
9
+    @Override
10
+    public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) {
11
+
12
+    }
13
+
14
+    @Override
15
+    public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) {
16
+
17
+    }
18
+
19
+    @Override
20
+    public void onFailure(Exception cause) {
21
+
22
+    }
23
+
24
+    protected abstract void onSuccess();
25
+}

+ 70
- 0
lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java 파일 보기

@@ -0,0 +1,70 @@
1
+package com.reactnativenavigation.react;
2
+
3
+import android.support.annotation.Nullable;
4
+
5
+import com.facebook.react.bridge.ReactApplicationContext;
6
+import com.facebook.react.bridge.ReadableArray;
7
+import com.facebook.react.bridge.ReadableMap;
8
+import com.facebook.react.uimanager.ThemedReactContext;
9
+import com.facebook.react.uimanager.UIImplementation;
10
+import com.facebook.react.uimanager.UIManagerModule;
11
+import com.facebook.react.uimanager.ViewManager;
12
+import com.facebook.react.uimanager.common.MeasureSpecProvider;
13
+import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
14
+import com.facebook.react.uimanager.events.EventDispatcher;
15
+
16
+import java.util.List;
17
+
18
+@SuppressWarnings("WeakerAccess")
19
+public class SyncUiImplementation extends UIImplementation {
20
+    private static final Object lock = new Object();
21
+
22
+    public SyncUiImplementation(ReactApplicationContext reactContext, List<ViewManager> viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) {
23
+        super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs);
24
+    }
25
+
26
+    public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) {
27
+        super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs);
28
+    }
29
+
30
+    @Override
31
+    public void manageChildren(
32
+            int viewTag,
33
+            @Nullable ReadableArray moveFrom,
34
+            @Nullable ReadableArray moveTo,
35
+            @Nullable ReadableArray addChildTags,
36
+            @Nullable ReadableArray addAtIndices,
37
+            @Nullable ReadableArray removeFrom) {
38
+        synchronized (lock) {
39
+            super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom);
40
+        }
41
+    }
42
+
43
+    @Override
44
+    public void setChildren(int viewTag, ReadableArray childrenTags) {
45
+        synchronized (lock) {
46
+            super.setChildren(viewTag, childrenTags);
47
+        }
48
+    }
49
+
50
+    @Override
51
+    public void createView(int tag, String className, int rootViewTag, ReadableMap props) {
52
+        synchronized (lock) {
53
+            super.createView(tag, className, rootViewTag, props);
54
+        }
55
+    }
56
+
57
+    @Override
58
+    public void removeRootShadowNode(int rootViewTag) {
59
+        synchronized (lock) {
60
+            super.removeRootShadowNode(rootViewTag);
61
+        }
62
+    }
63
+
64
+    @Override
65
+    public <T extends SizeMonitoringFrameLayout & MeasureSpecProvider> void registerRootView(T rootView, int tag, ThemedReactContext context) {
66
+        synchronized (lock) {
67
+            super.registerRootView(rootView, tag, context);
68
+        }
69
+    }
70
+}