From e0517c833f6fed2e32d59a69a9da38029c178629 Mon Sep 17 00:00:00 2001 From: Yogev Ben David Date: Mon, 15 Mar 2021 13:52:32 +0200 Subject: [PATCH 01/39] Upgrade playground react-native version to 0.64 --- lib/android/app/build.gradle | 2 +- package.json | 14 ++-- playground/ios/Podfile | 5 +- .../ios/playground.xcodeproj/project.pbxproj | 76 +++++++++++++++++++ 4 files changed, 88 insertions(+), 9 deletions(-) diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle index 11ba4ac65f1..1d9fb2486ef 100644 --- a/lib/android/app/build.gradle +++ b/lib/android/app/build.gradle @@ -10,7 +10,7 @@ def safeExtGet(prop, fallback) { } def DEFAULT_COMPILE_SDK_VERSION = 29 -def DEFAULT_MIN_SDK_VERSION = 19 +def DEFAULT_MIN_SDK_VERSION = 21 def DEFAULT_TARGET_SDK_VERSION = 29 def kotlinVersion = rootProject.ext.get("RNNKotlinVersion") def kotlinStdlib = safeExtGet('RNNKotlinStdlib', 'kotlin-stdlib-jdk8') diff --git a/package.json b/package.json index 4702b0b2a1c..ada7d4bfe2a 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "tslib": "1.9.3" }, "devDependencies": { - "@babel/core": "7.10.3", + "@babel/core": "7.12.9", "@babel/plugin-proposal-export-default-from": "7.10.1", "@babel/plugin-proposal-export-namespace-from": "7.10.1", "@babel/types": "7.6.x", @@ -78,7 +78,7 @@ "@types/react-test-renderer": "16.9.2", "@typescript-eslint/eslint-plugin": "3.3.0", "@typescript-eslint/parser": "3.3.0", - "babel-jest": "26.1.0", + "babel-jest": "26.6.3", "clang-format": "^1.4.0", "detox": "18.6.2", "eslint": "7.3.0", @@ -90,16 +90,16 @@ "jest": "26.1.0", "jest-circus": "26.1.0", "lint-staged": "10.2.11", - "metro-react-native-babel-preset": "0.59.0", + "metro-react-native-babel-preset": "0.64.0", "prettier": "2.1.2", - "react": "16.13.1", - "react-native": "0.63.2", + "react": "17.0.1", + "react-native": "0.64.0", "react-native-fast-image": "8.x.x", "react-native-gesture-handler": "^1.6.1", "react-native-reanimated": "^1.9.0", "react-native-ui-lib": "5.11.0", "react-redux": "5.x.x", - "react-test-renderer": "16.13.1", + "react-test-renderer": "17.0.1", "redux": "3.x.x", "remx": "2.x.x", "semver": "5.x.x", @@ -187,4 +187,4 @@ } } } -} \ No newline at end of file +} diff --git a/playground/ios/Podfile b/playground/ios/Podfile index d85fe86b013..494a600b4be 100644 --- a/playground/ios/Podfile +++ b/playground/ios/Podfile @@ -5,7 +5,10 @@ platform :ios, '11.0' def all_pods config = use_native_modules! - use_react_native!(:path => config[:reactNativePath]) + use_react_native!( + :path => config[:reactNativePath], + :hermes_enabled => true + ) pod 'ReactNativeNavigation', :path => '../../' end diff --git a/playground/ios/playground.xcodeproj/project.pbxproj b/playground/ios/playground.xcodeproj/project.pbxproj index c868209e629..0859b98eb24 100644 --- a/playground/ios/playground.xcodeproj/project.pbxproj +++ b/playground/ios/playground.xcodeproj/project.pbxproj @@ -467,6 +467,7 @@ 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 4B4DD2714D02BEBC8F96EAD1 /* [CP] Copy Pods Resources */, + 25FDA01D0599E8F8B8062C1B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -486,6 +487,7 @@ 507C80D72429111F00F765F7 /* Frameworks */, 507C80D82429111F00F765F7 /* Resources */, AB86EBB5F0AF15B43F3472FD /* [CP] Copy Pods Resources */, + DC0F0857169E6ADF23C88B28 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -506,6 +508,7 @@ 50996C5A23AA46DD00008F89 /* Frameworks */, 50996C5B23AA46DD00008F89 /* Resources */, EB65541BD6775B84E7C8AEDD /* [CP] Copy Pods Resources */, + 290B14947FB8DCCF300049AA /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -526,6 +529,7 @@ E58D2618238587F4003F36BA /* Frameworks */, E58D2619238587F4003F36BA /* Resources */, 8A0391DE1BA0B3DE9D40DE96 /* [CP] Copy Pods Resources */, + B5ED7EFE2EFED057B172BCA1 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -662,6 +666,42 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 25FDA01D0599E8F8B8062C1B /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-frameworks.sh", + "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 290B14947FB8DCCF300049AA /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-frameworks.sh", + "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 4B4DD2714D02BEBC8F96EAD1 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -760,6 +800,24 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; + B5ED7EFE2EFED057B172BCA1 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-frameworks.sh", + "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; D80DD80E880A67F5575078C4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -782,6 +840,24 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + DC0F0857169E6ADF23C88B28 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-frameworks.sh", + "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; EB65541BD6775B84E7C8AEDD /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; From 423c792e5f997edbfdf933c7e4b90f1ee9c89c49 Mon Sep 17 00:00:00 2001 From: Sergey Ilyevsky Date: Wed, 7 Apr 2021 13:08:04 +0300 Subject: [PATCH 02/39] dummy commit to solve some jenkins problem From d3204eb2e9eedfb0ffa2248ddb312f50334a2fcf Mon Sep 17 00:00:00 2001 From: Igor Gnatyuk Date: Wed, 7 Apr 2021 14:27:22 +0300 Subject: [PATCH 03/39] dummy From ae2e8b3beef8060a0818221c7d5850ced5cc84ba Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 16:26:35 +0300 Subject: [PATCH 04/39] move flavored code to main src drop flavors --- .../reactnativenavigation/options/BackButton.java | 1 - .../options/BottomTabOptions.java | 1 - .../options/BottomTabsOptions.java | 1 - .../reactnativenavigation/options/ButtonOptions.java | 1 - .../options/DotIndicatorOptions.java | 1 - .../reactnativenavigation/options/FabOptions.java | 1 - .../options/HardwareBackButtonOptions.kt | 4 ---- .../options/IconBackgroundOptions.java | 1 - .../reactnativenavigation/options/LayoutOptions.java | 1 - .../options/NavigationBarOptions.java | 1 - .../reactnativenavigation/options/ShadowOptions.kt | 1 - .../options/StatusBarOptions.java | 1 - .../options/SubtitleOptions.java | 1 - .../reactnativenavigation/options/TitleOptions.java | 1 - .../options/TopBarBackgroundOptions.java | 1 - .../reactnativenavigation/options/TopBarOptions.java | 1 - .../options/TopTabsOptions.java | 1 - .../options/parsers/ColorParser.java | 0 .../react/DevBundleDownloadListenerAdapter.java | 0 .../react/JsDevReloadHandlerFacade.java | 0 .../react/NavigationReactNativeHost.java | 10 +++++----- .../reactnativenavigation/react/ReactGateway.java | 4 ++-- .../react/ReloadHandlerFacade.java | 0 .../viewcontroller/YellowBoxDelegate.kt | 11 ++++++++--- .../react/NavigationReactNativeHost.java | 1 - .../viewcontroller/YellowBoxHelper.java | 12 ------------ .../viewcontroller/YellowBoxDelegateTest.java | 6 ++---- 27 files changed, 17 insertions(+), 47 deletions(-) rename lib/android/app/src/{reactNative63 => main}/java/com/reactnativenavigation/options/parsers/ColorParser.java (100%) rename lib/android/app/src/{reactNative63 => main}/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java (100%) rename lib/android/app/src/{reactNative63 => main}/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java (100%) rename lib/android/app/src/{reactNative63 => main}/java/com/reactnativenavigation/react/NavigationReactNativeHost.java (94%) rename lib/android/app/src/{reactNative63 => main}/java/com/reactnativenavigation/react/ReactGateway.java (100%) rename lib/android/app/src/{reactNative63 => main}/java/com/reactnativenavigation/react/ReloadHandlerFacade.java (100%) delete mode 100644 lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java index 9ba9131fdfe..b3168f8d6f7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java @@ -6,7 +6,6 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.TextParser; import com.reactnativenavigation.react.Constants; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java index d8770d4438d..4ed4c3dfe15 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java @@ -11,7 +11,6 @@ import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.IconParser; import com.reactnativenavigation.options.parsers.NumberParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java index 4cefab969ab..8072ff6435b 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java @@ -14,7 +14,6 @@ import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.params.TitleDisplayMode; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.NumberParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java index fb47f41e8e7..2e822ecfbfe 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java @@ -14,7 +14,6 @@ import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java index a3678a5c811..325ab2f81d7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java @@ -9,7 +9,6 @@ import com.reactnativenavigation.options.params.NullNumber; import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.NumberParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java index f6684b4089d..70cc8e524b4 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java @@ -10,7 +10,6 @@ import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.TextParser; import org.json.JSONArray; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt index 6bab3f0a0e4..79a09d8a0e7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt @@ -1,11 +1,7 @@ package com.reactnativenavigation.options -import android.content.Context -import com.reactnativenavigation.options.animations.ViewAnimationOptions import com.reactnativenavigation.options.params.* import com.reactnativenavigation.options.parsers.BoolParser -import com.reactnativenavigation.options.parsers.ColorParser -import com.reactnativenavigation.options.parsers.FractionParser import org.json.JSONObject diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java index 6dc548ec9b9..0b709ae3ac9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java @@ -8,7 +8,6 @@ import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.params.NullDensityPixel; import com.reactnativenavigation.options.params.DensityPixel; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.DensityPixelParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java index 5c1833b562e..9d339577d45 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java @@ -6,7 +6,6 @@ import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.params.NullNumber; import com.reactnativenavigation.options.params.Number; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.NumberParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java index 35d71119631..8bd595d8621 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java @@ -7,7 +7,6 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt index bfbd32d32b2..8a0e6b78618 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt @@ -5,7 +5,6 @@ import com.reactnativenavigation.options.params.Colour import com.reactnativenavigation.options.params.Fraction import com.reactnativenavigation.options.params.NullColor import com.reactnativenavigation.options.params.NullFraction -import com.reactnativenavigation.options.parsers.ColorParser import com.reactnativenavigation.options.parsers.FractionParser import org.json.JSONObject diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java index a1bfe56cd99..64e5fe58a62 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java @@ -9,7 +9,6 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java index b6143e719a9..8567db6838e 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java @@ -8,7 +8,6 @@ import com.reactnativenavigation.options.params.NullFraction; import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.Text; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java index 6c4c6ac7263..e6da7384afc 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java @@ -10,7 +10,6 @@ import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.NumberParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java index 883d4a6174b..c6c32f724fd 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java @@ -8,7 +8,6 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java index 1dc61630d24..9db39acdbc6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java @@ -16,7 +16,6 @@ import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.NumberParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java index 1a1d3c2aa87..94c123f37b2 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java @@ -12,7 +12,6 @@ import com.reactnativenavigation.options.params.NullNumber; import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.parsers.BoolParser; -import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.NumberParser; import org.json.JSONObject; diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.java similarity index 100% rename from lib/android/app/src/reactNative63/java/com/reactnativenavigation/options/parsers/ColorParser.java rename to lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.java diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java similarity index 100% rename from lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java rename to lib/android/app/src/main/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java similarity index 100% rename from lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java rename to lib/android/app/src/main/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java similarity index 94% rename from lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java rename to lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java index 0391aa6d22e..17d5b53e46e 100644 --- a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactNativeHost.java @@ -1,5 +1,9 @@ package com.reactnativenavigation.react; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.facebook.hermes.reactexecutor.HermesExecutorFactory; import com.facebook.infer.annotation.Assertions; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactInstanceManagerBuilder; @@ -8,10 +12,6 @@ import com.facebook.react.common.LifecycleState; import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; import com.reactnativenavigation.NavigationApplication; -import com.reactnativenavigation.react.DevBundleDownloadListenerAdapter; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { @@ -40,7 +40,7 @@ protected ReactInstanceManager createReactInstanceManager() { .setJSMainModulePath(getJSMainModuleName()) .setUseDeveloperSupport(getUseDeveloperSupport()) .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) + .setJavaScriptExecutorFactory(new HermesExecutorFactory()) .setUIImplementationProvider(getUIImplementationProvider()) .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) .setJSIModulesPackage(getJSIModulePackage()) diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/ReactGateway.java similarity index 100% rename from lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReactGateway.java rename to lib/android/app/src/main/java/com/reactnativenavigation/react/ReactGateway.java index 035ec31b2c5..6a091703112 100644 --- a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReactGateway.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/ReactGateway.java @@ -4,11 +4,11 @@ import android.content.Intent; import android.content.res.Configuration; +import androidx.annotation.NonNull; + import com.facebook.react.ReactNativeHost; import com.reactnativenavigation.NavigationActivity; -import androidx.annotation.NonNull; - public class ReactGateway { private final ReactNativeHost host; diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/ReloadHandlerFacade.java similarity index 100% rename from lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReloadHandlerFacade.java rename to lib/android/app/src/main/java/com/reactnativenavigation/react/ReloadHandlerFacade.java diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt index 62fac1b7cc6..a6c47fdba89 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt @@ -8,8 +8,8 @@ import androidx.core.view.get import com.reactnativenavigation.utils.isDebug import java.util.* -open class YellowBoxDelegate(private val context: Context, private val yellowBoxHelper: YellowBoxHelper = YellowBoxHelper()) { - constructor(context: Context) : this(context, YellowBoxHelper()) + +open class YellowBoxDelegate(private val context: Context) { var parent: ViewGroup? = null private set @@ -22,7 +22,7 @@ open class YellowBoxDelegate(private val context: Context, private val yellowBox open fun onChildViewAdded(parent: View, child: View?) { if (!context.isDebug()) return - if (yellowBoxHelper.isYellowBox(parent, child)) onYellowBoxAdded(parent) + if (isYellowBox(parent, child)) onYellowBoxAdded(parent) } fun onYellowBoxAdded(parent: View) { @@ -39,4 +39,9 @@ open class YellowBoxDelegate(private val context: Context, private val yellowBox isDestroyed = true if (yellowBoxViews.isNotEmpty()) yellowBoxViews.forEach { parent?.addView(it) } } + + fun isYellowBox(parent: View?, child: View?): Boolean { + return parent is ViewGroup && + child is ViewGroup && parent.indexOfChild(child) >= 1 + } } \ No newline at end of file diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java index 0391aa6d22e..9b1bd158f3a 100644 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java @@ -8,7 +8,6 @@ import com.facebook.react.common.LifecycleState; import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; import com.reactnativenavigation.NavigationApplication; -import com.reactnativenavigation.react.DevBundleDownloadListenerAdapter; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index 3cd7dae3763..00000000000 --- a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -public class YellowBoxHelper { - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).indexOfChild(child) >= 1; - } -} diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java index baeff6de60e..65672f36701 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java @@ -15,7 +15,6 @@ public class YellowBoxDelegateTest extends BaseTest { private YellowBoxDelegate uut; - private YellowBoxHelper yellowBoxHelper; private View yellowBox; private ViewGroup parent; @@ -24,8 +23,7 @@ public void beforeEach() { Activity context = newActivity(); yellowBox = new View(context); parent = new FrameLayout(context); - yellowBoxHelper = Mockito.mock(YellowBoxHelper.class); - uut = new YellowBoxDelegate(context, yellowBoxHelper); + uut = new YellowBoxDelegate(context); parent.addView(new View(context)); // We assume view at index 0 is not a yellow box parent.addView(yellowBox); } @@ -54,7 +52,7 @@ public void onReactViewDestroy_yellowBoxIsAddedBackToParent() { public void onChildViewAdded() { uut.onChildViewAdded(parent, yellowBox); dispatchPreDraw(yellowBox); - verify(yellowBoxHelper).isYellowBox(parent, yellowBox); + verify(uut).isYellowBox(parent, yellowBox); } @Test From 56605dde70148823f44319e52c3208265a4ec403 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 16:27:07 +0300 Subject: [PATCH 05/39] drop flavors in gradle --- lib/android/app/build.gradle | 90 ------------------------------------ 1 file changed, 90 deletions(-) diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle index 1d9fb2486ef..29cb8fbdd11 100644 --- a/lib/android/app/build.gradle +++ b/lib/android/app/build.gradle @@ -1,4 +1,3 @@ -import groovy.json.JsonSlurper import org.gradle.api.tasks.testing.logging.TestExceptionFormat apply plugin: 'com.android.library' @@ -69,94 +68,6 @@ android { kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8 } - - flavorDimensions "RNN.reactNativeVersion" - productFlavors { - reactNative51 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "51") - } - reactNative55 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "55") - } - reactNative56 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "56") - } - reactNative57 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "57") - } - reactNative57_5 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "57") - } - reactNative60 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "60") - } - reactNative62 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "62") - } - reactNative63 { - dimension "RNN.reactNativeVersion" - buildConfigField("int", "REACT_NATVE_VERSION_MINOR", "63") - } - } - - def flavor = resolveFlavor() - variantFilter { variant -> - def names = variant.flavors*.name - if (!names.contains(flavor)) { - setIgnore(true) - } - } -} - -String resolveFlavor() { - List reactNativeVersionComponents = reactNativeVersionComponents(findReactNativePackageJson()) - Integer reactNativeMinorComponent = reactNativeVersionComponents[1].toInteger() - Integer reactNativePatchComponent = reactNativeVersionComponents[2].toInteger() - - if (reactNativeMinorComponent >= 63) { - return "reactNative63" - } else if (reactNativeMinorComponent >= 62) { - return "reactNative62" - } else if (reactNativeMinorComponent >= 60) { - return "reactNative60" - } else if (reactNativeMinorComponent >= 57 && reactNativePatchComponent >= 5) { - return "reactNative57_5" - } else if (reactNativeMinorComponent >= 57) { - return "reactNative57" - } else if (reactNativeMinorComponent >= 56) { - return "reactNative56" - } else if (reactNativeMinorComponent >= 55) { - return "reactNative55" - } else if (reactNativeMinorComponent >= 51) { - return "reactNative51" - } -} - - -Object findReactNativePackageJson() { - def searchPath = 'node_modules/react-native/package.json' - def projectDir = project.projectDir.toString() + '/' - def rnPackageJsonFile = new File(projectDir + searchPath) - while (!rnPackageJsonFile.exists()) { - searchPath = '../' + searchPath - rnPackageJsonFile = new File(projectDir + searchPath) - } - return rnPackageJsonFile -} - -List reactNativeVersionComponents(rnPackageJsonFile) { - def packageSlurper = new JsonSlurper() - def reactNativePackageJson = packageSlurper.parseText(rnPackageJsonFile.text) - def reactNativeVersion = reactNativePackageJson.version - - return reactNativeVersion.tokenize('-')[0].tokenize('.') } allprojects { p -> @@ -180,7 +91,6 @@ dependencies { implementation 'com.google.android.material:material:1.2.0-alpha03' implementation 'com.github.wix-playground:ahbottomnavigation:3.3.0' -// implementation project(':AHBottomNavigation') implementation 'com.github.wix-playground:reflow-animator:1.0.6' implementation 'com.github.clans:fab:1.6.4' From 8a306930f6a6ddae6443cb60d225c87d302d4564 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 16:27:22 +0300 Subject: [PATCH 06/39] enable hermes by default --- playground/android/app/build.gradle | 30 ++++++++++++----------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index 7581e6895af..e6e6b26a06a 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -1,19 +1,17 @@ apply plugin: "com.android.application" -def enableHermes = false project.ext.react = [ - root : "../../../", - entryFile: "index.js", - bundleAssetName: "index.android.bundle", - bundleInAlpha: true, - bundleInBeta: true, - enableHermes: enableHermes, - hermesFlagsDebug:['-Xes6-proxy','-output-source-map'], - hermesFlagsRelease:['-output-source-map'], - hermesCommand: "../../../node_modules/hermes-engine/%OS-BIN%/hermesc", + root : "../../../", + entryFile : "index.js", + bundleAssetName : "index.android.bundle", + bundleInAlpha : true, + bundleInBeta : true, + enableHermes : true, + hermesFlagsDebug : ['-Xes6-proxy', '-output-source-map'], + hermesFlagsRelease: ['-output-source-map'], + hermesCommand : "../../../node_modules/hermes-engine/%OS-BIN%/hermesc", ] -def jscFlavor = 'org.webkit:android-jsc:+' apply from: "../../../node_modules/react-native/react.gradle" @@ -63,13 +61,9 @@ dependencies { implementation 'com.facebook.react:react-native:+' implementation project(':react-native-fast-image') - if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") - } else { - implementation jscFlavor - } + def hermesPath = "../../node_modules/hermes-engine/android/"; + debugImplementation files(hermesPath + "hermes-debug.aar") + releaseImplementation files(hermesPath + "hermes-release.aar") //noinspection GradleDynamicVersion implementation project(':react-native-navigation') From ef1c97f229bf90c3612a24f624ac7f9e0528b89c Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 16:38:45 +0300 Subject: [PATCH 07/39] remove jsc --- playground/android/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/playground/android/build.gradle b/playground/android/build.gradle index d3628df865a..3c2de89fd34 100644 --- a/playground/android/build.gradle +++ b/playground/android/build.gradle @@ -33,7 +33,6 @@ allprojects { mavenLocal() maven { url "$rootDir/../../node_modules/detox/Detox-android" } maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } - maven { url "$rootDir/../../node_modules/jsc-android/dist" } jcenter() } } From e30f70f3fb2090815780fc3a465dfac7f70a9b6f Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 16:38:55 +0300 Subject: [PATCH 08/39] kotlin 1.4 --- .../views/stack/topbar/titlebar/TitleBarReactView.kt | 2 +- playground/android/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt index 486111838f3..2adfac6c44c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt @@ -19,7 +19,7 @@ class TitleBarReactView(context: Context?, reactInstanceManager: ReactInstanceMa // It's causing infinite measurements, that hung up the UI. // Intercepting largest child by width, and use its width as (parent) ReactRootView width fixed that. // See for more details https://github.com/wix/react-native-navigation/pull/7096 - val measuredWidth = this.children.maxBy { it.measuredWidth }?.measuredWidth?:0 + val measuredWidth = this.children.maxByOrNull { it.measuredWidth }?.measuredWidth?:0 return if (measuredWidth > 0) MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY) else widthMeasureSpec } diff --git a/playground/android/build.gradle b/playground/android/build.gradle index 3c2de89fd34..db82a2a6496 100644 --- a/playground/android/build.gradle +++ b/playground/android/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - kotlinVersion = "1.3.72" + kotlinVersion = "1.4.32" RNNKotlinVersion = kotlinVersion detoxKotlinVersion = kotlinVersion } From 167b72bb61c80f862fe7a2982ba720f19bc34ed4 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 17:03:00 +0300 Subject: [PATCH 09/39] reimport color parser --- .../java/com/reactnativenavigation/options/BackButton.java | 1 + .../com/reactnativenavigation/options/BottomTabOptions.java | 1 + .../com/reactnativenavigation/options/BottomTabsOptions.java | 1 + .../java/com/reactnativenavigation/options/ButtonOptions.java | 1 + .../reactnativenavigation/options/DotIndicatorOptions.java | 1 + .../java/com/reactnativenavigation/options/FabOptions.java | 1 + .../reactnativenavigation/options/IconBackgroundOptions.java | 1 + .../java/com/reactnativenavigation/options/LayoutOptions.java | 1 + .../reactnativenavigation/options/NavigationBarOptions.java | 1 + .../java/com/reactnativenavigation/options/ShadowOptions.kt | 4 +++- .../com/reactnativenavigation/options/StatusBarOptions.java | 1 + .../com/reactnativenavigation/options/SubtitleOptions.java | 1 + .../java/com/reactnativenavigation/options/TitleOptions.java | 1 + .../options/TopBarBackgroundOptions.java | 1 + .../java/com/reactnativenavigation/options/TopBarOptions.java | 1 + .../com/reactnativenavigation/options/TopTabsOptions.java | 1 + 16 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java index b3168f8d6f7..9ba9131fdfe 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/BackButton.java @@ -6,6 +6,7 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.TextParser; import com.reactnativenavigation.react.Constants; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java index 4ed4c3dfe15..d8770d4438d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java @@ -11,6 +11,7 @@ import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.IconParser; import com.reactnativenavigation.options.parsers.NumberParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java index 8072ff6435b..4cefab969ab 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabsOptions.java @@ -14,6 +14,7 @@ import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.params.TitleDisplayMode; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.NumberParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java index 2e822ecfbfe..fb47f41e8e7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ButtonOptions.java @@ -14,6 +14,7 @@ import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java index 325ab2f81d7..a3678a5c811 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/DotIndicatorOptions.java @@ -9,6 +9,7 @@ import com.reactnativenavigation.options.params.NullNumber; import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.NumberParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java index 70cc8e524b4..f6684b4089d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/FabOptions.java @@ -10,6 +10,7 @@ import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.TextParser; import org.json.JSONArray; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java index 0b709ae3ac9..6dc548ec9b9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/IconBackgroundOptions.java @@ -8,6 +8,7 @@ import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.params.NullDensityPixel; import com.reactnativenavigation.options.params.DensityPixel; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.DensityPixelParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java index 9d339577d45..5c1833b562e 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java @@ -6,6 +6,7 @@ import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.params.NullNumber; import com.reactnativenavigation.options.params.Number; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.NumberParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java index 8bd595d8621..35d71119631 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/NavigationBarOptions.java @@ -7,6 +7,7 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt index 8a0e6b78618..7b5ad2b783f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ShadowOptions.kt @@ -5,12 +5,14 @@ import com.reactnativenavigation.options.params.Colour import com.reactnativenavigation.options.params.Fraction import com.reactnativenavigation.options.params.NullColor import com.reactnativenavigation.options.params.NullFraction +import com.reactnativenavigation.options.parsers.ColorParser import com.reactnativenavigation.options.parsers.FractionParser import org.json.JSONObject fun parseShadowOptions(context: Context?, shadowJson: JSONObject?): ShadowOptions = shadowJson?.let { json -> - ShadowOptions(ColorParser.parse(context, json, "color"), FractionParser.parse(json, "radius"), FractionParser.parse(json, "opacity")) + ShadowOptions(ColorParser.parse(context, json, "color"), FractionParser.parse(json, "radius"), FractionParser.parse(json, + "opacity")) } ?: NullShadowOptions object NullShadowOptions : ShadowOptions() { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java index 64e5fe58a62..a1bfe56cd99 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/StatusBarOptions.java @@ -9,6 +9,7 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java index 8567db6838e..b6143e719a9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/SubtitleOptions.java @@ -8,6 +8,7 @@ import com.reactnativenavigation.options.params.NullFraction; import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.Text; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java index e6da7384afc..6c4c6ac7263 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TitleOptions.java @@ -10,6 +10,7 @@ import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FontParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.NumberParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java index c6c32f724fd..883d4a6174b 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarBackgroundOptions.java @@ -8,6 +8,7 @@ import com.reactnativenavigation.options.params.NullBool; import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import org.json.JSONObject; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java index 9db39acdbc6..1dc61630d24 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopBarOptions.java @@ -16,6 +16,7 @@ import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.params.Text; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.FractionParser; import com.reactnativenavigation.options.parsers.NumberParser; import com.reactnativenavigation.options.parsers.TextParser; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java index 94c123f37b2..1a1d3c2aa87 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/TopTabsOptions.java @@ -12,6 +12,7 @@ import com.reactnativenavigation.options.params.NullNumber; import com.reactnativenavigation.options.params.Number; import com.reactnativenavigation.options.parsers.BoolParser; +import com.reactnativenavigation.options.parsers.ColorParser; import com.reactnativenavigation.options.parsers.NumberParser; import org.json.JSONObject; From a329e4a96a21d0b7a246dc66e9286cb861e934c4 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 17:03:29 +0300 Subject: [PATCH 10/39] refactor removed REACT_NATVE_VERSION_MINOR --- .../com/reactnativenavigation/react/DevPermissionRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java index b7786f564ff..53d0fe22cf4 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java @@ -22,7 +22,6 @@ public DevPermissionRequest(boolean isDebug) { public boolean shouldAskPermission(Activity activity) { return isDebug && Build.VERSION.SDK_INT >= 23 && - BuildConfig.REACT_NATVE_VERSION_MINOR <= 51 && !Settings.canDrawOverlays(activity); } From 2e667b2f28ccec15828c4219f6ea04e99dece194 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 17:03:46 +0300 Subject: [PATCH 11/39] use Hermes as default --- playground/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index e6e6b26a06a..4154a47e103 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -61,7 +61,7 @@ dependencies { implementation 'com.facebook.react:react-native:+' implementation project(':react-native-fast-image') - def hermesPath = "../../node_modules/hermes-engine/android/"; + def hermesPath = "../../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") From 6a2c9e772e36c57720643a34684df52d6fdfba35 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 17:04:06 +0300 Subject: [PATCH 12/39] Allow draw over on android --- playground/android/app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/playground/android/app/src/main/AndroidManifest.xml b/playground/android/app/src/main/AndroidManifest.xml index 292a7424c8e..a0eeefbadc9 100644 --- a/playground/android/app/src/main/AndroidManifest.xml +++ b/playground/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + Date: Tue, 1 Jun 2021 17:13:24 +0300 Subject: [PATCH 13/39] remove flavor in testing --- scripts/test-unit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test-unit.js b/scripts/test-unit.js index e34c09a79b7..24e91a37d23 100644 --- a/scripts/test-unit.js +++ b/scripts/test-unit.js @@ -13,7 +13,7 @@ function run() { } function runAndroidUnitTests() { - const conf = release ? 'testReactNative63ReleaseUnitTest' : 'testReactNative63DebugUnitTest'; + const conf = release ? 'testReleaseUnitTest' : 'testDebugUnitTest'; if (android && process.env.JENKINS_CI) { const sdkmanager = '/usr/local/share/android-sdk/tools/bin/sdkmanager'; exec.execSync(`yes | ${sdkmanager} --licenses`); From 313e8d42122f9645d51caa5fd1f90c7b695b0bd2 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 17:25:23 +0300 Subject: [PATCH 14/39] fix unit test --- .../viewcontrollers/viewcontroller/YellowBoxDelegate.kt | 3 ++- .../viewcontrollers/viewcontroller/YellowBoxDelegateTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt index a6c47fdba89..425bb0fad29 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt @@ -13,6 +13,7 @@ open class YellowBoxDelegate(private val context: Context) { var parent: ViewGroup? = null private set + @get:RestrictTo(RestrictTo.Scope.TESTS) val yellowBoxes: List get() = yellowBoxViews @@ -40,7 +41,7 @@ open class YellowBoxDelegate(private val context: Context) { if (yellowBoxViews.isNotEmpty()) yellowBoxViews.forEach { parent?.addView(it) } } - fun isYellowBox(parent: View?, child: View?): Boolean { + fun isYellowBox(parent: View?, child: View?): Boolean { return parent is ViewGroup && child is ViewGroup && parent.indexOfChild(child) >= 1 } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java index 65672f36701..7509c7ee352 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java @@ -8,9 +8,9 @@ import com.reactnativenavigation.BaseTest; import org.junit.Test; -import org.mockito.Mockito; import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; public class YellowBoxDelegateTest extends BaseTest { @@ -50,6 +50,7 @@ public void onReactViewDestroy_yellowBoxIsAddedBackToParent() { @Test public void onChildViewAdded() { + uut = spy(uut); uut.onChildViewAdded(parent, yellowBox); dispatchPreDraw(yellowBox); verify(uut).isYellowBox(parent, yellowBox); From 288bfaeeff2d59ce12d29abf90c6a2825960273e Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 1 Jun 2021 17:39:27 +0300 Subject: [PATCH 15/39] Update test-unit.js --- scripts/test-unit.js | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/test-unit.js b/scripts/test-unit.js index 24e91a37d23..c98b204fb34 100644 --- a/scripts/test-unit.js +++ b/scripts/test-unit.js @@ -17,7 +17,6 @@ function runAndroidUnitTests() { if (android && process.env.JENKINS_CI) { const sdkmanager = '/usr/local/share/android-sdk/tools/bin/sdkmanager'; exec.execSync(`yes | ${sdkmanager} --licenses`); - // exec.execSync(`echo y | ${sdkmanager} --update && echo y | ${sdkmanager} --licenses`); } exec.execSync(`cd lib/android && ./gradlew ${conf}`); } From 44c39904809d2257922b1a46fce76fb63c58e496 Mon Sep 17 00:00:00 2001 From: Yogev Ben David Date: Tue, 27 Jul 2021 00:10:38 +0300 Subject: [PATCH 16/39] Fix js tests --- jest-setup.js | 1 + package.json | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/jest-setup.js b/jest-setup.js index 23a79cc85d0..7ecaf57860e 100644 --- a/jest-setup.js +++ b/jest-setup.js @@ -1,3 +1,4 @@ +import 'react-native-gesture-handler/jestSetup'; const { mockDetox } = require('detox-testing-library-rnn-adapter'); mockDetox(() => require('./playground/index')); diff --git a/package.json b/package.json index 80fc40c0168..428af0c3852 100644 --- a/package.json +++ b/package.json @@ -96,13 +96,13 @@ "metro-react-native-babel-preset": "0.64.0", "prettier": "2.1.2", "react": "17.0.1", - "react-native": "0.64.0", + "react-native": "0.64.2", "react-native-fast-image": "^8.3.4", "react-native-gesture-handler": "^1.6.1", "react-native-reanimated": "^1.9.0", "react-native-ui-lib": "5.11.0", "react-redux": "5.x.x", - "react-test-renderer": "17.0.1", + "react-test-renderer": "16.13.1", "redux": "3.x.x", "semver": "5.x.x", "shell-utils": "1.x.x", @@ -130,6 +130,9 @@ "react-native-navigation": "/lib/src", "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/playground/img/layouts@2x.png" }, + "transformIgnorePatterns": [ + "node_modules/(?!(@react-native|react-native|react-native-animatable|react-native-reanimated|react-native-ui-lib)/)" + ], "collectCoverageFrom": [ "lib/src/**/*.ts", "lib/src/**/*.tsx", @@ -138,6 +141,7 @@ "!lib/dist/Navigation.js", "!lib/dist/adapters/**/*", "!lib/dist/interfaces/**/*", + "!lib/src/interfaces/**/*", "!lib/dist/**/*.test.*", "!integration/**/*.test.*", "!integration/*.test.*", From 575729411ed2078548179e9ad934b8110cb897f1 Mon Sep 17 00:00:00 2001 From: Yogev Ben David Date: Tue, 27 Jul 2021 00:51:05 +0300 Subject: [PATCH 17/39] Fix android build --- playground/android/app/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index 4154a47e103..f5390233d80 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -13,7 +13,6 @@ project.ext.react = [ ] -apply from: "../../../node_modules/react-native/react.gradle" android { compileSdkVersion 29 From c9cd9a6f77226ea593e14b866e26d64387effce1 Mon Sep 17 00:00:00 2001 From: Yogev Ben David Date: Tue, 27 Jul 2021 12:20:21 +0300 Subject: [PATCH 18/39] Fix android e2e --- playground/android/app/src/main/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/playground/android/app/src/main/AndroidManifest.xml b/playground/android/app/src/main/AndroidManifest.xml index a0eeefbadc9..292a7424c8e 100644 --- a/playground/android/app/src/main/AndroidManifest.xml +++ b/playground/android/app/src/main/AndroidManifest.xml @@ -4,7 +4,6 @@ - Date: Tue, 27 Jul 2021 15:59:22 +0300 Subject: [PATCH 19/39] fix build and bundling --- playground/android/app/build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index f5390233d80..b3044beef33 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: "com.android.application" project.ext.react = [ root : "../../../", + cliPath : "node_modules/react-native/cli.js", entryFile : "index.js", bundleAssetName : "index.android.bundle", bundleInAlpha : true, @@ -12,7 +13,7 @@ project.ext.react = [ hermesCommand : "../../../node_modules/hermes-engine/%OS-BIN%/hermesc", ] - +apply from: "../../../node_modules/react-native/react.gradle" android { compileSdkVersion 29 From cc5a515fe6fff60a0236499f70703245e0e08415 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Tue, 27 Jul 2021 17:45:45 +0300 Subject: [PATCH 20/39] Update AndroidManifest.xml --- playground/android/app/src/main/AndroidManifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/playground/android/app/src/main/AndroidManifest.xml b/playground/android/app/src/main/AndroidManifest.xml index 292a7424c8e..9d4a4a0a8cd 100644 --- a/playground/android/app/src/main/AndroidManifest.xml +++ b/playground/android/app/src/main/AndroidManifest.xml @@ -4,7 +4,8 @@ - + + Date: Wed, 28 Jul 2021 11:07:34 +0300 Subject: [PATCH 21/39] wait till react view rendered and then send event to component --- .../viewcontrollers/modal/ModalPresenter.java | 15 +++++++++------ .../viewcontrollers/modal/ModalPresenterTest.java | 6 ++++-- .../viewcontrollers/modal/ModalStackTest.java | 13 +++++++++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java index e4c4a8765a0..58a01347b29 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java @@ -7,6 +7,8 @@ import com.reactnativenavigation.options.ModalPresentationStyle; import com.reactnativenavigation.options.Options; import com.reactnativenavigation.react.CommandListener; +import com.reactnativenavigation.react.CommandListenerAdapter; +import com.reactnativenavigation.utils.ContextKt; import com.reactnativenavigation.utils.ScreenAnimationListener; import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; @@ -45,7 +47,6 @@ void showModal(ViewController appearing, ViewController disappearing, Comm listener.onError("Can not show modal before activity is created"); return; } - Options options = appearing.resolveCurrentOptions(defaultOptions); AnimationOptions enterAnimationOptions = options.animations.showModal.getEnter(); @@ -53,7 +54,7 @@ void showModal(ViewController appearing, ViewController disappearing, Comm modalsLayout.setVisibility(View.VISIBLE); modalsLayout.addView(appearing.getView(), matchParentLP()); - if (enterAnimationOptions.enabled.isTrueOrUndefined()) { + if ( enterAnimationOptions.enabled.isTrueOrUndefined()) { if (enterAnimationOptions.shouldWaitForRender().isTrue()) { appearing.addOnAppearedListener(() -> modalAnimator.show(appearing, disappearing, options.animations.showModal, createListener(appearing, disappearing, listener))); } else { @@ -90,10 +91,12 @@ public void onCancel() { } private void onShowModalEnd(ViewController toAdd, @Nullable ViewController toRemove, CommandListener listener) { - toAdd.onViewDidAppear(); - if (toRemove != null && toAdd.resolveCurrentOptions(defaultOptions).modal.presentationStyle != ModalPresentationStyle.OverCurrentContext) { - toRemove.detachView(); - } + toAdd.addOnAppearedListener(()->{ + toAdd.onViewDidAppear(); + if (toRemove != null && toAdd.resolveCurrentOptions(defaultOptions).modal.presentationStyle != ModalPresentationStyle.OverCurrentContext) { + toRemove.detachView(); + } + }); listener.onSuccess(toAdd.getId()); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java index 210a1ab6146..f02acdc4590 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java @@ -50,6 +50,7 @@ public class ModalPresenterTest extends BaseTest { @Override public void beforeEach() { + super.beforeEach(); Activity activity = newActivity(); ChildControllersRegistry childRegistry = new ChildControllersRegistry(); @@ -177,7 +178,6 @@ public void showModal_rejectIfContentIsNull() { public void showModal_onViewDidAppearIsInvokedBeforeViewDisappear() { disableShowModalAnimation(modal1); root.onViewWillAppear(); - uut.showModal(modal1, root, new CommandListenerAdapter()); idleMainLooper(); InOrder inOrder = inOrder(modal1, root); @@ -210,6 +210,7 @@ public void dismissModal_previousViewIsAddedAtIndex0() { uut.setRootLayout(spy); uut.showModal(modal1, root, new CommandListenerAdapter()); + idleMainLooper(); uut.dismissModal(modal1, root, root, new CommandListenerAdapter()); verify(spy).addView(root.getView(), 0); @@ -237,6 +238,7 @@ public void dismissModal_previousModalIsAddedBackToHierarchy() { verify(modal1).onViewWillAppear(); uut.showModal(modal2, modal1, new CommandListenerAdapter()); + idleMainLooper(); assertThat(modal1.getView().getParent()).isNull(); Shadows.shadowOf(Looper.getMainLooper()).idle(); @@ -253,9 +255,9 @@ public void dismissModal_previousControllerIsNotAddedIfDismissedModalIsNotTop() uut.showModal(modal1, root, new CommandListenerAdapter()); uut.showModal(modal2, modal1, new CommandListenerAdapter()); + idleMainLooper(); assertThat(modal1.getView().getParent()).isNull(); assertThat(root.getView().getParent()).isNull(); - uut.dismissModal(modal1, null, root, new CommandListenerAdapter()); assertThat(root.getView().getParent()).isNull(); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java index d1438fd71f0..d52d37719c8 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java @@ -7,6 +7,7 @@ import com.reactnativenavigation.TestUtils; import com.reactnativenavigation.mocks.SimpleViewController; import com.reactnativenavigation.options.Options; +import com.reactnativenavigation.options.TransitionAnimationOptions; import com.reactnativenavigation.react.CommandListener; import com.reactnativenavigation.react.CommandListenerAdapter; import com.reactnativenavigation.react.events.EventEmitter; @@ -54,6 +55,7 @@ public class ModalStackTest extends BaseTest { @Override public void beforeEach() { + super.beforeEach(); activity = newActivity(); childRegistry = new ChildControllersRegistry(); root = new SimpleViewController(activity, childRegistry, "root", new Options()); @@ -90,10 +92,21 @@ public void modalRefIsSaved() { assertThat(findModal(MODAL_ID_1)).isNotNull(); } + @Test + public void showModal_DidAppearEventShouldWaitForReactViewToBeShown(){ + CommandListener listener = spy(new CommandListenerAdapter()); + uut.showModal(modal1, root, listener); + verify(modal1).addOnAppearedListener(any()); + verify(listener).onSuccess(modal1.getId()); + idleMainLooper(); + verify(modal1).onViewDidAppear(); + } + @Test public void showModal() { CommandListener listener = spy(new CommandListenerAdapter()); uut.showModal(modal1, root, listener); + idleMainLooper(); verify(listener).onSuccess(modal1.getId()); verify(modal1).onViewDidAppear(); assertThat(uut.size()).isOne(); From f579c51fe76fa211752de866a83befca9729f9fc Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 28 Jul 2021 11:48:10 +0300 Subject: [PATCH 22/39] set lower bound for android sdk --- lib/android/app/build.gradle | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle index 29cb8fbdd11..7d2c146e2ea 100644 --- a/lib/android/app/build.gradle +++ b/lib/android/app/build.gradle @@ -8,19 +8,26 @@ def safeExtGet(prop, fallback) { rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback } +def safeExtGetFallbackLowerBound(prop, fallback) { + Math.max(safeExtGet(prop,fallback),fallback) +} + + def DEFAULT_COMPILE_SDK_VERSION = 29 def DEFAULT_MIN_SDK_VERSION = 21 def DEFAULT_TARGET_SDK_VERSION = 29 -def kotlinVersion = rootProject.ext.get("RNNKotlinVersion") -def kotlinStdlib = safeExtGet('RNNKotlinStdlib', 'kotlin-stdlib-jdk8') +def DEFAULT_KOTLIN_VERSION = "1.4.32" +def DEFAULT_KOTLIN_STDLIB = 'kotlin-stdlib-jdk8' +def kotlinVersion = safeExtGet("RNNKotlinVersion", DEFAULT_KOTLIN_VERSION) +def kotlinStdlib = safeExtGet('RNNKotlinStdlib',DEFAULT_KOTLIN_STDLIB ) def kotlinCoroutinesCore = safeExtGet('RNNKotlinCoroutinesCore', '1.4.3') android { - compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) + compileSdkVersion safeExtGetFallbackLowerBound('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) defaultConfig { - minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION) - targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) + minSdkVersion safeExtGetFallbackLowerBound('minSdkVersion', DEFAULT_MIN_SDK_VERSION) + targetSdkVersion safeExtGetFallbackLowerBound('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) versionCode 1 versionName "1.0" } From 836911cd5815395b2f8041cda8e4d4df704e2a04 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 28 Jul 2021 11:54:39 +0300 Subject: [PATCH 23/39] upgrade android support components --- lib/android/app/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle index 7d2c146e2ea..eef3e17ac00 100644 --- a/lib/android/app/build.gradle +++ b/lib/android/app/build.gradle @@ -88,14 +88,14 @@ allprojects { p -> } dependencies { - implementation "androidx.core:core-ktx:1.3.2" + implementation "androidx.core:core-ktx:1.6.0" implementation "org.jetbrains.kotlin:$kotlinStdlib:$kotlinVersion" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutinesCore" implementation "androidx.constraintlayout:constraintlayout:2.0.4" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.annotation:annotation:1.1.0' - implementation 'com.google.android.material:material:1.2.0-alpha03' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.annotation:annotation:1.2.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'com.github.wix-playground:ahbottomnavigation:3.3.0' implementation 'com.github.wix-playground:reflow-animator:1.0.6' From 42d725f0c8d952bec2cb0f88cb8c9f5f527ee7f0 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 28 Jul 2021 13:31:56 +0300 Subject: [PATCH 24/39] wait for stack to be shown to send didAppear --- .../viewcontrollers/stack/StackController.java | 10 +++++----- .../viewcontrollers/navigator/NavigatorTest.java | 3 ++- .../viewcontrollers/stack/StackControllerTest.kt | 12 +++++++++++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java index f021214afc8..b2da4101a22 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java @@ -175,9 +175,7 @@ public void push(ViewController child, CommandListener listener) { presenter.getAdditionalPushAnimations(this, child, resolvedOptions), () -> onPushAnimationComplete(child, toRemove, listener)); } else { - child.onViewDidAppear(); - getView().removeView(toRemove.getView()); - listener.onSuccess(child.getId()); + onPushAnimationComplete(child, toRemove, listener); } } else { listener.onSuccess(child.getId()); @@ -191,8 +189,10 @@ public void destroy() { } private void onPushAnimationComplete(ViewController toAdd, ViewController toRemove, CommandListener listener) { - toAdd.onViewDidAppear(); - if (!peek().equals(toRemove)) getView().removeView(toRemove.getView()); + toAdd.addOnAppearedListener(() -> { + toAdd.onViewDidAppear(); + if (!peek().equals(toRemove)) getView().removeView(toRemove.getView()); + }); listener.onSuccess(toAdd.getId()); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java index 70830cc51e0..b76de0686eb 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java @@ -365,6 +365,7 @@ public void popTo_FromCorrectStackUpToChild() { StackController stack2 = newStack(child2, child3, child4); BottomTabsController bottomTabsController = newTabs(Arrays.asList(stack1, stack2)); uut.setRoot(bottomTabsController, new CommandListenerAdapter(), reactInstanceManager); + idleMainLooper(); CommandListenerAdapter listener = spy(new CommandListenerAdapter() { @Override @@ -528,7 +529,7 @@ public void pop_FromCorrectStackByFindingChildId_Promise() { final StackController stack2 = newStack(child2, child3); BottomTabsController bottomTabsController = newTabs(Arrays.asList(stack1, stack2)); uut.setRoot(bottomTabsController, new CommandListenerAdapter(), reactInstanceManager); - + idleMainLooper(); CommandListenerAdapter listener = spy(new CommandListenerAdapter() { @Override public void onSuccess(String childId) { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt index 0a5b5058c42..b9d6dde9363 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt @@ -197,6 +197,7 @@ class StackControllerTest : BaseTest() { fun setRoot_pushDuringSetRootAnimationShouldNotCrash() { uut.push(child1, CommandListenerAdapter()) uut.push(child2, CommandListenerAdapter()) + idleMainLooper() uut.setRoot(listOf(child1), CommandListenerAdapter()) uut.push(child3, CommandListenerAdapter()) @@ -281,6 +282,7 @@ class StackControllerTest : BaseTest() { disablePushAnimation(child1, child2) uut.push(child1, CommandListenerAdapter()) // Initialize stack with a child uut.push(child2, CommandListenerAdapter()) + idleMainLooper() verify(child2).onViewDidAppear() } @@ -608,8 +610,10 @@ class StackControllerTest : BaseTest() { assertNotChildOf(uut.view, child1.view) uut.push(child1, CommandListenerAdapter()) assertIsChild(uut.view, child1.view) + idleMainLooper() uut.push(child2, CommandListenerAdapter()) + idleMainLooper() assertIsChild(uut.view, child2) assertNotChildOf(uut.view, child1) } @@ -663,6 +667,7 @@ class StackControllerTest : BaseTest() { val child1View: View = child1.view uut.push(child1, CommandListenerAdapter()) uut.push(child2, CommandListenerAdapter()) + idleMainLooper() assertIsChild(uut.view, child2View) assertNotChildOf(uut.view, child1View) @@ -715,6 +720,7 @@ class StackControllerTest : BaseTest() { uut.push(child2, CommandListenerAdapter()) uut.push(child3, CommandListenerAdapter()) uut.push(child4, CommandListenerAdapter()) + idleMainLooper() uut.popTo(child2, Options.EMPTY, CommandListenerAdapter()) verify(animator, never()).pop(any(), eq(child1), any(), any(), any()) @@ -729,6 +735,7 @@ class StackControllerTest : BaseTest() { uut.push(child1, mock()) uut.push(child2, mock()) uut.push(child3, mock()) + idleMainLooper() uut.popTo(child1, Options.EMPTY, mock()) animator.endPushAnimation(child3) assertContainsOnlyId(child1.id) @@ -759,8 +766,8 @@ class StackControllerTest : BaseTest() { disablePushAnimation(child1, child2, child3) uut.push(child1, CommandListenerAdapter()) uut.push(child2, CommandListenerAdapter()) - uut.push(child3, CommandListenerAdapter()) + idleMainLooper() uut.popToRoot(Options.EMPTY, object : CommandListenerAdapter() { override fun onSuccess(childId: String) { verify(animator).pop(eq(child1), eq(child3), any(), any(), any()) @@ -776,6 +783,8 @@ class StackControllerTest : BaseTest() { uut.push(child1, CommandListenerAdapter()) uut.push(child2, CommandListenerAdapter()) uut.push(child3, CommandListenerAdapter()) + idleMainLooper() + uut.popToRoot(Options.EMPTY, object : CommandListenerAdapter() { override fun onSuccess(childId: String) { verify(child1, never()).destroy() @@ -811,6 +820,7 @@ class StackControllerTest : BaseTest() { uut.push(child1, mock()) uut.push(child2, mock()) uut.push(child3, mock()) + idleMainLooper() uut.popToRoot(Options.EMPTY, mock()) animator.endPushAnimation(child3) assertContainsOnlyId(child1.id) From 29451a0407ce0a1d015cdf8454b3aaffb4344a2b Mon Sep 17 00:00:00 2001 From: Sergei Butko Date: Fri, 1 Oct 2021 10:29:06 +0300 Subject: [PATCH 25/39] Update react-native to 0.65.1 (#7278) * Bump kotlin, kotlin-gradle-plugin, build:gradle versions * Bump distribution URL version * Bump kotlin version in kotlinCoroutinesCore * Bump default kotlin version * Set default min sdk version to 21 * Update gradlew bat * Bump compile and target SDK version * Bump ndk version * Add abi filters * Update react-native dependencies * Update Android playground application * Update default compile and target SDK versions * Bump detox to support iOS 15 * Update gradlew * Minor settings changes * Update lodash and babel-jest versions * Remove compatibility from playground * Add cli path * Set correct kotlin-coroutine-core version * Add react-native-redash as dev dependency * Add post install to Podfile, update project.pbxproj * Fix ComponentWrapper.test types * Update AndroidX libraries versions * Update reanimated, fast-image and gesture handler --- autolink/postlink/gradleLinker.js | 2 +- lib/android/app/build.gradle | 8 +- lib/android/build.gradle | 13 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- lib/android/gradlew | 91 +++++++------ lib/android/gradlew.bat | 36 ++---- lib/src/components/ComponentWrapper.test.tsx | 6 +- package.json | 46 +++---- playground/android/app/build.gradle | 14 +- playground/android/build.gradle | 7 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- playground/android/gradlew | 31 ++--- playground/android/gradlew.bat | 32 +---- playground/android/settings.gradle | 2 +- playground/ios/Podfile | 37 +++++- .../ios/playground.xcodeproj/project.pbxproj | 120 +++++++++++++----- 16 files changed, 251 insertions(+), 198 deletions(-) diff --git a/autolink/postlink/gradleLinker.js b/autolink/postlink/gradleLinker.js index 019531f8b04..2a5984e9dc7 100644 --- a/autolink/postlink/gradleLinker.js +++ b/autolink/postlink/gradleLinker.js @@ -3,7 +3,7 @@ var path = require('./path'); var fs = require('fs'); var { warnn, errorn, logn, infon, debugn } = require('./log'); var { insertString } = require('./stringUtils'); -var DEFAULT_KOTLIN_VERSION = '1.4.31'; +var DEFAULT_KOTLIN_VERSION = '1.5.31'; // This should be the minSdkVersion required for RNN. var DEFAULT_MIN_SDK_VERSION = 21; diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle index e4f3ee75025..5a53040efcf 100644 --- a/lib/android/app/build.gradle +++ b/lib/android/app/build.gradle @@ -13,14 +13,14 @@ def safeExtGetFallbackLowerBound(prop, fallback) { } -def DEFAULT_COMPILE_SDK_VERSION = 29 +def DEFAULT_COMPILE_SDK_VERSION = 30 def DEFAULT_MIN_SDK_VERSION = 21 -def DEFAULT_TARGET_SDK_VERSION = 29 -def DEFAULT_KOTLIN_VERSION = "1.4.32" +def DEFAULT_TARGET_SDK_VERSION = 30 +def DEFAULT_KOTLIN_VERSION = "1.5.31" def DEFAULT_KOTLIN_STDLIB = 'kotlin-stdlib-jdk8' def kotlinVersion = safeExtGet("RNNKotlinVersion", DEFAULT_KOTLIN_VERSION) def kotlinStdlib = safeExtGet('RNNKotlinStdlib',DEFAULT_KOTLIN_STDLIB ) -def kotlinCoroutinesCore = safeExtGet('RNNKotlinCoroutinesCore', '1.4.3') +def kotlinCoroutinesCore = safeExtGet('RNNKotlinCoroutinesCore', '1.5.2') android { compileSdkVersion safeExtGetFallbackLowerBound('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) diff --git a/lib/android/build.gradle b/lib/android/build.gradle index e9a3e8a4158..d9d648b9339 100644 --- a/lib/android/build.gradle +++ b/lib/android/build.gradle @@ -2,18 +2,18 @@ buildscript { ext { - RNNKotlinVersion = '1.4.31' + kotlinVersion = "1.5.31" + RNNKotlinVersion = kotlinVersion } repositories { + google() mavenLocal() mavenCentral() - google() - jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31" + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + classpath("com.android.tools.build:gradle:4.2.1") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -22,10 +22,9 @@ buildscript { allprojects { repositories { - mavenLocal() mavenCentral() + mavenLocal() google() - jcenter() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url "$rootDir/../../node_modules/react-native/android" diff --git a/lib/android/gradle/wrapper/gradle-wrapper.properties b/lib/android/gradle/wrapper/gradle-wrapper.properties index fd44bb50b67..ecfd475ef99 100644 --- a/lib/android/gradle/wrapper/gradle-wrapper.properties +++ b/lib/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip diff --git a/lib/android/gradlew b/lib/android/gradlew index 9d82f789151..82653490fbc 100755 --- a/lib/android/gradlew +++ b/lib/android/gradlew @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -105,8 +109,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -134,27 +138,30 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/lib/android/gradlew.bat b/lib/android/gradlew.bat index aec99730b4e..5dd299de97c 100644 --- a/lib/android/gradlew.bat +++ b/lib/android/gradlew.bat @@ -8,20 +8,23 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +38,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,34 +48,13 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/lib/src/components/ComponentWrapper.test.tsx b/lib/src/components/ComponentWrapper.test.tsx index a5e1d709160..e5c346a61be 100644 --- a/lib/src/components/ComponentWrapper.test.tsx +++ b/lib/src/components/ComponentWrapper.test.tsx @@ -73,7 +73,7 @@ describe('ComponentWrapper', () => { ); expect(NavigationComponent).not.toBeInstanceOf(MyComponent); const tree = renderer.create(); - expect(tree.toJSON()!.children).toEqual(['Hello, World!']); + expect((tree.toJSON() as renderer.ReactTestRendererJSON)!.children).toEqual(['Hello, World!']); }); it('injects props from wrapper into original component', () => { @@ -87,7 +87,7 @@ describe('ComponentWrapper', () => { const tree = renderer.create( ); - expect(tree.toJSON()!.children).toEqual(['yo']); + expect((tree.toJSON() as renderer.ReactTestRendererJSON)!.children).toEqual(['yo']); expect(renderCount).toHaveBeenCalledTimes(1); }); @@ -295,7 +295,7 @@ describe('ComponentWrapper', () => { reduxStore ); const tree = renderer.create(); - expect(tree.toJSON()!.children).toEqual(['it just works']); + expect((tree.toJSON() as renderer.ReactTestRendererJSON)!.children).toEqual(['it just works']); expect((NavigationComponent as any).options()).toEqual({ foo: 123 }); }); }); diff --git a/package.json b/package.json index 781fc69e8f4..7388c0887fb 100644 --- a/package.json +++ b/package.json @@ -67,48 +67,50 @@ "tslib": "1.9.3" }, "devDependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-proposal-export-default-from": "7.10.1", - "@babel/plugin-proposal-export-namespace-from": "7.10.1", - "@babel/types": "7.6.x", + "@babel/core": "7.15.5", + "@babel/plugin-proposal-export-default-from": "7.14.5", + "@babel/plugin-proposal-export-namespace-from": "7.14.5", + "@babel/types": "7.15.6", "@react-native-community/blur": "^3.6.0", "@react-native-community/datetimepicker": "^3.4.7", "@react-native-community/eslint-config": "2.0.0", "@react-native-community/netinfo": "^5.9.4", "@testing-library/jest-native": "^4.0.1", "@testing-library/react-native": "^7.2.0", - "@types/detox": "16.4.1", + "@types/detox": "17.14.2", "@types/hoist-non-react-statics": "^3.0.1", "@types/jasmine": "3.5.10", - "@types/jest": "26.0.3", - "@types/lodash": "^4.14.149", - "@types/react": "16.9.41", - "@types/react-native": "0.63.1", - "@types/react-test-renderer": "16.9.2", + "@types/jest": "27.0.2", + "@types/lodash": "^4.14.175", + "@types/react": "17.0.26", + "@types/react-native": "0.65.2", + "@types/react-test-renderer": "17.0.1", "@typescript-eslint/eslint-plugin": "3.3.0", "@typescript-eslint/parser": "3.3.0", - "babel-jest": "26.6.3", + "babel-jest": "27.2.4", "clang-format": "^1.4.0", - "detox": "18.19.0", + "detox": "18.22.0", "eslint": "7.3.0", "eslint-config-prettier": "6.11.0", "eslint-plugin-prettier": "3.1.4", "github-release-notes": "https://github.com/yogevbd/github-release-notes/tarball/e601b3dba72dcd6cba323c1286ea6dd0c0110b58", "husky": "4.2.5", "identity-obj-proxy": "3.0.0", - "jest": "26.1.0", - "jest-circus": "26.1.0", + "jest": "27.2.4", + "jest-circus": "27.2.4", "lint-staged": "10.2.11", - "metro-react-native-babel-preset": "0.64.0", + "metro-react-native-babel-preset": "0.66.2", "prettier": "2.1.2", - "react": "17.0.1", - "react-native": "0.64.2", - "react-native-fast-image": "^8.3.4", - "react-native-gesture-handler": "^1.6.1", - "react-native-reanimated": "^1.9.0", + "react": "17.0.2", + "react-native": "0.65.1", + "react-native-codegen": "0.0.8", + "react-native-fast-image": "^8.5.11", + "react-native-gesture-handler": "^1.10.3", + "react-native-reanimated": "^1.13.3", + "react-native-redash": "14.2.4", "react-native-ui-lib": "5.11.0", "react-redux": "5.x.x", - "react-test-renderer": "16.13.1", + "react-test-renderer": "17.0.2", "redux": "3.x.x", "semver": "5.x.x", "shell-utils": "1.x.x", @@ -262,4 +264,4 @@ } } } -} \ No newline at end of file +} diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index b3044beef33..4fb5f0f92c8 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -16,22 +16,17 @@ project.ext.react = [ apply from: "../../../node_modules/react-native/react.gradle" android { - compileSdkVersion 29 - ndkVersion "20.1.5948944" - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } + compileSdkVersion 30 + ndkVersion "23.0.7599858" defaultConfig { applicationId "com.reactnativenavigation.playground" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" ndk { - abiFilters "armeabi-v7a", "x86", 'x86_64' + abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } testBuildType System.getProperty('testBuildType', 'debug') @@ -55,7 +50,6 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.google.android.material:material:1.0.0' - implementation 'androidx.appcompat:appcompat:1.1.0' //noinspection GradleDynamicVersion implementation 'com.facebook.react:react-native:+' diff --git a/playground/android/build.gradle b/playground/android/build.gradle index dfd2c3cda5e..533b768a44b 100644 --- a/playground/android/build.gradle +++ b/playground/android/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - kotlinVersion = "1.4.32" + kotlinVersion = "1.5.31" RNNKotlinVersion = kotlinVersion detoxKotlinVersion = kotlinVersion } @@ -13,8 +13,8 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" - classpath 'com.android.tools.build:gradle:4.0.1' + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + classpath("com.android.tools.build:gradle:4.2.1") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -24,6 +24,7 @@ buildscript { allprojects { repositories { maven { url 'https://www.jitpack.io' } + maven { url 'https://maven.google.com' } google() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm diff --git a/playground/android/gradle/wrapper/gradle-wrapper.properties b/playground/android/gradle/wrapper/gradle-wrapper.properties index be60575e053..aab27c072b2 100644 --- a/playground/android/gradle/wrapper/gradle-wrapper.properties +++ b/playground/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip diff --git a/playground/android/gradlew b/playground/android/gradlew index 77564ddb2c8..2fe81a7d95e 100755 --- a/playground/android/gradlew +++ b/playground/android/gradlew @@ -154,19 +154,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,14 +175,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" \ No newline at end of file +exec "$JAVACMD" "$@" diff --git a/playground/android/gradlew.bat b/playground/android/gradlew.bat index f6d5974e72f..5dd299de97c 100644 --- a/playground/android/gradlew.bat +++ b/playground/android/gradlew.bat @@ -13,15 +13,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +38,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,34 +48,13 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/playground/android/settings.gradle b/playground/android/settings.gradle index 6d3c62b7824..1e5bd8505d4 100644 --- a/playground/android/settings.gradle +++ b/playground/android/settings.gradle @@ -1,5 +1,5 @@ rootProject.name = 'Playground' -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle") +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' include ':react-native-navigation' diff --git a/playground/ios/Podfile b/playground/ios/Podfile index 494a600b4be..9aef7e3b081 100644 --- a/playground/ios/Podfile +++ b/playground/ios/Podfile @@ -3,13 +3,12 @@ require_relative '../../node_modules/@react-native-community/cli-platform-ios/na platform :ios, '11.0' -def all_pods +def all_pods config = use_native_modules! use_react_native!( :path => config[:reactNativePath], :hermes_enabled => true ) - pod 'ReactNativeNavigation', :path => '../../' end @@ -30,4 +29,36 @@ end target 'SnapshotTests' do all_pods pod 'OCMock' -end \ No newline at end of file +end + + post_install do |installer| + react_native_post_install(installer) + + # Apple Silicon builds require a library path tweak for Swift library discovery or "symbol not found" for swift things + installer.aggregate_targets.each do |aggregate_target| + aggregate_target.user_project.native_targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['LIBRARY_SEARCH_PATHS'] = ['$(SDKROOT)/usr/lib/swift', '$(inherited)'] + end + end + aggregate_target.user_project.save + end + + # Flipper requires a crude patch to bump up iOS deployment target, or "error: thread-local storage is not supported for the current target" + # I'm not aware of any other way to fix this one other than bumping iOS deployment target to match react-native + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + case target.name + when 'RCT-Folly' + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0' + else + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' + end + end + end + + # ...but if you bump iOS deployment target, Flipper barfs again "Time.h:52:17: error: typedef redefinition with different types" + # We need to make one crude patch to RCT-Folly - set `__IPHONE_10_0` to our iOS target + 1 + # https://github.com/facebook/flipper/issues/834 - 84 comments and still going... + `sed -i -e $'s/__IPHONE_10_0/__IPHONE_12_0/' Pods/RCT-Folly/folly/portability/Time.h` + end diff --git a/playground/ios/playground.xcodeproj/project.pbxproj b/playground/ios/playground.xcodeproj/project.pbxproj index 0859b98eb24..4ebc4d18aa0 100644 --- a/playground/ios/playground.xcodeproj/project.pbxproj +++ b/playground/ios/playground.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -574,7 +574,7 @@ }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "playground" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -707,13 +707,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -769,13 +768,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -787,13 +785,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -863,13 +860,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1028,7 +1024,14 @@ ); INFOPLIST_FILE = playground/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1076,7 +1079,14 @@ ); INFOPLIST_FILE = playground/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1105,7 +1115,15 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = SnapshotTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = rn.SnapshotTests; @@ -1132,7 +1150,15 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = SnapshotTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = rn.SnapshotTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1156,7 +1182,15 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = NavigationIOS12Tests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = rn.NavigationIOS12Tests; @@ -1182,7 +1216,15 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = NavigationIOS12Tests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = rn.NavigationIOS12Tests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1223,6 +1265,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 "; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1278,6 +1321,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 "; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1311,7 +1355,15 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = NavigationTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.wix.NavigationTests; @@ -1339,7 +1391,15 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = NavigationTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(SDKROOT)/usr/lib/swift", + "$(inherited)", + ); MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.wix.NavigationTests; PRODUCT_NAME = "$(TARGET_NAME)"; From 0c5d02e5e466e05b3b275d9d624a16f3b34fb233 Mon Sep 17 00:00:00 2001 From: svbutko Date: Fri, 1 Oct 2021 10:53:52 +0300 Subject: [PATCH 26/39] Remove redundant Android's reactNativeXY versions --- .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 22 ----- .../react/JsDevReloadHandlerFacade.java | 22 ----- .../react/NavigationReactNativeHost.java | 70 ---------------- .../react/ReactGateway.java | 70 ---------------- .../react/ReloadHandlerFacade.java | 22 ----- .../react/SyncUiImplementation.java | 83 ------------------- .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 22 ----- .../react/JsDevReloadHandlerFacade.java | 22 ----- .../react/NavigationReactNativeHost.java | 71 ---------------- .../react/ReactGateway.java | 70 ---------------- .../react/ReloadHandlerFacade.java | 22 ----- .../react/SyncUiImplementation.java | 83 ------------------- .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 28 ------- .../react/JsDevReloadHandlerFacade.java | 28 ------- .../react/NavigationReactNativeHost.java | 71 ---------------- .../react/ReactGateway.java | 70 ---------------- .../react/ReloadHandlerFacade.java | 25 ------ .../react/SyncUiImplementation.java | 83 ------------------- .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 28 ------- .../react/JsDevReloadHandlerFacade.java | 28 ------- .../react/NavigationReactNativeHost.java | 70 ---------------- .../react/ReactGateway.java | 70 ---------------- .../react/ReloadHandlerFacade.java | 25 ------ .../react/SyncUiImplementation.java | 70 ---------------- .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 28 ------- .../react/JsDevReloadHandlerFacade.java | 28 ------- .../react/NavigationReactNativeHost.java | 70 ---------------- .../react/ReactGateway.java | 70 ---------------- .../react/ReloadHandlerFacade.java | 25 ------ .../react/SyncUiImplementation.java | 83 ------------------- .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 28 ------- .../react/JsDevReloadHandlerFacade.java | 28 ------- .../react/NavigationReactNativeHost.java | 67 --------------- .../react/ReactGateway.java | 70 ---------------- .../react/ReloadHandlerFacade.java | 25 ------ .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.java | 18 ---- .../DevBundleDownloadListenerAdapter.java | 22 ----- .../react/JsDevReloadHandlerFacade.java | 22 ----- .../react/NavigationReactNativeHost.java | 66 --------------- .../react/ReactGateway.java | 72 ---------------- .../react/ReloadHandlerFacade.java | 22 ----- .../viewcontroller/YellowBoxHelper.java | 27 ------ .../options/parsers/ColorParser.kt | 38 --------- 55 files changed, 2254 deletions(-) delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java delete mode 100644 lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java delete mode 100644 lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java delete mode 100644 lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java delete mode 100644 lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java delete mode 100644 lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java delete mode 100644 lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java delete mode 100644 lib/android/app/src/reactNative63/java/com/reactnativenavigation/options/parsers/ColorParser.kt diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index b3a34cfbac6..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index 0c5f74c0ebb..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index 8ff7f4dc12b..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; -import com.reactnativenavigation.NavigationApplication; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -/** - * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage} - * and user-defined additional packages. - */ -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - @SuppressWarnings("WeakerAccess") - public NavigationReactNativeHost(NavigationApplication application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setUIImplementationProvider(getUIImplementationProvider()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @SuppressWarnings("WeakerAccess") - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 69ed8e0e5ec..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - // noop, needs rn >= 0.62 - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index f30f66b91b6..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java deleted file mode 100644 index 1009b901d19..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.reactnativenavigation.react; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.uimanager.MeasureSpecProvider; -import com.facebook.react.uimanager.SizeMonitoringFrameLayout; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.UIImplementation; -import com.facebook.react.uimanager.UIImplementationProvider; -import com.facebook.react.uimanager.UIManagerModule; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.uimanager.events.EventDispatcher; - -import java.util.List; - -@SuppressWarnings("WeakerAccess") -public class SyncUiImplementation extends UIImplementation { - private static final Object lock = new Object(); - - public static class Provider extends UIImplementationProvider { - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - } - - public SyncUiImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public void manageChildren( - int viewTag, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices, - @Nullable ReadableArray removeFrom) { - synchronized (lock) { - super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom); - } - } - - @Override - public void setChildren(int viewTag, ReadableArray childrenTags) { - synchronized (lock) { - super.setChildren(viewTag, childrenTags); - } - } - - @Override - public void createView(int tag, String className, int rootViewTag, ReadableMap props) { - synchronized (lock) { - super.createView(tag, className, rootViewTag, props); - } - } - - @Override - public void removeRootShadowNode(int rootViewTag) { - synchronized (lock) { - super.removeRootShadowNode(rootViewTag); - } - } - - @Override - public void registerRootView(T rootView, int tag, ThemedReactContext context) { - synchronized (lock) { - super.registerRootView(rootView, tag, context); - } - } -} \ No newline at end of file diff --git a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index b3a34cfbac6..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index 0c5f74c0ebb..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index e587d0467de..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; -import com.reactnativenavigation.NavigationApplication; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -/** - * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage} - * and user-defined additional packages. - */ -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - @SuppressWarnings("WeakerAccess") - public NavigationReactNativeHost(NavigationApplication application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setUIImplementationProvider(getUIImplementationProvider()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setJSIModulesProvider(getJSIModulesProvider()) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @SuppressWarnings("WeakerAccess") - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 69ed8e0e5ec..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - // noop, needs rn >= 0.62 - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index f30f66b91b6..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java deleted file mode 100644 index 931f8a147b9..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.reactnativenavigation.react; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.UIImplementation; -import com.facebook.react.uimanager.UIImplementationProvider; -import com.facebook.react.uimanager.UIManagerModule; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.uimanager.common.MeasureSpecProvider; -import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout; -import com.facebook.react.uimanager.events.EventDispatcher; - -import java.util.List; - -@SuppressWarnings("WeakerAccess") -public class SyncUiImplementation extends UIImplementation { - private static final Object lock = new Object(); - - public static class Provider extends UIImplementationProvider { - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - } - - public SyncUiImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public void manageChildren( - int viewTag, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices, - @Nullable ReadableArray removeFrom) { - synchronized (lock) { - super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom); - } - } - - @Override - public void setChildren(int viewTag, ReadableArray childrenTags) { - synchronized (lock) { - super.setChildren(viewTag, childrenTags); - } - } - - @Override - public void createView(int tag, String className, int rootViewTag, ReadableMap props) { - synchronized (lock) { - super.createView(tag, className, rootViewTag, props); - } - } - - @Override - public void removeRootShadowNode(int rootViewTag) { - synchronized (lock) { - super.removeRootShadowNode(rootViewTag); - } - } - - @Override - public void registerRootView(T rootView, int tag, ThemedReactContext context) { - synchronized (lock) { - super.registerRootView(rootView, tag, context); - } - } -} \ No newline at end of file diff --git a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index 86af8ca5768..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index 919fe4af048..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - @Override - public void onSuccess() { - - } -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index c563d02d9a4..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; -import com.reactnativenavigation.NavigationApplication; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -/** - * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage} - * and user-defined additional packages. - */ -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - @SuppressWarnings("WeakerAccess") - public NavigationReactNativeHost(NavigationApplication application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setUIImplementationProvider(getUIImplementationProvider()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setJSIModulesPackage(getJSIModulePackage()) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @SuppressWarnings("WeakerAccess") - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 69ed8e0e5ec..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - // noop, needs rn >= 0.62 - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index 697ea43e48a..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - protected abstract void onSuccess(); -} diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java deleted file mode 100644 index 931f8a147b9..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.reactnativenavigation.react; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.UIImplementation; -import com.facebook.react.uimanager.UIImplementationProvider; -import com.facebook.react.uimanager.UIManagerModule; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.uimanager.common.MeasureSpecProvider; -import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout; -import com.facebook.react.uimanager.events.EventDispatcher; - -import java.util.List; - -@SuppressWarnings("WeakerAccess") -public class SyncUiImplementation extends UIImplementation { - private static final Object lock = new Object(); - - public static class Provider extends UIImplementationProvider { - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - } - - public SyncUiImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public void manageChildren( - int viewTag, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices, - @Nullable ReadableArray removeFrom) { - synchronized (lock) { - super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom); - } - } - - @Override - public void setChildren(int viewTag, ReadableArray childrenTags) { - synchronized (lock) { - super.setChildren(viewTag, childrenTags); - } - } - - @Override - public void createView(int tag, String className, int rootViewTag, ReadableMap props) { - synchronized (lock) { - super.createView(tag, className, rootViewTag, props); - } - } - - @Override - public void removeRootShadowNode(int rootViewTag) { - synchronized (lock) { - super.removeRootShadowNode(rootViewTag); - } - } - - @Override - public void registerRootView(T rootView, int tag, ThemedReactContext context) { - synchronized (lock) { - super.registerRootView(rootView, tag, context); - } - } -} \ No newline at end of file diff --git a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index 86af8ca5768..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index 919fe4af048..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - @Override - public void onSuccess() { - - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index b447eb13d08..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; -import com.reactnativenavigation.NavigationApplication; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -/** - * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage} - * and user-defined additional packages. - */ -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - @SuppressWarnings("WeakerAccess") - public NavigationReactNativeHost(NavigationApplication application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setJSIModulesPackage(getJSIModulePackage()) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @SuppressWarnings("WeakerAccess") - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 69ed8e0e5ec..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - // noop, needs rn >= 0.62 - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index 697ea43e48a..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - protected abstract void onSuccess(); -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java deleted file mode 100644 index 536b4bab231..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.UIImplementation; -import com.facebook.react.uimanager.UIManagerModule; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.uimanager.common.MeasureSpecProvider; -import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout; -import com.facebook.react.uimanager.events.EventDispatcher; - -import java.util.List; - -@SuppressWarnings("WeakerAccess") -public class SyncUiImplementation extends UIImplementation { - private static final Object lock = new Object(); - - public SyncUiImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public void manageChildren( - int viewTag, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices, - @Nullable ReadableArray removeFrom) { - synchronized (lock) { - super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom); - } - } - - @Override - public void setChildren(int viewTag, ReadableArray childrenTags) { - synchronized (lock) { - super.setChildren(viewTag, childrenTags); - } - } - - @Override - public void createView(int tag, String className, int rootViewTag, ReadableMap props) { - synchronized (lock) { - super.createView(tag, className, rootViewTag, props); - } - } - - @Override - public void removeRootShadowNode(int rootViewTag) { - synchronized (lock) { - super.removeRootShadowNode(rootViewTag); - } - } - - @Override - public void registerRootView(T rootView, int tag, ThemedReactContext context) { - synchronized (lock) { - super.registerRootView(rootView, tag, context); - } - } -} diff --git a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index 86af8ca5768..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index 919fe4af048..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - @Override - public void onSuccess() { - - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index 321fb55e961..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; -import com.reactnativenavigation.NavigationApplication; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -/** - * Default implementation of {@link ReactNativeHost} that includes {@link NavigationPackage} - * and user-defined additional packages. - */ -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - @SuppressWarnings("WeakerAccess") - public NavigationReactNativeHost(NavigationApplication application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setUIImplementationProvider(getUIImplementationProvider()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setJSIModulesPackage(getJSIModulePackage()) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 69ed8e0e5ec..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - // noop, needs rn >= 0.62 - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index 697ea43e48a..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - protected abstract void onSuccess(); -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java deleted file mode 100644 index 5c2698cdb05..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.reactnativenavigation.react; - -import androidx.annotation.Nullable; - -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.uimanager.ThemedReactContext; -import com.facebook.react.uimanager.UIImplementation; -import com.facebook.react.uimanager.UIImplementationProvider; -import com.facebook.react.uimanager.UIManagerModule; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.uimanager.common.MeasureSpecProvider; -import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout; -import com.facebook.react.uimanager.events.EventDispatcher; - -import java.util.List; - -@SuppressWarnings("WeakerAccess") -public class SyncUiImplementation extends UIImplementation { - private static final Object lock = new Object(); - - public static class Provider extends UIImplementationProvider { - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public UIImplementation createUIImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - return new SyncUiImplementation(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - } - - public SyncUiImplementation(ReactApplicationContext reactContext, List viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) { - super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs); - } - - @Override - public void manageChildren( - int viewTag, - @Nullable ReadableArray moveFrom, - @Nullable ReadableArray moveTo, - @Nullable ReadableArray addChildTags, - @Nullable ReadableArray addAtIndices, - @Nullable ReadableArray removeFrom) { - synchronized (lock) { - super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom); - } - } - - @Override - public void setChildren(int viewTag, ReadableArray childrenTags) { - synchronized (lock) { - super.setChildren(viewTag, childrenTags); - } - } - - @Override - public void createView(int tag, String className, int rootViewTag, ReadableMap props) { - synchronized (lock) { - super.createView(tag, className, rootViewTag, props); - } - } - - @Override - public void removeRootShadowNode(int rootViewTag) { - synchronized (lock) { - super.removeRootShadowNode(rootViewTag); - } - } - - @Override - public void registerRootView(T rootView, int tag, ThemedReactContext context) { - synchronized (lock) { - super.registerRootView(rootView, tag, context); - } - } -} diff --git a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index 86af8ca5768..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index 919fe4af048..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - onSuccess(); - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - @Override - public void onSuccess() { - - } -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index 7f3e074dbad..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Application; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - @SuppressWarnings("WeakerAccess") - public NavigationReactNativeHost(Application application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setUIImplementationProvider(getUIImplementationProvider()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setJSIModulesPackage(getJSIModulePackage()) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 5003e711951..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - // noop, needs rn >= 0.62 - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, final int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index 697ea43e48a..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.bridge.NativeDeltaClient; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess(@Nullable NativeDeltaClient nativeDeltaClient) { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } - - protected abstract void onSuccess(); -} diff --git a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index f6ff316278a..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String color) { - if (json.has(color)) { - return json.opt(color) instanceof Integer ? new Colour(json.optInt(color)) : new DontApplyColour(); - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java deleted file mode 100644 index d5ad33c75c5..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class DevBundleDownloadListenerAdapter implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess() { - onSuccess(); - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java deleted file mode 100644 index feb40fb680e..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public class JsDevReloadHandlerFacade implements DevBundleDownloadListener, NavigationDevBundleDownloadListener { - @Override - public void onSuccess() { - onSuccess(); - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java deleted file mode 100644 index 9b1bd158f3a..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.common.LifecycleState; -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; -import com.reactnativenavigation.NavigationApplication; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public abstract class NavigationReactNativeHost extends ReactNativeHost implements BundleDownloadListenerProvider { - - private @Nullable NavigationDevBundleDownloadListener bundleListener; - private final DevBundleDownloadListener bundleListenerMediator = new DevBundleDownloadListenerAdapter() { - @Override - public void onSuccess() { - if (bundleListener != null) { - bundleListener.onSuccess(); - } - } - }; - - public NavigationReactNativeHost(NavigationApplication application) { - super(application); - } - - @Override - public void setBundleLoaderListener(NavigationDevBundleDownloadListener listener) { - bundleListener = listener; - } - - protected ReactInstanceManager createReactInstanceManager() { - ReactInstanceManagerBuilder builder = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setJSMainModulePath(getJSMainModuleName()) - .setUseDeveloperSupport(getUseDeveloperSupport()) - .setRedBoxHandler(getRedBoxHandler()) - .setJavaScriptExecutorFactory(getJavaScriptExecutorFactory()) - .setUIImplementationProvider(getUIImplementationProvider()) - .setInitialLifecycleState(LifecycleState.BEFORE_CREATE) - .setJSIModulesPackage(getJSIModulePackage()) - .setDevBundleDownloadListener(getDevBundleDownloadListener()); - - for (ReactPackage reactPackage : getPackages()) { - builder.addPackage(reactPackage); - } - - String jsBundleFile = getJSBundleFile(); - if (jsBundleFile != null) { - builder.setJSBundleFile(jsBundleFile); - } else { - builder.setBundleAssetName(Assertions.assertNotNull(getBundleAssetName())); - } - return builder.build(); - } - - @SuppressWarnings("WeakerAccess") - @NonNull - protected DevBundleDownloadListener getDevBundleDownloadListener() { - return bundleListenerMediator; - } -} \ No newline at end of file diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java deleted file mode 100644 index 035ec31b2c5..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.reactnativenavigation.react; - -import android.app.Activity; -import android.content.Intent; -import android.content.res.Configuration; - -import com.facebook.react.ReactNativeHost; -import com.reactnativenavigation.NavigationActivity; - -import androidx.annotation.NonNull; - -public class ReactGateway { - - private final ReactNativeHost host; - private final NavigationReactInitializer initializer; - private final JsDevReloadHandler jsDevReloadHandler; - - public ReactGateway(ReactNativeHost host) { - this.host = host; - initializer = new NavigationReactInitializer(host.getReactInstanceManager(), host.getUseDeveloperSupport()); - jsDevReloadHandler = new JsDevReloadHandler(host.getReactInstanceManager().getDevSupportManager()); - if (host instanceof BundleDownloadListenerProvider) { - ((BundleDownloadListenerProvider) host).setBundleLoaderListener(jsDevReloadHandler); - } - } - - public void onActivityCreated(NavigationActivity activity) { - initializer.onActivityCreated(); - jsDevReloadHandler.setReloadListener(activity); - } - - public void onActivityResumed(NavigationActivity activity) { - initializer.onActivityResumed(activity); - jsDevReloadHandler.onActivityResumed(activity); - } - - public boolean onNewIntent(Intent intent) { - if (host.hasInstance()) { - host.getReactInstanceManager().onNewIntent(intent); - return true; - } - return false; - } - - public void onConfigurationChanged(NavigationActivity activity, @NonNull Configuration newConfig) { - if (host.hasInstance()) { - host.getReactInstanceManager().onConfigurationChanged(activity, newConfig); - } - } - - public void onActivityPaused(NavigationActivity activity) { - initializer.onActivityPaused(activity); - jsDevReloadHandler.onActivityPaused(activity); - } - - public void onActivityDestroyed(NavigationActivity activity) { - jsDevReloadHandler.removeReloadListener(activity); - initializer.onActivityDestroyed(activity); - } - - public boolean onKeyUp(Activity activity, int keyCode) { - return jsDevReloadHandler.onKeyUp(activity, keyCode); - } - - public void onBackPressed() { - host.getReactInstanceManager().onBackPressed(); - } - - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { - host.getReactInstanceManager().onActivityResult(activity, requestCode, resultCode, data); - } -} diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java deleted file mode 100644 index f30f66b91b6..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.reactnativenavigation.react; - -import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; - -import javax.annotation.Nullable; - -public abstract class ReloadHandlerFacade implements DevBundleDownloadListener { - @Override - public void onSuccess() { - - } - - @Override - public void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total) { - - } - - @Override - public void onFailure(Exception cause) { - - } -} diff --git a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java b/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java deleted file mode 100644 index f905d8a3cdc..00000000000 --- a/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.reactnativenavigation.viewcontrollers.viewcontroller; - -import android.view.View; -import android.view.ViewGroup; - -import com.facebook.react.views.view.ReactViewBackgroundDrawable; -import com.reactnativenavigation.utils.ViewUtils; - -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.ViewUtils.findChildrenByClassRecursive; - -public class YellowBoxHelper { - private final static int YELLOW_BOX_COLOR = -218449360; - - boolean isYellowBox(View parent, View child) { - return parent instanceof ViewGroup && - child instanceof ViewGroup && - ((ViewGroup) parent).getChildCount() > 1 && - !findChildrenByClassRecursive((ViewGroup) child, View.class, YellowBackgroundMatcher()).isEmpty(); - } - - @NonNull - private static ViewUtils.Matcher YellowBackgroundMatcher() { - return child1 -> child1.getBackground() instanceof ReactViewBackgroundDrawable && ((ReactViewBackgroundDrawable) child1.getBackground()).getColor() == YELLOW_BOX_COLOR; - } -} diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/options/parsers/ColorParser.kt b/lib/android/app/src/reactNative63/java/com/reactnativenavigation/options/parsers/ColorParser.kt deleted file mode 100644 index 857af348911..00000000000 --- a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/options/parsers/ColorParser.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.reactnativenavigation.options.parsers - -import android.content.Context -import com.facebook.react.bridge.ColorPropConverter -import com.reactnativenavigation.options.params.Colour -import com.reactnativenavigation.options.params.DontApplyColour -import com.reactnativenavigation.options.params.NullColor -import com.reactnativenavigation.options.params.ReactPlatformColor -import org.json.JSONObject - -object ColorParser { - private const val KEY_RESOURCE_PATHS = "resource_paths" - private const val VAL_NO_COLOR = "NoColor" - - @JvmStatic - fun parse(context: Context?, json: JSONObject, colorName: String?): Colour { - if (json.has(KEY_RESOURCE_PATHS)) { - return ReactPlatformColor(JSONParser.convert(json)) - } - return when (val color = json.opt(colorName)) { - null, VAL_NO_COLOR -> { - DontApplyColour() - } - is Int -> { - Colour(json.optInt(colorName)) - } - is JSONObject -> { - ColorPropConverter.getColor(color, context)?.let { - Colour(it) - } ?: NullColor() - } - else -> { - NullColor() - } - } - - } -} \ No newline at end of file From 43c73269a9f743f0c0c1a160ceb33b177ed494f8 Mon Sep 17 00:00:00 2001 From: svbutko Date: Fri, 1 Oct 2021 11:18:49 +0300 Subject: [PATCH 27/39] Replace ColorParser.java with ColorParser.kt --- .../options/parsers/ColorParser.java | 32 ---------------- .../options/parsers/ColorParser.kt | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 32 deletions(-) delete mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.java create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.kt diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.java deleted file mode 100644 index cf059ed2ba2..00000000000 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.reactnativenavigation.options.parsers; - -import android.content.Context; - -import com.facebook.react.bridge.ColorPropConverter; -import com.reactnativenavigation.options.params.Colour; -import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; - -import org.json.JSONObject; - -public class ColorParser { - public static Colour parse(Context context, JSONObject json, String colorName) { - if (json.has(colorName)) { - Object color = json.opt(colorName); - if (color == null) { - return new DontApplyColour(); - } else if (color instanceof Integer) { - return new Colour(json.optInt(colorName)); - } - if (color.equals("NoColor")) { - return new DontApplyColour(); - } - Object convertedColor = JSONParser.convert(json.optJSONObject(colorName)); - Integer processedColor = ColorPropConverter.getColor(convertedColor, context); - if (processedColor != null) { - return new Colour(processedColor); - } - } - return new NullColor(); - } -} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.kt new file mode 100644 index 00000000000..8ccda494363 --- /dev/null +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/ColorParser.kt @@ -0,0 +1,38 @@ +package com.reactnativenavigation.options.parsers + +import android.content.Context +import com.facebook.react.bridge.ColorPropConverter +import com.reactnativenavigation.options.params.Colour +import com.reactnativenavigation.options.params.DontApplyColour +import com.reactnativenavigation.options.params.NullColor +import com.reactnativenavigation.options.params.ReactPlatformColor +import org.json.JSONObject + +object ColorParser { + private const val KEY_RESOURCE_PATHS = "resource_paths" + private const val VAL_NO_COLOR = "NoColor" + + @JvmStatic + fun parse(context: Context?, json: JSONObject, colorName: String?): Colour { + if (json.has(KEY_RESOURCE_PATHS)) { + return ReactPlatformColor(JSONParser.convert(json)) + } + return when (val color = json.opt(colorName)) { + null, VAL_NO_COLOR -> { + DontApplyColour() + } + is Int -> { + Colour(json.optInt(colorName)) + } + is JSONObject -> { + ColorPropConverter.getColor(color, context)?.let { + Colour(it) + } ?: NullColor() + } + else -> { + NullColor() + } + } + + } +} From f90e26ab9c93b20ce7852525c762307aedc391fb Mon Sep 17 00:00:00 2001 From: svbutko Date: Fri, 1 Oct 2021 11:29:19 +0300 Subject: [PATCH 28/39] Downgrade ndk version to the RN's one --- playground/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index 4fb5f0f92c8..8d28c53fb1f 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -17,7 +17,7 @@ apply from: "../../../node_modules/react-native/react.gradle" android { compileSdkVersion 30 - ndkVersion "23.0.7599858" + ndkVersion "20.1.5948944" defaultConfig { applicationId "com.reactnativenavigation.playground" From 7bada49579b51549b41bc8ec4d676a50d2dec4ab Mon Sep 17 00:00:00 2001 From: svbutko Date: Fri, 1 Oct 2021 11:54:24 +0300 Subject: [PATCH 29/39] Enable useAndroidX and enableJetifier --- lib/android/gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/android/gradle.properties b/lib/android/gradle.properties index eeea815a325..8b89a202bf3 100644 --- a/lib/android/gradle.properties +++ b/lib/android/gradle.properties @@ -17,5 +17,5 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -# android.useAndroidX=true -# android.enableJetifier=true +android.useAndroidX=true +android.enableJetifier=true From ead6a5885d524569eeceba5a53ca89864abf1b10 Mon Sep 17 00:00:00 2001 From: svbutko Date: Fri, 1 Oct 2021 12:21:24 +0300 Subject: [PATCH 30/39] Replace soon-to-be deprecated setupTestFrameworkScriptFile by setupFilesAfterEnv --- e2e/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/config.json b/e2e/config.json index 4a18907cd52..6640a550291 100644 --- a/e2e/config.json +++ b/e2e/config.json @@ -1,7 +1,7 @@ { "globalSetup": "./global-setup.js", "globalTeardown": "./global-teardown.js", - "setupTestFrameworkScriptFile" : "./init.js", + "setupFilesAfterEnv" : ["./init.js"], "testEnvironment": "node", "bail": true, "verbose": true, From 843b278c643b5951c6edbae5d2a263ceb49cad87 Mon Sep 17 00:00:00 2001 From: svbutko Date: Fri, 1 Oct 2021 14:03:44 +0300 Subject: [PATCH 31/39] Change configuration to from implementation --- playground/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index 8d28c53fb1f..6cf79a86776 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -68,7 +68,7 @@ dependencies { task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile + from configurations.implementation into 'libs' } From cfc13bac3487035ec0d32e6b08d44f7a92ae09a1 Mon Sep 17 00:00:00 2001 From: svbutko Date: Sat, 2 Oct 2021 09:22:30 +0300 Subject: [PATCH 32/39] Update React Native to 0.66.0 --- .gitignore | 3 +- lib/android/build.gradle | 2 +- package.json | 5 +-- playground/.gitignore | 3 +- playground/android/app/build.gradle | 2 +- playground/android/build.gradle | 2 +- playground/ios/Podfile | 35 ++-------------- .../ios/playground.xcodeproj/project.pbxproj | 40 +++++++++---------- 8 files changed, 31 insertions(+), 61 deletions(-) diff --git a/.gitignore b/.gitignore index a341533ec4f..be2c9010fff 100644 --- a/.gitignore +++ b/.gitignore @@ -171,6 +171,7 @@ android/captures/ # Intellij *.iml +*.hprof # Keystore files *.jks @@ -237,4 +238,4 @@ playground/ios/Podfile.lock website/package-lock.json # detox artifacts -artifacts/ \ No newline at end of file +artifacts/ diff --git a/lib/android/build.gradle b/lib/android/build.gradle index d9d648b9339..d686a24b728 100644 --- a/lib/android/build.gradle +++ b/lib/android/build.gradle @@ -13,7 +13,7 @@ buildscript { } dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - classpath("com.android.tools.build:gradle:4.2.1") + classpath("com.android.tools.build:gradle:4.2.2") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/package.json b/package.json index 7388c0887fb..aeb3af5e052 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@types/jest": "27.0.2", "@types/lodash": "^4.14.175", "@types/react": "17.0.26", - "@types/react-native": "0.65.2", + "@types/react-native": "0.65.3", "@types/react-test-renderer": "17.0.1", "@typescript-eslint/eslint-plugin": "3.3.0", "@typescript-eslint/parser": "3.3.0", @@ -102,8 +102,7 @@ "metro-react-native-babel-preset": "0.66.2", "prettier": "2.1.2", "react": "17.0.2", - "react-native": "0.65.1", - "react-native-codegen": "0.0.8", + "react-native": "0.66.0", "react-native-fast-image": "^8.5.11", "react-native-gesture-handler": "^1.10.3", "react-native-reanimated": "^1.13.3", diff --git a/playground/.gitignore b/playground/.gitignore index d9d6e0e6776..05b68425aee 100644 --- a/playground/.gitignore +++ b/playground/.gitignore @@ -162,6 +162,7 @@ android/captures/ # Intellij *.iml +*.hprof # Keystore files *.jks @@ -211,4 +212,4 @@ android/app/libs android/keystores/debug.keystore # Snapshot tests diffs -ios/SnapshotTests/FailureDiffs/ \ No newline at end of file +ios/SnapshotTests/FailureDiffs/ diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index 6cf79a86776..c9d8ca3d331 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -17,7 +17,7 @@ apply from: "../../../node_modules/react-native/react.gradle" android { compileSdkVersion 30 - ndkVersion "20.1.5948944" + ndkVersion "21.4.7075529" defaultConfig { applicationId "com.reactnativenavigation.playground" diff --git a/playground/android/build.gradle b/playground/android/build.gradle index 533b768a44b..aac8ea5b657 100644 --- a/playground/android/build.gradle +++ b/playground/android/build.gradle @@ -14,7 +14,7 @@ buildscript { } dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - classpath("com.android.tools.build:gradle:4.2.1") + classpath("com.android.tools.build:gradle:4.2.2") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/playground/ios/Podfile b/playground/ios/Podfile index 9aef7e3b081..af17152db13 100644 --- a/playground/ios/Podfile +++ b/playground/ios/Podfile @@ -31,34 +31,7 @@ target 'SnapshotTests' do pod 'OCMock' end - post_install do |installer| - react_native_post_install(installer) - - # Apple Silicon builds require a library path tweak for Swift library discovery or "symbol not found" for swift things - installer.aggregate_targets.each do |aggregate_target| - aggregate_target.user_project.native_targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['LIBRARY_SEARCH_PATHS'] = ['$(SDKROOT)/usr/lib/swift', '$(inherited)'] - end - end - aggregate_target.user_project.save - end - - # Flipper requires a crude patch to bump up iOS deployment target, or "error: thread-local storage is not supported for the current target" - # I'm not aware of any other way to fix this one other than bumping iOS deployment target to match react-native - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - case target.name - when 'RCT-Folly' - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0' - else - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' - end - end - end - - # ...but if you bump iOS deployment target, Flipper barfs again "Time.h:52:17: error: typedef redefinition with different types" - # We need to make one crude patch to RCT-Folly - set `__IPHONE_10_0` to our iOS target + 1 - # https://github.com/facebook/flipper/issues/834 - 84 comments and still going... - `sed -i -e $'s/__IPHONE_10_0/__IPHONE_12_0/' Pods/RCT-Folly/folly/portability/Time.h` - end +post_install do |installer| + react_native_post_install(installer) + __apply_Xcode_12_5_M1_post_install_workaround(installer) +end diff --git a/playground/ios/playground.xcodeproj/project.pbxproj b/playground/ios/playground.xcodeproj/project.pbxproj index 4ebc4d18aa0..4cc48e8212a 100644 --- a/playground/ios/playground.xcodeproj/project.pbxproj +++ b/playground/ios/playground.xcodeproj/project.pbxproj @@ -671,13 +671,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-frameworks.sh", - "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-playground/Pods-playground-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -689,13 +688,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-frameworks.sh", - "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationIOS12Tests/Pods-NavigationIOS12Tests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -802,13 +800,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-frameworks.sh", - "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-NavigationTests/Pods-NavigationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -842,13 +839,12 @@ buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-frameworks.sh", - "${PODS_ROOT}/hermes-engine/destroot/Library/Frameworks/iphoneos/hermes.framework", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-SnapshotTests/Pods-SnapshotTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1265,7 +1261,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 "; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 i386"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1321,7 +1317,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 "; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 i386"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; From e91ea53444c9bbdb24e47a1a74cedc47929074e7 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 12:38:17 +0300 Subject: [PATCH 33/39] Merge branch 'master' into RN64 # Conflicts: # lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt # lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java # lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java # lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java --- .../options/ElementTransitionOptions.kt | 1 - .../options/LayoutFactory.java | 240 +++++++++--------- .../options/ValueAnimationOptions.kt | 6 +- .../interpolators/SpringInterpolator.kt | 32 +-- .../options/parsers/TypefaceLoader.kt | 1 - .../react/CommandListenerAdapter.java | 2 - .../react/NavigationModule.java | 13 +- .../react/modal/ModalContentLayout.kt | 10 +- .../react/modal/ModalLayoutController.kt | 14 +- .../utils/CoordinatorLayoutUtils.java | 2 +- .../utils/OutlineProvider.kt | 1 - .../utils/ReflectionUtils.java | 2 +- .../utils/RenderChecker.java | 2 +- .../utils/StatusBarUtils.java | 2 - .../reactnativenavigation/utils/UiUtils.java | 11 +- .../reactnativenavigation/utils/ViewParent.kt | 3 - .../utils/ViewUtils.java | 9 +- .../bottomtabs/BottomTabPresenter.java | 14 +- .../bottomtabs/BottomTabsAnimator.kt | 1 - .../bottomtabs/BottomTabsController.java | 6 +- .../attacher/BottomTabsAttacher.java | 2 +- .../bottomtabs/attacher/modes/AttachMode.java | 6 +- .../attacher/modes/OnSwitchToTab.java | 4 +- .../child/ChildController.java | 2 +- .../child/ChildControllersRegistry.java | 10 +- .../component/ComponentPresenterBase.java | 1 - .../component/ComponentViewController.java | 2 +- .../viewcontrollers/modal/ModalStack.java | 36 +-- .../viewcontrollers/navigator/Navigator.java | 24 +- .../parent/ParentController.java | 44 ++-- .../sidemenu/SideMenuController.java | 32 +-- .../sidemenu/SideMenuPresenter.java | 8 +- .../viewcontrollers/stack/FabPresenter.java | 16 +- .../viewcontrollers/stack/IdStack.java | 28 +- .../stack/StackControllerBuilder.java | 6 +- .../viewcontrollers/stack/StackPresenter.java | 57 +++-- .../stack/topbar/TopBarAnimator.kt | 1 + .../TopBarBackgroundViewController.java | 1 - .../stack/topbar/TopBarController.kt | 2 +- .../stack/topbar/button/BackButtonHelper.java | 4 +- .../stack/topbar/button/ButtonPresenter.kt | 2 +- .../stack/topbar/button/ButtonSpan.kt | 1 - .../stack/topbar/button/IconResolver.java | 1 - .../toptabs/TopTabsAdapter.java | 9 +- .../toptabs/TopTabsController.java | 16 +- .../views/bottomtabs/BottomTabsContainer.kt | 5 +- .../views/bottomtabs/BottomTabsLayout.java | 1 - .../animators/PropertyAnimatorCreator.kt | 2 + .../animators/ReactImageBoundsAnimator.kt | 1 - .../animators/ReactImageMatrixAnimator.kt | 4 +- .../animators/ReactViewRotationAnimator.kt | 5 - .../views/toptabs/TopTabsLayoutCreator.java | 4 +- .../views/toptabs/TopTabsViewPager.java | 12 +- .../com/reactnativenavigation/BaseTest.java | 51 ++-- .../com/reactnativenavigation/TestUtils.java | 6 +- .../mocks/TestComponentLayout.java | 4 +- .../options/parsers/ColorParseTest.java | 3 - .../presentation/RenderCheckerTest.java | 12 +- .../bottomtabs/BottomTabPresenterTest.java | 7 +- .../bottomtabs/BottomTabsAttacherTest.java | 2 +- .../bottomtabs/BottomTabsControllerTest.java | 28 +- .../attacher/modes/AttachModeTest.java | 10 +- .../child/ChildControllerTest.java | 4 +- .../child/ChildControllersRegistryTest.java | 4 +- .../modal/ModalPresenterTest.java | 8 +- .../viewcontrollers/modal/ModalStackTest.java | 20 +- .../navigator/NavigatorTest.java | 51 ++-- .../navigator/RootPresenterTest.kt | 4 +- .../parent/ParentControllerTest.java | 30 +-- .../sidemenu/SideMenuControllerTest.java | 22 +- .../stack/BackButtonHelperTest.java | 4 +- .../stack/StackAnimatorTest.kt | 4 - .../stack/StackControllerTest.kt | 30 +-- .../stack/StackPresenterTest.kt | 34 +-- .../stack/TopBarControllerTest.kt | 6 +- .../toptabs/TopTabsViewControllerTest.java | 18 +- lib/src/components/Modal.tsx | 3 +- 77 files changed, 525 insertions(+), 561 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt index 7e68dd4a819..64af80f6393 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt @@ -1,7 +1,6 @@ package com.reactnativenavigation.options import android.animation.Animator -import android.animation.AnimatorSet import android.view.View import org.json.JSONObject diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java index 2de7425bf59..7e3ff064736 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java @@ -47,37 +47,37 @@ public class LayoutFactory { private Activity activity; - private ChildControllersRegistry childRegistry; + private ChildControllersRegistry childRegistry; private final ReactInstanceManager reactInstanceManager; - private EventEmitter eventEmitter; - private Map externalComponentCreators; - private @NonNull Options defaultOptions = new Options(); - private TypefaceLoader typefaceManager; - - public void setDefaultOptions(@NonNull Options defaultOptions) { - Assertions.assertNotNull(defaultOptions); - this.defaultOptions = defaultOptions; - } - - public LayoutFactory(final ReactInstanceManager reactInstanceManager) { - this.reactInstanceManager = reactInstanceManager; - } - - public void init(Activity activity, EventEmitter eventEmitter, ChildControllersRegistry childRegistry, Map externalComponentCreators) { - this.activity = activity; - this.eventEmitter = eventEmitter; - this.childRegistry = childRegistry; - this.externalComponentCreators = externalComponentCreators; - typefaceManager = new TypefaceLoader(activity); - } - - public ViewController create(final LayoutNode node) { + private EventEmitter eventEmitter; + private Map externalComponentCreators; + private @NonNull Options defaultOptions = new Options(); + private TypefaceLoader typefaceManager; + + public void setDefaultOptions(@NonNull Options defaultOptions) { + Assertions.assertNotNull(defaultOptions); + this.defaultOptions = defaultOptions; + } + + public LayoutFactory(final ReactInstanceManager reactInstanceManager) { + this.reactInstanceManager = reactInstanceManager; + } + + public void init(Activity activity, EventEmitter eventEmitter, ChildControllersRegistry childRegistry, Map externalComponentCreators) { + this.activity = activity; + this.eventEmitter = eventEmitter; + this.childRegistry = childRegistry; + this.externalComponentCreators = externalComponentCreators; + typefaceManager = new TypefaceLoader(activity); + } + + public ViewController create(final LayoutNode node) { final ReactContext context = reactInstanceManager.getCurrentReactContext(); switch (node.type) { case Component: return createComponent(context, node); - case ExternalComponent: - return createExternalComponent(context, node); + case ExternalComponent: + return createExternalComponent(context, node); case Stack: return createStack(context, node); case BottomTabs: @@ -90,22 +90,22 @@ public ViewController create(final LayoutNode node) { return createSideMenuLeft(node); case SideMenuRight: return createSideMenuRight(node); - case TopTabs: - return createTopTabs(context, node); + case TopTabs: + return createTopTabs(context, node); default: throw new IllegalArgumentException("Invalid node type: " + node.type); } } - private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) { + private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) { SideMenuController sideMenuController = new SideMenuController(activity, - childRegistry, - node.id, - parse(context, typefaceManager, node.getOptions()), - new SideMenuPresenter(), - new Presenter(activity, defaultOptions) - ); - ViewController childControllerCenter = null, childControllerLeft = null, childControllerRight = null; + childRegistry, + node.id, + parse(context, typefaceManager, node.getOptions()), + new SideMenuPresenter(), + new Presenter(activity, defaultOptions) + ); + ViewController childControllerCenter = null, childControllerLeft = null, childControllerRight = null; for (LayoutNode child : node.children) { switch (child.type) { @@ -141,105 +141,105 @@ private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) return sideMenuController; } - private ViewController createSideMenuContent(LayoutNode node) { + private ViewController createSideMenuContent(LayoutNode node) { return create(node.children.get(0)); } - private ViewController createSideMenuLeft(LayoutNode node) { + private ViewController createSideMenuLeft(LayoutNode node) { return create(node.children.get(0)); } - private ViewController createSideMenuRight(LayoutNode node) { + private ViewController createSideMenuRight(LayoutNode node) { return create(node.children.get(0)); } - private ViewController createComponent(ReactContext context, LayoutNode node) { + private ViewController createComponent(ReactContext context, LayoutNode node) { String id = node.id; String name = node.data.optString("name"); - return new ComponentViewController(activity, - childRegistry, - id, - name, - new ComponentViewCreator(reactInstanceManager), - parse(context, typefaceManager, node.getOptions()), - new Presenter(activity, defaultOptions), - new ComponentPresenter(defaultOptions) - ); + return new ComponentViewController(activity, + childRegistry, + id, + name, + new ComponentViewCreator(reactInstanceManager), + parse(context, typefaceManager, node.getOptions()), + new Presenter(activity, defaultOptions), + new ComponentPresenter(defaultOptions) + ); } - private ViewController createExternalComponent(ReactContext context, LayoutNode node) { - final ExternalComponent externalComponent = ExternalComponent.parse(node.data); - return new ExternalComponentViewController(activity, - childRegistry, - node.id, - new Presenter(activity, defaultOptions), - externalComponent, - externalComponentCreators.get(externalComponent.name.get()), - reactInstanceManager, - new EventEmitter(context), - new ExternalComponentPresenter(), - parse(context, typefaceManager, node.getOptions()) - ); - } - - private ViewController createStack(ReactContext context, LayoutNode node) { - return new StackControllerBuilder(activity, eventEmitter) - .setChildren(createChildren(node.children)) - .setChildRegistry(childRegistry) - .setTopBarController(new TopBarController()) - .setId(node.id) - .setInitialOptions(parse(context, typefaceManager, node.getOptions())) - .setStackPresenter(new StackPresenter(activity, - new TitleBarReactViewCreator(reactInstanceManager), - new TopBarBackgroundViewCreator(reactInstanceManager), - new TitleBarButtonCreator(reactInstanceManager), - new IconResolver(activity, new ImageLoader()), - new TypefaceLoader(activity), - new RenderChecker(), - defaultOptions - )) - .setPresenter(new Presenter(activity, defaultOptions)) - .build(); + private ViewController createExternalComponent(ReactContext context, LayoutNode node) { + final ExternalComponent externalComponent = ExternalComponent.parse(node.data); + return new ExternalComponentViewController(activity, + childRegistry, + node.id, + new Presenter(activity, defaultOptions), + externalComponent, + externalComponentCreators.get(externalComponent.name.get()), + reactInstanceManager, + new EventEmitter(context), + new ExternalComponentPresenter(), + parse(context, typefaceManager, node.getOptions()) + ); } - private List createChildren(List children) { - List result = new ArrayList<>(); - for (LayoutNode child : children) { - result.add(create(child)); - } - return result; - } - - private ViewController createBottomTabs(ReactContext context, LayoutNode node) { - List> tabs = map(node.children, this::create); - BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator()); - return new BottomTabsController(activity, - tabs, - childRegistry, - eventEmitter, - new ImageLoader(), - node.id, - parse(context, typefaceManager, node.getOptions()), - new Presenter(activity, defaultOptions), - new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions), - bottomTabsPresenter, - new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions)); + private ViewController createStack(ReactContext context, LayoutNode node) { + return new StackControllerBuilder(activity, eventEmitter) + .setChildren(createChildren(node.children)) + .setChildRegistry(childRegistry) + .setTopBarController(new TopBarController()) + .setId(node.id) + .setInitialOptions(parse(context, typefaceManager, node.getOptions())) + .setStackPresenter(new StackPresenter(activity, + new TitleBarReactViewCreator(reactInstanceManager), + new TopBarBackgroundViewCreator(reactInstanceManager), + new TitleBarButtonCreator(reactInstanceManager), + new IconResolver(activity, new ImageLoader()), + new TypefaceLoader(activity), + new RenderChecker(), + defaultOptions + )) + .setPresenter(new Presenter(activity, defaultOptions)) + .build(); } - private ViewController createTopTabs(ReactContext context, LayoutNode node) { - final List tabs = new ArrayList<>(); - for (int i = 0; i < node.children.size(); i++) { - ViewController tabController = create(node.children.get(i)); - Options options = parse(context, typefaceManager, node.children.get(i).getOptions()); - options.setTopTabIndex(i); - tabs.add(tabController); - } - return new TopTabsController(activity, childRegistry, node.id, tabs, new TopTabsLayoutCreator(activity, tabs), parse(context, typefaceManager, node.getOptions()), new Presenter(activity, defaultOptions)); - } - - @NonNull - @RestrictTo(RestrictTo.Scope.TESTS) - public Options getDefaultOptions() { - return defaultOptions; - } + private List> createChildren(List children) { + List> result = new ArrayList<>(); + for (LayoutNode child : children) { + result.add(create(child)); + } + return result; + } + + private ViewController createBottomTabs(ReactContext context, LayoutNode node) { + List> tabs = map(node.children, this::create); + BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator()); + return new BottomTabsController(activity, + tabs, + childRegistry, + eventEmitter, + new ImageLoader(), + node.id, + parse(context, typefaceManager, node.getOptions()), + new Presenter(activity, defaultOptions), + new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions), + bottomTabsPresenter, + new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions)); + } + + private ViewController createTopTabs(ReactContext context, LayoutNode node) { + final List> tabs = new ArrayList<>(); + for (int i = 0; i < node.children.size(); i++) { + ViewController tabController = create(node.children.get(i)); + Options options = parse(context, typefaceManager, node.children.get(i).getOptions()); + options.setTopTabIndex(i); + tabs.add(tabController); + } + return new TopTabsController(activity, childRegistry, node.id, tabs, new TopTabsLayoutCreator(activity, tabs), parse(context, typefaceManager, node.getOptions()), new Presenter(activity, defaultOptions)); + } + + @NonNull + @RestrictTo(RestrictTo.Scope.TESTS) + public Options getDefaultOptions() { + return defaultOptions; + } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt index a6efe11a7bc..672914e1ba0 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt @@ -60,9 +60,9 @@ class ValueAnimationOptions { return animator } - override fun equals(o: Any?): Boolean { - if (this === o) return true - return if (o == null || javaClass != o.javaClass) false else animProp == (o as ValueAnimationOptions).animProp + override fun equals(other: Any?): Boolean { + if (this === other) return true + return if (other == null || javaClass != other.javaClass) false else animProp == (other as ValueAnimationOptions).animProp } fun equals(animationProperty: Property): Boolean { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt index e08a84ba353..5b1af5ac382 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt @@ -7,35 +7,35 @@ class SpringInterpolator(private val mass: Float = 3f, private val damping: Floa private val velocity: Float = initialVelocity override fun getInterpolation(t: Float): Float { - val b = damping; - val m = mass; - val k = stiffness; - val v0 = velocity; + val b = damping + val m = mass + val k = stiffness + val v0 = velocity - var beta = b / (2 * m); - val omega0 = sqrt(k / m); - val omega1 = sqrt((omega0 * omega0) - (beta * beta)); - val omega2 = sqrt((beta * beta) - (omega0 * omega0)); + var beta = b / (2 * m) + val omega0 = sqrt(k / m) + val omega1 = sqrt((omega0 * omega0) - (beta * beta)) + val omega2 = sqrt((beta * beta) - (omega0 * omega0)) - val x0 = -1; + val x0 = -1 - if (!this.allowsOverdamping && beta > omega0) beta = omega0; + if (!this.allowsOverdamping && beta > omega0) beta = omega0 if (t == 1f) { return 1f } return when { beta < omega0 -> { // Underdamped - val envelope = exp(-beta * t); - -x0 + envelope * (x0 * cos(omega1 * t) + ((beta * x0 + v0) / omega1) * sin(omega1 * t)); + val envelope = exp(-beta * t) + -x0 + envelope * (x0 * cos(omega1 * t) + ((beta * x0 + v0) / omega1) * sin(omega1 * t)) } beta == omega0 -> { - val envelope = exp(-beta * t); - -x0 + envelope * (x0 + (beta * x0 + v0) * t); + val envelope = exp(-beta * t) + -x0 + envelope * (x0 + (beta * x0 + v0) * t) } else -> { - val envelope = exp(-beta * t); - -x0 + envelope * (x0 * cosh(omega2 * t) + ((beta * x0 + v0) / omega2) * sinh(omega2 * t)); + val envelope = exp(-beta * t) + -x0 + envelope * (x0 * cosh(omega2 * t) + ((beta * x0 + v0) / omega2) * sinh(omega2 * t)) } } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt index b1d3eb32e4c..c1f8fb6aa74 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.options.parsers import android.content.Context import android.graphics.Typeface -import android.text.TextUtils import com.reactnativenavigation.utils.ReactTypefaceUtils open class TypefaceLoader(private val context: Context) { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java index 5b7bb656afb..94ab7954132 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java @@ -1,7 +1,5 @@ package com.reactnativenavigation.react; -import com.reactnativenavigation.react.CommandListener; - import androidx.annotation.Nullable; public class CommandListenerAdapter implements CommandListener { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java index 3eb66097716..ccae0c70fa4 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java @@ -30,6 +30,7 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; import java.util.ArrayList; +import java.util.Objects; import static com.reactnativenavigation.utils.UiUtils.pxToDp; @@ -107,9 +108,9 @@ public WritableMap getNavigationConstantsSync() { @ReactMethod public void setRoot(String commandId, ReadableMap rawLayoutTree, Promise promise) { - final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree).optJSONObject("root")); + final LayoutNode layoutTree = LayoutNodeParser.parse(Objects.requireNonNull(jsonParser.parse(rawLayoutTree).optJSONObject("root"))); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().setRoot(viewController, new NativeCommandListener("setRoot", commandId, promise, eventEmitter, now), reactInstanceManager); }); } @@ -132,7 +133,7 @@ public void mergeOptions(String onComponentId, @Nullable ReadableMap options) { public void push(String commandId, String onComponentId, ReadableMap rawLayoutTree, Promise promise) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().push(onComponentId, viewController, new NativeCommandListener("push", commandId, promise, eventEmitter, now)); }); } @@ -140,7 +141,7 @@ public void push(String commandId, String onComponentId, ReadableMap rawLayoutTr @ReactMethod public void setStackRoot(String commandId, String onComponentId, ReadableArray children, Promise promise) { handle(() -> { - ArrayList _children = new ArrayList<>(); + ArrayList> _children = new ArrayList<>(); for (int i = 0; i < children.size(); i++) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(children.getMap(i))); _children.add(layoutFactory.create(layoutTree)); @@ -168,7 +169,7 @@ public void popToRoot(String commandId, String componentId, @Nullable ReadableMa public void showModal(String commandId, ReadableMap rawLayoutTree, Promise promise) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().showModal(viewController, new NativeCommandListener("showModal", commandId, promise, eventEmitter, now)); }); } @@ -190,7 +191,7 @@ public void dismissAllModals(String commandId, @Nullable ReadableMap mergeOption public void showOverlay(String commandId, ReadableMap rawLayoutTree, Promise promise) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().showOverlay(viewController, new NativeCommandListener("showOverlay", commandId, promise, eventEmitter, now)); }); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt index 4923f371817..da7d5b1b4f9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt @@ -28,13 +28,13 @@ class ModalContentLayout(context: Context?) : ReactViewGroup(context), RootView{ val reactContext: ReactContext = this.getReactContext() reactContext.runOnNativeModulesQueueThread(object : GuardedRunnable(reactContext) { override fun runGuarded() { - val uiManager = this@ModalContentLayout.getReactContext().getNativeModule( - UIManagerModule::class.java + val uiManager = this@ModalContentLayout.getReactContext().getNativeModule( + UIManagerModule::class.java ) as UIManagerModule uiManager.updateNodeSize( - viewTag, - this@ModalContentLayout.viewWidth, - this@ModalContentLayout.viewHeight + viewTag, + this@ModalContentLayout.viewWidth, + this@ModalContentLayout.viewHeight ) } }) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt index d8fd6a15b8a..a0846d927df 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalLayoutController.kt @@ -36,16 +36,16 @@ class ModalLayoutController( override fun sendOnNavigationButtonPressed(buttonId: String?) { if (buttonId == Constants.HARDWARE_BACK_BUTTON_ID) { val dispatcher = reactContext.getNativeModule( - UIManagerModule::class.java - ).eventDispatcher - dispatcher.dispatchEvent(RequestCloseModalEvent(getHostId())) + UIManagerModule::class.java + )?.eventDispatcher + dispatcher?.dispatchEvent(RequestCloseModalEvent(getHostId())) } } fun sendShowEvent() { val dispatcher = reactContext.getNativeModule( - UIManagerModule::class.java - ).eventDispatcher - dispatcher.dispatchEvent(ShowModalEvent(getHostId())) + UIManagerModule::class.java + )?.eventDispatcher + dispatcher?.dispatchEvent(ShowModalEvent(getHostId())) } -} \ No newline at end of file +} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java index 07fc90e968a..a20b272e4b3 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java @@ -13,7 +13,7 @@ public static CoordinatorLayout.LayoutParams matchParentLP() { return new CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); } - public static CoordinatorLayout.LayoutParams matchParentWithBehaviour(CoordinatorLayout.Behavior behavior) { + public static CoordinatorLayout.LayoutParams matchParentWithBehaviour(CoordinatorLayout.Behavior behavior) { CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); lp.setBehavior(behavior); return lp; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt b/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt index aa7642914ea..167c0355649 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.utils import android.graphics.Outline import android.os.Build -import android.util.Log import android.view.View import android.view.ViewOutlineProvider import androidx.annotation.RequiresApi diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java index 0eaf3e233da..1a31f370c0d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java @@ -33,7 +33,7 @@ public static Object getDeclaredField(Object obj, String fieldName) { return null; } - private static Field getField(Class clazz, String name) { + private static Field getField(Class clazz, String name) { try { return clazz.getDeclaredField(name); } catch (NoSuchFieldException nsfe) { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java index d4f33d921d0..3d94175cd61 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java @@ -7,7 +7,7 @@ import static com.reactnativenavigation.utils.CollectionUtils.reduce; public class RenderChecker { - public boolean areRendered(Collection components) { + public boolean areRendered(Collection> components) { return reduce(components, true, ViewController::isRendered); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java index 6538323a194..1fb0d92488f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java @@ -9,8 +9,6 @@ import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; import static com.reactnativenavigation.utils.UiUtils.dpToPx; -import androidx.annotation.VisibleForTesting; - public class StatusBarUtils { private static final int STATUS_BAR_HEIGHT_M = 24; private static final int STATUS_BAR_HEIGHT_L = 25; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java index b7c6c9edd44..1c5a3edf5e6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java @@ -11,7 +11,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; public class UiUtils { private static final int DEFAULT_TOOLBAR_HEIGHT = 56; @@ -81,13 +80,13 @@ public void onWindowDetached() { }); } - public static void runOnMainThread(Runnable runnable) { - new Handler(Looper.getMainLooper()).post(runnable); - } + public static void runOnMainThread(Runnable runnable) { + new Handler(Looper.getMainLooper()).post(runnable); + } - public static float getWindowHeight(Context context) { + public static float getWindowHeight(Context context) { return getDisplayMetrics(context).heightPixels; - } + } public static float getWindowWidth(Context context) { return getDisplayMetrics(context).widthPixels; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt index c4abaaf7643..acfd0d5a3ef 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt @@ -2,9 +2,6 @@ package com.reactnativenavigation.utils import android.view.View import android.view.ViewParent -import androidx.core.view.doOnLayout -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine val ViewParent.scaleX: Float get() = (this as View).scaleX diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java index d8df9dd6b7a..cdce75b8ab8 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java @@ -3,7 +3,6 @@ import android.graphics.Point; import android.view.View; import android.view.ViewGroup; -import android.view.ViewManager; import android.view.ViewParent; import com.facebook.react.views.view.ReactViewBackgroundDrawable; @@ -34,11 +33,11 @@ public static T findChildByClass(ViewGroup root, Class clazz return null; } - public static List findChildrenByClassRecursive(ViewGroup root, Class clazz) { + public static List findChildrenByClassRecursive(ViewGroup root, Class clazz) { return findChildrenByClassRecursive(root, clazz, child -> true); } - public static List findChildrenByClassRecursive(ViewGroup root, Class clazz, Matcher matcher) { + public static List findChildrenByClassRecursive(ViewGroup root, Class clazz, Matcher matcher) { ArrayList ret = new ArrayList<>(); for (int i = 0; i < root.getChildCount(); i++) { View view = root.getChildAt(i); @@ -56,7 +55,7 @@ public static List findChildrenByClass(ViewGroup root, Class clazz) { return findChildrenByClass(root, clazz, child -> true); } - public static List findChildrenByClass(ViewGroup root, Class clazz, Matcher matcher) { + public static List findChildrenByClass(ViewGroup root, Class clazz, Matcher matcher) { List ret = new ArrayList<>(); for (int i = 0; i < root.getChildCount(); i++) { View child = root.getChildAt(i); @@ -114,7 +113,7 @@ public static int getBackgroundColor(View view) { } throw new RuntimeException(view.getBackground().getClass().getSimpleName() + " is not ReactViewBackgroundDrawable"); } - + public static boolean isVisible(View view) { return perform(view, false, v -> v.getVisibility() == View.VISIBLE); diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java index 86a145bc18c..a7da579569a 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java @@ -1,17 +1,20 @@ package com.reactnativenavigation.viewcontrollers.bottomtabs; +import static com.reactnativenavigation.utils.CollectionUtils.forEach; +import static com.reactnativenavigation.utils.UiUtils.dpToPx; + import android.content.Context; import android.graphics.Typeface; import android.graphics.drawable.Drawable; +import androidx.annotation.NonNull; + import com.aurelhubert.ahbottomnavigation.notification.AHNotification; import com.reactnativenavigation.options.BottomTabOptions; import com.reactnativenavigation.options.DotIndicatorOptions; import com.reactnativenavigation.options.Options; -import com.reactnativenavigation.options.params.Param; import com.reactnativenavigation.options.params.ThemeColour; import com.reactnativenavigation.options.parsers.TypefaceLoader; -import com.reactnativenavigation.utils.ContextKt; import com.reactnativenavigation.utils.ImageLoader; import com.reactnativenavigation.utils.ImageLoadingListenerAdapter; import com.reactnativenavigation.utils.LateInit; @@ -20,11 +23,6 @@ import java.util.List; -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.CollectionUtils.*; -import static com.reactnativenavigation.utils.UiUtils.dpToPx; - public class BottomTabPresenter { private final Context context; private final ImageLoader imageLoader; @@ -81,7 +79,7 @@ public void mergeOptions(Options options) { }); } - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { bottomTabs.perform(bottomTabs -> { int index = bottomTabFinder.findByControllerId(child.getId()); if (index >= 0) { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt index 015335150ca..4f8b44032f6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.viewcontrollers.bottomtabs import com.reactnativenavigation.views.animations.BaseViewAnimator import com.reactnativenavigation.views.bottomtabs.BottomTabs -import com.reactnativenavigation.views.stack.topbar.TopBar class BottomTabsAnimator(view: BottomTabs? = null) : BaseViewAnimator(HideDirection.Down, view) { override fun onShowAnimationEnd() { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java index 1842b53b88c..9e38012f9ed 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java @@ -134,7 +134,7 @@ public void mergeOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions(), child); performOnParentController(parent -> parent.applyChildOptions( @@ -147,7 +147,7 @@ public void applyChildOptions(Options options, ViewController child) { } @Override - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); presenter.mergeChildOptions(options, child); tabPresenter.mergeChildOptions(options, child); @@ -214,7 +214,7 @@ public boolean onMeasureChild(CoordinatorLayout parent, ViewGroup child, int par } @Override - public int getBottomInset(ViewController child) { + public int getBottomInset(ViewController child) { return presenter.getBottomInset(resolveChildOptions(child)) + perform(getParentController(), 0, p -> p.getBottomInset(this)); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java index 8625f336c65..34360bd0fcf 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java @@ -36,7 +36,7 @@ public void destroy() { attachStrategy.destroy(); } - public void onTabSelected(ViewController tab) { + public void onTabSelected(ViewController tab) { attachStrategy.onTabSelected(tab); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java index 7ac4f6020ed..4c145c55384 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java @@ -20,7 +20,7 @@ public abstract class AttachMode { protected final BottomTabsPresenter presenter; protected final BottomTabFinder bottomTabFinder; protected final List> tabs; - final ViewController initialTab; + final ViewController initialTab; public static AttachMode get(ViewGroup parent, List> tabs, BottomTabsPresenter presenter, Options resolved) { switch (resolved.bottomTabsOptions.tabsAttachMode) { @@ -57,12 +57,12 @@ public void destroy() { } - public void onTabSelected(ViewController tab) { + public void onTabSelected(ViewController tab) { } @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) - public void attach(ViewController tab) { + public void attach(ViewController tab) { ViewGroup view = tab.getView(); view.setVisibility(tab == initialTab ? View.VISIBLE : View.INVISIBLE); parent.addView(view, matchParentWithBehaviour(new BottomTabsBehaviour(tab.getParentController()))); diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java index 52b2eeb9bb8..f1656395016 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java @@ -20,13 +20,13 @@ public void attach() { } @Override - public void onTabSelected(ViewController tab) { + public void onTabSelected(ViewController tab) { if (tab != initialTab && isNotAttached(tab)) { attach(tab); } } - private boolean isNotAttached(ViewController tab) { + private boolean isNotAttached(ViewController tab) { return tab.getView().getParent() == null; } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java index 9b43ed25258..0fc83e394e5 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java @@ -98,7 +98,7 @@ private WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat ins return applyWindowInsets(findController(view), insets); } - protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { + protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { return insets.replaceSystemWindowInsets( insets.getSystemWindowInsetLeft(), 0, diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java index 4b97938bf5c..b74c5f46dc9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java @@ -5,13 +5,13 @@ import static com.reactnativenavigation.utils.ObjectUtils.perform; public class ChildControllersRegistry { - private ArrayDeque children = new ArrayDeque<>(); + private ArrayDeque> children = new ArrayDeque<>(); - public void onViewAppeared(ChildController child) { + public void onViewAppeared(ChildController child) { children.push(child); } - public void onViewDisappear(ChildController child) { + public void onViewDisappear(ChildController child) { if (isTopChild(child)) { children.pop(); if (!children.isEmpty()) children.peek().onViewBroughtToFront(); @@ -20,7 +20,7 @@ public void onViewDisappear(ChildController child) { } } - private boolean isTopChild(ChildController child) { + private boolean isTopChild(ChildController child) { return perform(children.peek(), false, c -> c.equals(child)); } @@ -28,7 +28,7 @@ public int size() { return children.size(); } - public void onChildDestroyed(ChildController child) { + public void onChildDestroyed(ChildController child) { children.remove(child); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java index 47828725f28..6c105a08fef 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java @@ -2,7 +2,6 @@ import android.view.View; import android.view.ViewGroup.MarginLayoutParams; -import android.view.WindowManager; import androidx.annotation.NonNull; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java index 51837db4ceb..3117dcc53be 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java @@ -136,7 +136,7 @@ public void applyBottomInset() { } @Override - protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { + protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { ViewCompat.onApplyWindowInsets(view.getView(), insets.replaceSystemWindowInsets( insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java index 2770067a7f9..0e00f254364 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java @@ -24,7 +24,7 @@ import static com.reactnativenavigation.utils.ObjectUtils.perform; public class ModalStack { - private final List modals = new ArrayList<>(); + private final List> modals = new ArrayList<>(); private final ModalPresenter presenter; private final ModalOverlay overlay; private EventEmitter eventEmitter; @@ -57,19 +57,19 @@ public void setDefaultOptions(Options defaultOptions) { presenter.setDefaultOptions(defaultOptions); } - public void showModal(ViewController viewController, ViewController root, CommandListener listener) { - ViewController toRemove = isEmpty() ? root : peek(); + public void showModal(ViewController viewController, ViewController root, CommandListener listener) { + ViewController toRemove = isEmpty() ? root : peek(); modals.add(viewController); viewController.setOverlay(overlay); presenter.showModal(viewController, toRemove, listener); } - public boolean dismissModal(String componentId, @Nullable ViewController root, CommandListener listener) { - ViewController toDismiss = findModalByComponentId(componentId); + public boolean dismissModal(String componentId, @Nullable ViewController root, CommandListener listener) { + ViewController toDismiss = findModalByComponentId(componentId); if (toDismiss != null) { boolean isDismissingTopModal = isTop(toDismiss); modals.remove(toDismiss); - @Nullable ViewController toAdd = isEmpty() ? root : isDismissingTopModal ? get(size() - 1) : null; + @Nullable ViewController toAdd = isEmpty() ? root : isDismissingTopModal ? get(size() - 1) : null; if (isDismissingTopModal) { if (toAdd == null) { listener.onError("Could not dismiss modal"); @@ -90,7 +90,7 @@ public void onSuccess(String childId) { } } - public void dismissAllModals(@Nullable ViewController root, Options mergeOptions, CommandListener listener) { + public void dismissAllModals(@Nullable ViewController root, Options mergeOptions, CommandListener listener) { if (modals.isEmpty()) { listener.onSuccess(perform(root, "", ViewController::getId)); return; @@ -117,7 +117,7 @@ public void onSuccess(String childId) { } } - public boolean handleBack(CommandListener listener, ViewController root) { + public boolean handleBack(CommandListener listener, ViewController root) { if (isEmpty()) return false; if (peek().handleBack(listener)) { return true; @@ -130,12 +130,12 @@ public boolean handleBack(CommandListener listener, ViewController root) { } } - ViewController peek() { + ViewController peek() { if (modals.isEmpty()) throw new EmptyStackException(); return modals.get(modals.size() - 1); } - public ViewController get(int index) { + public ViewController get(int index) { return modals.get(index); } @@ -147,13 +147,13 @@ public int size() { return modals.size(); } - private boolean isTop(ViewController modal) { + private boolean isTop(ViewController modal) { return !isEmpty() && peek().equals(modal); } @Nullable - private ViewController findModalByComponentId(String componentId) { - for (ViewController modal : modals) { + private ViewController findModalByComponentId(String componentId) { + for (ViewController modal : modals) { if (modal.findController(componentId) != null) { return modal; } @@ -163,9 +163,9 @@ private ViewController findModalByComponentId(String componentId) { @Nullable - public ViewController findControllerById(String componentId) { - for (ViewController modal : modals) { - ViewController controllerById = modal.findController(componentId); + public ViewController findControllerById(String componentId) { + for (ViewController modal : modals) { + ViewController controllerById = modal.findController(componentId); if (controllerById != null) { return controllerById; } @@ -174,14 +174,14 @@ public ViewController findControllerById(String componentId) { } public void destroy() { - for (ViewController modal : modals) { + for (ViewController modal : modals) { modal.destroy(); } modals.clear(); } public void onConfigurationChanged(Configuration newConfig) { - for (ViewController controller : modals) { + for (ViewController controller : modals) { controller.onConfigurationChanged(newConfig); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java index a6b04757959..38d663b8455 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java @@ -31,13 +31,13 @@ import java.util.Collections; import java.util.List; -public class Navigator extends ParentController { +public class Navigator extends ParentController { private final ModalStack modalStack; private final OverlayManager overlayManager; private final RootPresenter rootPresenter; - private ViewController root; - private ViewController previousRoot; + private ViewController root; + private ViewController previousRoot; private final CoordinatorLayout rootLayout; private final CoordinatorLayout modalsLayout; private final CoordinatorLayout overlaysLayout; @@ -96,7 +96,7 @@ public ViewGroup createView() { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return root == null ? Collections.emptyList() : Collections.singletonList(root); } @@ -108,7 +108,7 @@ public boolean handleBack(CommandListener listener) { } @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { return root; } @@ -159,17 +159,17 @@ public void onSuccess(String childId) { } public void mergeOptions(final String componentId, Options options) { - ViewController target = findController(componentId); + ViewController target = findController(componentId); if (target != null) { target.mergeOptions(options); } } - public void push(final String id, final ViewController viewController, CommandListener listener) { + public void push(final String id, final ViewController viewController, CommandListener listener) { applyOnStack(id, listener, stack -> stack.push(viewController, listener)); } - public void setStackRoot(String id, List children, CommandListener listener) { + public void setStackRoot(String id, List> children, CommandListener listener) { applyOnStack(id, listener, stack -> stack.setRoot(children, listener)); } @@ -190,7 +190,7 @@ public void popTo(final String id, Options mergeOptions, CommandListener listene } } - public void showModal(final ViewController viewController, CommandListener listener) { + public void showModal(final ViewController viewController, CommandListener listener) { modalStack.showModal(viewController, root, listener); } @@ -206,7 +206,7 @@ public void dismissAllModals(Options mergeOptions, CommandListener listener) { modalStack.dismissAllModals(root, mergeOptions, listener); } - public void showOverlay(ViewController overlay, CommandListener listener) { + public void showOverlay(ViewController overlay, CommandListener listener) { overlayManager.show(overlaysLayout, overlay, listener); } @@ -220,8 +220,8 @@ public void dismissAllOverlays(CommandListener listener) { @Nullable @Override - public ViewController findController(String id) { - ViewController controllerById = super.findController(id); + public ViewController findController(String id) { + ViewController controllerById = super.findController(id); if (controllerById == null) { controllerById = modalStack.findControllerById(id); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java index e5a79ab49c9..8ada356ad2f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java @@ -47,14 +47,14 @@ public void setDefaultOptions(Options defaultOptions) { @Override public void onViewDidAppear() { super.onViewDidAppear(); - ViewController currentChild = getCurrentChild(); + ViewController currentChild = getCurrentChild(); if (currentChild != null) currentChild.onViewDidAppear(); } @Override public void onViewDisappear() { super.onViewDisappear(); - ViewController currentChild = getCurrentChild(); + ViewController currentChild = getCurrentChild(); if (currentChild != null) currentChild.onViewDisappear(); } @@ -68,7 +68,7 @@ public Options resolveCurrentOptions() { .withDefaultOptions(initialOptions); } - public Options resolveChildOptions(ViewController child) { + public Options resolveChildOptions(ViewController child) { if (child == this) return resolveCurrentOptions(); return child .resolveCurrentOptions() @@ -82,18 +82,18 @@ public Options resolveCurrentOptions(Options defaultOptions) { return resolveCurrentOptions().withDefaultOptions(defaultOptions); } - public boolean isCurrentChild(ViewController child) { + public boolean isCurrentChild(ViewController child) { return getCurrentChild() == child; } - public abstract ViewController getCurrentChild(); + public abstract ViewController getCurrentChild(); @NonNull @Override public abstract T createView(); @NonNull - public abstract Collection getChildControllers(); + public abstract Collection> getChildControllers(); @Nullable protected BottomTabsController getBottomTabsController() { @@ -105,12 +105,12 @@ protected BottomTabsController getBottomTabsController() { @Nullable @Override - public ViewController findController(final String id) { - ViewController fromSuper = super.findController(id); + public ViewController findController(final String id) { + ViewController fromSuper = super.findController(id); if (fromSuper != null) return fromSuper; - for (ViewController child : getChildControllers()) { - ViewController fromChild = child.findController(id); + for (ViewController child : getChildControllers()) { + ViewController fromChild = child.findController(id); if (fromChild != null) return fromChild; } @@ -119,12 +119,12 @@ public ViewController findController(final String id) { @Nullable @Override - public ViewController findController(View child) { - ViewController fromSuper = super.findController(child); + public ViewController findController(View child) { + ViewController fromSuper = super.findController(child); if (fromSuper != null) return fromSuper; - for (ViewController childController : getChildControllers()) { - ViewController fromChild = childController.findController(child); + for (ViewController childController : getChildControllers()) { + ViewController fromChild = childController.findController(child); if (fromChild != null) return fromChild; } @@ -136,19 +136,19 @@ public boolean containsComponent(Component component) { if (super.containsComponent(component)) { return true; } - for (ViewController child : getChildControllers()) { + for (ViewController child : getChildControllers()) { if (child.containsComponent(component)) return true; } return false; } @CallSuper - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { this.options = initialOptions.mergeWith(options); } @CallSuper - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { } @Override @@ -177,7 +177,7 @@ public boolean isRendered() { return getCurrentChild() != null && getCurrentChild().isRendered(); } - public void onChildDestroyed(ViewController child) { + public void onChildDestroyed(ViewController child) { } @@ -186,7 +186,7 @@ public void applyTopInset() { forEach(getChildControllers(), ViewController::applyTopInset); } - public int getTopInset(ViewController child) { + public int getTopInset(ViewController child) { return perform(getParentController(), 0, p -> p.getTopInset(child)); } @@ -195,7 +195,7 @@ public void applyBottomInset() { forEach(getChildControllers(), ViewController::applyBottomInset); } - public int getBottomInset(ViewController child) { + public int getBottomInset(ViewController child) { return perform(getParentController(), 0, p -> p.getBottomInset(child)); } @@ -206,8 +206,8 @@ public String getCurrentComponentName() { public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - Collection childControllers = getChildControllers(); - for(ViewController controller: childControllers){ + Collection> childControllers = getChildControllers(); + for(ViewController controller: childControllers){ controller.onConfigurationChanged(newConfig); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java index e4fe5e157b6..42480807934 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java @@ -29,9 +29,9 @@ public class SideMenuController extends ParentController implements DrawerLayout.DrawerListener { - private ViewController center; - private ViewController left; - private ViewController right; + private ViewController center; + private ViewController left; + private ViewController right; private SideMenuPresenter presenter; private float prevLeftSlideOffset = 0; private float prevRightSlideOffset = 0; @@ -42,7 +42,7 @@ public SideMenuController(Activity activity, ChildControllersRegistry childRegis } @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { if (!isDestroyed()) { if (getView().isDrawerOpen(Gravity.LEFT)) { return left; @@ -72,8 +72,8 @@ public void sendOnNavigationButtonPressed(String buttonId) { @NonNull @Override - public Collection getChildControllers() { - ArrayList children = new ArrayList<>(); + public Collection> getChildControllers() { + ArrayList> children = new ArrayList<>(); if (center != null) children.add(center); if (left != null) children.add(left); if (right != null) children.add(right); @@ -87,14 +87,14 @@ public void applyOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions()); performOnParentController(parent -> parent.applyChildOptions(this.options, child)); } @Override - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); presenter.mergeOptions(options.sideMenuRootOptions); mergeLockMode(this.initialOptions, options.sideMenuRootOptions); @@ -129,13 +129,13 @@ private boolean isDrawerOpen(int gravity) { @Override public void onDrawerOpened(@NonNull View drawerView) { - ViewController view = this.getMatchingView(drawerView); + ViewController view = this.getMatchingView(drawerView); view.mergeOptions(this.getOptionsWithVisibility(isLeftMenu(drawerView), true)); } @Override public void onDrawerClosed(@NonNull View drawerView) { - ViewController view = this.getMatchingView(drawerView); + ViewController view = this.getMatchingView(drawerView); view.mergeOptions(this.getOptionsWithVisibility(isLeftMenu(drawerView), false)); } @@ -163,28 +163,28 @@ public boolean handleBack(CommandListener listener) { @Nullable @Override - public ViewController findController(View child) { + public ViewController findController(View child) { return getView().isSideMenu(child) ? this : super.findController(child); } - public void setCenterController(ViewController centerController) { + public void setCenterController(ViewController centerController) { center = centerController; getView().setCenter(center); } - public void setLeftController(ViewController controller) { + public void setLeftController(ViewController controller) { left = controller; getView().setLeft(left, options); presenter.bindLeft(left); } - public void setRightController(ViewController controller) { + public void setRightController(ViewController controller) { right = controller; getView().setRight(right, options); presenter.bindRight(right); } - private ViewController getMatchingView(View drawerView) { + private ViewController getMatchingView(View drawerView) { return this.isLeftMenu(drawerView) ? left : right; } @@ -206,7 +206,7 @@ private Options getOptionsWithVisibility(boolean isLeft, boolean visible) { return options; } - private void dispatchSideMenuVisibilityEvents(ViewController drawer, float prevOffset, float offset) { + private void dispatchSideMenuVisibilityEvents(ViewController drawer, float prevOffset, float offset) { if (prevOffset < 1 && offset == 1) { drawer.onViewDidAppear(); } else if (prevOffset == 0 && offset > 0) { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java index f3d35f5647a..4831fe37667 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java @@ -15,18 +15,18 @@ public class SideMenuPresenter { private SideMenu sideMenu; - private ViewController left; - private ViewController right; + private ViewController left; + private ViewController right; public void bindView(SideMenu sideMenu) { this.sideMenu = sideMenu; } - public void bindLeft(ViewController left) { + public void bindLeft(ViewController left) { this.left = left; } - public void bindRight(ViewController right) { + public void bindRight(ViewController right) { this.right = right; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java index 9b82d07f983..7217d38d486 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java @@ -32,7 +32,7 @@ public class FabPresenter { private Fab fab; private FabMenu fabMenu; - public void applyOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { + public void applyOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { this.viewGroup = viewGroup; if (options.id.hasValue()) { @@ -54,7 +54,7 @@ public void applyOptions(FabOptions options, @NonNull ViewController component, } } - public void mergeOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { + public void mergeOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { this.viewGroup = viewGroup; if (options.id.hasValue()) { if (fabMenu != null && fabMenu.getFabId().equals(options.id.get())) { @@ -72,7 +72,7 @@ public void mergeOptions(FabOptions options, @NonNull ViewController component, } } - private void createFab(ViewController component, FabOptions options) { + private void createFab(ViewController component, FabOptions options) { ViewExtensionsKt.removeFromParent(fabMenu); ViewExtensionsKt.removeFromParent(fab); if (options.actionsArray.size() > 0) { @@ -123,7 +123,7 @@ public void onAnimationEnd(Animator animation) { }); } - private void setParams(ViewController component, View fab, FabOptions options) { + private void setParams(ViewController component, View fab, FabOptions options) { CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT); lp.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin); lp.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin); @@ -164,7 +164,7 @@ private void mergeParams(View fab, FabOptions options) { fab.setLayoutParams(lp); } - private void applyFabOptions(ViewController component, Fab fab, FabOptions options) { + private void applyFabOptions(ViewController component, Fab fab, FabOptions options) { if (options.visible.isTrueOrUndefined()) { fab.setScaleX(0.6f); fab.setScaleY(0.6f); @@ -204,7 +204,7 @@ private void applyFabOptions(ViewController component, Fab fab, FabOptions optio } } - private void mergeFabOptions(ViewController component, Fab fab, FabOptions options) { + private void mergeFabOptions(ViewController component, Fab fab, FabOptions options) { if (options.visible.isTrue()) { fab.show(true); } @@ -234,7 +234,7 @@ private void mergeFabOptions(ViewController component, Fab fab, FabOptions optio } } - private void applyFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { + private void applyFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { if (options.visible.isTrueOrUndefined()) { fabMenu.showMenuButton(true); } @@ -271,7 +271,7 @@ private void applyFabMenuOptions(ViewController component, FabMenu fabMenu, FabO } } - private void mergeFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { + private void mergeFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { if (options.visible.isTrue()) { fabMenu.showMenuButton(true); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java index b880c7468c0..07a49793c52 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java @@ -14,7 +14,7 @@ public class IdStack implements Iterable { - private final ArrayList deque = new ArrayList(); + private final ArrayList deque = new ArrayList<>(); private final Map map = new HashMap<>(); public void push(String id, E item) { @@ -22,17 +22,17 @@ public void push(String id, E item) { map.put(id, item); } - public void set(String id, E item, int index) { - deque.add(index, id); - map.put(id, item); - } + public void set(String id, E item, int index) { + deque.add(index, id); + map.put(id, item); + } public E peek() { - return isEmpty() ? null : map.get(last(deque)); + return isEmpty() ? null : map.get(last(deque)); } public E pop() { - return isEmpty() ? null : map.remove(removeLast(deque)); + return isEmpty() ? null : map.remove(removeLast(deque)); } public boolean isEmpty() { @@ -57,8 +57,8 @@ public E get(final String id) { } public E get(final int index) { - return map.get(deque.get(index)); - } + return map.get(deque.get(index)); + } public boolean containsId(final String id) { return deque.contains(id); @@ -77,7 +77,7 @@ public boolean isTop(final String id) { } @NonNull - @Override + @Override public Iterator iterator() { return deque.iterator(); } @@ -87,8 +87,8 @@ public List values() { return map(deque, map::get); } - public void remove(Iterator iterator, String id) { - iterator.remove(); - map.remove(id); - } + public void remove(Iterator iterator, String id) { + iterator.remove(); + map.remove(id); + } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java index a8295a2cd46..8a24a2e20f2 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java @@ -24,7 +24,7 @@ public class StackControllerBuilder { private BackButtonHelper backButtonHelper = new BackButtonHelper(); private Presenter presenter; private StackPresenter stackPresenter; - private List children = new ArrayList<>(); + private List> children = new ArrayList<>(); private EventEmitter eventEmitter; private FabPresenter fabPresenter = new FabPresenter(); @@ -40,11 +40,11 @@ public StackControllerBuilder setEventEmitter(EventEmitter eventEmitter) { return this; } - public StackControllerBuilder setChildren(ViewController... children) { + public StackControllerBuilder setChildren(ViewController... children) { return setChildren(Arrays.asList(children)); } - public StackControllerBuilder setChildren(List children) { + public StackControllerBuilder setChildren(List> children) { this.children = children; return this; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java index ecd6dd4cebc..313a9c3912c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java @@ -50,6 +50,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import static com.reactnativenavigation.utils.CollectionUtils.difference; import static com.reactnativenavigation.utils.CollectionUtils.filter; @@ -124,7 +125,7 @@ public void bindView(TopBarController topBarController, @Nullable BottomTabsCont } public boolean isRendered(View component) { - ArrayList controllers = new ArrayList<>(); + ArrayList> controllers = new ArrayList<>(); controllers.addAll(perform(componentRightButtons.get(component), new ArrayList<>(), Map::values)); controllers.addAll(perform(componentLeftButtons.get(component), new ArrayList<>(), Map::values)); controllers.add(backgroundControllers.get(component)); @@ -132,7 +133,7 @@ public boolean isRendered(View component) { return renderChecker.areRendered(filter(controllers, ObjectUtils::notNull)); } - public void mergeOptions(Options options, StackController stack, ViewController currentChild) { + public void mergeOptions(Options options, StackController stack, ViewController currentChild) { TopBarOptions resolvedTopBarOptions = options.topBar.copy().mergeWithDefault(stack.resolveChildOptions(currentChild).topBar).mergeWithDefault(defaultOptions.topBar); mergeOrientation(options.layout.orientation); // mergeButtons(topBar, withDefault.topBar.buttons, child); @@ -165,7 +166,7 @@ public void applyInitialChildLayoutOptions(Options options) { applyTopBarVisibility(withDefault.topBar); } - public void applyChildOptions(Options currentChildOptions, StackController stack, ViewController child) { + public void applyChildOptions(Options currentChildOptions, StackController stack, ViewController child) { Options finalChildOptions = currentChildOptions.copy().withDefaultOptions(defaultOptions); applyOrientation(finalChildOptions.layout.orientation); applyButtons(finalChildOptions.topBar, child); @@ -179,7 +180,7 @@ public void applyOrientation(OrientationOptions options) { ((Activity) topBar.getContext()).setRequestedOrientation(withDefaultOptions.getValue()); } - public void onChildDestroyed(ViewController child) { + public void onChildDestroyed(ViewController child) { perform(titleControllers.remove(child.getView()), TitleBarReactViewController::destroy); perform(backgroundControllers.remove(child.getView()), TopBarBackgroundViewController::destroy); destroyButtons(componentRightButtons.get(child.getView())); @@ -192,7 +193,7 @@ private void destroyButtons(@Nullable Map buttons) { if (buttons != null) forEach(buttons.values(), ViewController::destroy); } - private void applyTopBarOptions(Options options, StackController stack, ViewController child) { + private void applyTopBarOptions(Options options, StackController stack, ViewController child) { final View component = child.getView(); TopBarOptions topBarOptions = options.topBar; @@ -211,7 +212,7 @@ private void applyTopBarOptions(Options options, StackController stack, ViewCont if (topBarOptions.title.component.hasValue()) { if (titleControllers.containsKey(component)) { - topBarController.setTitleComponent(titleControllers.get(component)); + topBarController.setTitleComponent(Objects.requireNonNull(titleControllers.get(component))); } else { TitleBarReactViewController controller = new TitleBarReactViewController(activity, titleViewCreator, topBarOptions.title.component); controller.setWaitForRender(topBarOptions.title.component.waitForRender); @@ -267,15 +268,15 @@ private void applyStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Option } private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options toMerge) { - if(toMerge.statusBar.drawBehind.hasValue()){ - if(toMerge.statusBar.visible.isTrueOrUndefined() && toMerge.statusBar.drawBehind.isTrue()){ - topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity)); - topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity)); - } else { - topBar.setTopPadding(0); - topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity))); - } - } + if(toMerge.statusBar.drawBehind.hasValue()){ + if(toMerge.statusBar.visible.isTrueOrUndefined() && toMerge.statusBar.drawBehind.isTrue()){ + topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity)); + topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity)); + } else { + topBar.setTopPadding(0); + topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity))); + } + } } @Nullable @@ -289,7 +290,7 @@ private View findBackgroundComponent(ComponentOptions component) { return null; } - private void applyTopBarVisibilityIfChildIsNotBeingAnimated(TopBarOptions options, StackController stack, ViewController child) { + private void applyTopBarVisibilityIfChildIsNotBeingAnimated(TopBarOptions options, StackController stack, ViewController child) { if (!stack.isChildInTransition(child) || options.animate.isFalse()) applyTopBarVisibility(options); } @@ -302,7 +303,7 @@ private void applyTopBarVisibility(TopBarOptions options) { } } - private void applyButtons(TopBarOptions options, ViewController child) { + private void applyButtons(TopBarOptions options, ViewController child) { if (options.buttons.right != null) { List rightButtons = mergeButtonsWithColor(options.buttons.right, options.rightButtonColor @@ -351,7 +352,7 @@ private List getOrCreateButtonControllersByInstanceId(@Nullabl } private List getOrCreateButtonControllers(@Nullable Map currentButtons, @NonNull List buttons) { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (ButtonOptions b : buttons) { result.add(take(first(perform(currentButtons, null, Map::values), button -> button.getButton().equals(b)), createButtonController(b))); } @@ -383,7 +384,7 @@ private void applyTopTabOptions(TopTabOptions topTabOptions) { } } - public List getAdditionalPushAnimations(StackController stack, ViewController appearing, Options appearingOptions) { + public List getAdditionalPushAnimations(StackController stack, ViewController appearing, Options appearingOptions) { return CollectionUtils.asList( topBarController.getPushAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearing)), perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions)) @@ -397,14 +398,14 @@ public List getAdditionalPopAnimations(Options appearingOptions, Optio ); } - public List getAdditionalSetRootAnimations(StackController stack, ViewController appearing, Options appearingOptions) { + public List getAdditionalSetRootAnimations(StackController stack, ViewController appearing, Options appearingOptions) { return CollectionUtils.asList( topBarController.getSetStackRootAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearing)), perform(bottomTabsController, null, btc -> btc.getSetStackRootAnimation(appearingOptions)) ); } - public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController child) { + public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController child) { TopBarOptions topBar = toMerge.copy().topBar.mergeWithDefault(resolvedOptions.topBar).mergeWithDefault(defaultOptions.topBar); mergeOrientation(toMerge.layout.orientation); mergeButtons(topBar, toMerge.topBar, child.getView(), stack); @@ -507,7 +508,7 @@ private List mergeButtonsWithColor(@NonNull List b return result; } - private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController child) { + private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController child) { TopBarOptions topBarOptions = options.topBar; final View component = child.getView(); if (options.layout.direction.hasValue()) topBar.setLayoutDirection(options.layout.direction); @@ -560,7 +561,7 @@ private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, S if (topBarOptions.background.component.hasValue()) { if (backgroundControllers.containsKey(component)) { - topBar.setBackgroundComponent(backgroundControllers.get(component).getView()); + topBar.setBackgroundComponent(Objects.requireNonNull(backgroundControllers.get(component)).getView()); } else { TopBarBackgroundViewController controller = new TopBarBackgroundViewController(activity, topBarBackgroundViewCreator); backgroundControllers.put(component, controller); @@ -619,7 +620,7 @@ private void mergeTopTabOptions(TopTabOptions topTabOptions) { } } - public boolean shouldPopOnHardwareButtonPress(ViewController viewController) { + public boolean shouldPopOnHardwareButtonPress(ViewController viewController) { return viewController.resolveCurrentOptions().hardwareBack.popStackOnPress.get(true); } @@ -650,7 +651,7 @@ public void setComponentsButtonController(View child, ButtonController rightCont } - public void applyTopInsets(StackController stack, ViewController child) { + public void applyTopInsets(StackController stack, ViewController child) { if (stack.isCurrentChild(child)) applyStatusBarInsets(stack, child); child.applyTopInset(); } @@ -663,18 +664,18 @@ private List getLeftButtons(View child) { return componentLeftButtons.containsKey(child) ? new ArrayList<>(componentLeftButtons.get(child).values()) : null; } - private void applyStatusBarInsets(StackController stack, ViewController child) { + private void applyStatusBarInsets(StackController stack, ViewController child) { MarginLayoutParams lp = (MarginLayoutParams) topBar.getLayoutParams(); lp.topMargin = getTopBarTopMargin(stack, child); topBar.requestLayout(); } - private int getTopBarTranslationAnimationDelta(StackController stack, ViewController child) { + private int getTopBarTranslationAnimationDelta(StackController stack, ViewController child) { Options options = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions); return options.statusBar.hasTransparency() ? getTopBarTopMargin(stack, child) : 0; } - private int getTopBarTopMargin(StackController stack, ViewController child) { + private int getTopBarTopMargin(StackController stack, ViewController child) { Options withDefault = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions); int topMargin = UiUtils.dpToPx(activity, withDefault.topBar.topMargin.get(0)); int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ? StatusBarUtils.getStatusBarHeight(child.getActivity()) : 0; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt index 9342b5e3dd8..6d6ea9e704a 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt @@ -4,6 +4,7 @@ import com.reactnativenavigation.views.animations.BaseViewAnimator import com.reactnativenavigation.views.stack.topbar.TopBar class TopBarAnimator @JvmOverloads constructor(view: TopBar? = null) : BaseViewAnimator(HideDirection.Up, view) { + @Suppress("UNUSED_PARAMETER") fun hideOnScroll(translationStart: Float, translationEndDy: Float) { // NOOP for now - this entire mechanism needs to be reimplemented as it relies on bridge events which are obsolete in TurboModules config } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java index ba2227c12b1..8235fb4d30f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java @@ -5,7 +5,6 @@ import com.reactnativenavigation.options.ComponentOptions; import com.reactnativenavigation.options.Options; import com.reactnativenavigation.react.events.ComponentType; -import com.reactnativenavigation.react.events.EventEmitter; import com.reactnativenavigation.utils.CompatUtils; import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; import com.reactnativenavigation.viewcontrollers.viewcontroller.YellowBoxDelegate; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt index 41a1ae06d40..f0ac09d20b7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt @@ -122,7 +122,7 @@ open class TopBarController(private val animator: TopBarAnimator = TopBarAnimato } open fun mergeLeftButtons(toAdd: List, toRemove: List) { - view.clearBackButton(); + view.clearBackButton() toRemove.forEach { view.removeLeftButton(it) } forEachIndexed(toAdd) { b: ButtonController, i: Int -> b.addToMenu(leftButtonBar, i * 10) } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java index 76c880585e0..5d60f10bc93 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java @@ -5,13 +5,13 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; public class BackButtonHelper { - public void clear(ViewController child) { + public void clear(ViewController child) { if (!child.options.topBar.buttons.back.hasValue()) { child.options.topBar.buttons.back.visible = new Bool(false); } } - public void addToPushedChild(ViewController child) { + public void addToPushedChild(ViewController child) { if (child.options.topBar.buttons.left != null || child.options.topBar.buttons.back.visible.isFalse()) return; Options options = new Options(); options.topBar.buttons.back.setVisible(); diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt index 62dcb7491e9..aba7d7a8f74 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt @@ -88,7 +88,7 @@ open class ButtonPresenter(private val context: Context, private val button: But menuItem.isEnabled = button.enabled.isTrueOrUndefined } - private fun applyIconBackgroundDrawable(srcDrawable: Drawable): Drawable? { + private fun applyIconBackgroundDrawable(srcDrawable: Drawable): Drawable { return if (button.iconBackground.hasValue()) { val width = button.iconBackground.width.get(srcDrawable.intrinsicWidth).let { max(it, srcDrawable.intrinsicWidth) } val height = button.iconBackground.height.get(srcDrawable.intrinsicHeight).let { max(it, srcDrawable.intrinsicHeight) } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt index 76859ad0c5b..bf10b685b0b 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt @@ -1,7 +1,6 @@ package com.reactnativenavigation.viewcontrollers.stack.topbar.button import android.content.Context -import android.graphics.Color import android.graphics.Paint import android.graphics.Typeface import android.text.TextPaint diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java index f118eb6ffd8..ec51ede343c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java @@ -5,7 +5,6 @@ import android.util.Log; import com.reactnativenavigation.options.ButtonOptions; -import com.reactnativenavigation.react.Constants; import com.reactnativenavigation.utils.Functions.Func1; import com.reactnativenavigation.utils.ImageLoader; import com.reactnativenavigation.utils.ImageLoadingListenerAdapter; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java index 470511f166e..45cbd95d934 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java @@ -1,5 +1,6 @@ package com.reactnativenavigation.viewcontrollers.toptabs; +import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import android.view.View; @@ -11,10 +12,10 @@ import java.util.List; public class TopTabsAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener { - private List tabs; + private List> tabs; private int currentPage = 0; - public TopTabsAdapter(List tabs) { + public TopTabsAdapter(List> tabs) { this.tabs = tabs; } @@ -29,12 +30,12 @@ public int getCount() { } @Override - public boolean isViewFromObject(View view, Object object) { + public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @Override - public Object instantiateItem(ViewGroup component, int position) { + public Object instantiateItem(@NonNull ViewGroup component, int position) { return tabs.get(position).getView(); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java index 4f59bf17322..4af4e3a223d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java @@ -21,14 +21,14 @@ public class TopTabsController extends ParentController { - private List tabs; + private List> tabs; private TopTabsLayoutCreator viewCreator; - public TopTabsController(Activity activity, ChildControllersRegistry childRegistry, String id, List tabs, TopTabsLayoutCreator viewCreator, Options options, Presenter presenter) { + public TopTabsController(Activity activity, ChildControllersRegistry childRegistry, String id, List> tabs, TopTabsLayoutCreator viewCreator, Options options, Presenter presenter) { super(activity, childRegistry, id, presenter, options); this.viewCreator = viewCreator; this.tabs = tabs; - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { tab.setParentController(this); tab.setViewVisibilityListener(new ViewVisibilityListenerAdapter() { @Override @@ -40,7 +40,7 @@ public boolean onViewAppeared(View view) { } @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { return tabs.get(getView().getCurrentItem()); } @@ -53,7 +53,7 @@ public TopTabsViewPager createView() { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return tabs; } @@ -88,13 +88,13 @@ public void applyOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); performOnParentController(parentController -> parentController.applyChildOptions(this.options.copy(), child)); } @CallSuper - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); performOnParentController(parentController -> parentController.applyChildOptions(options.copy(), child)); } @@ -104,7 +104,7 @@ public void switchToTab(int index) { getCurrentChild().onViewDidAppear(); } - private void performOnCurrentTab(Func1 task) { + private void performOnCurrentTab(Func1> task) { task.run(tabs.get(getView().getCurrentItem())); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt index ba1d87c221d..f7d9743c9ca 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt @@ -1,11 +1,9 @@ package com.reactnativenavigation.views.bottomtabs -import android.R.attr.factor import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.view.View -import android.widget.FrameLayout import android.widget.LinearLayout import androidx.annotation.RestrictTo import androidx.core.graphics.ColorUtils @@ -14,7 +12,6 @@ import kotlin.math.roundToInt internal const val DEFAULT_SHADOW_COLOR = Color.BLACK internal const val DEFAULT_SHADOW_RADIUS = 10 -internal const val SHADOW_HEIGHT_DP = 20 internal const val DEFAULT_SHADOW_DISTANCE = 15f internal const val DEFAULT_SHADOW_ANGLE = 270f @@ -50,7 +47,7 @@ class BottomTabsContainer(context: Context, val bottomTabs: BottomTabs) : Shadow setTopOutLineColor(DEFAULT_TOP_OUTLINE_COLOR) this.topOutLineView.visibility = View.GONE - this.addView(linearLayout, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) + this.addView(linearLayout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) } override var shadowRadius: Float diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java index 1cf02f3022b..926e4590d60 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java @@ -21,7 +21,6 @@ public BottomTabsLayout(Context context) { @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { if (bottomTabsContainer != null && child != bottomTabsContainer) { - int indexOfChild = this.indexOfChild(bottomTabsContainer); super.addView(child, getChildCount() - 1, params); } else { super.addView(child, 0, params); diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt index c257e3bbd31..dcd9aad4728 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt @@ -7,6 +7,7 @@ import com.reactnativenavigation.options.SharedElementTransitionOptions import java.lang.reflect.ParameterizedType abstract class PropertyAnimatorCreator internal constructor(protected val from: View, protected val to: View) { + @Suppress("UNCHECKED_CAST") @CallSuper fun shouldAnimateProperty(): Boolean { val type = childClass @@ -21,6 +22,7 @@ abstract class PropertyAnimatorCreator internal constructor(protected protected open fun excludedViews() = emptyList>() abstract fun create(options: SharedElementTransitionOptions): Animator + @Suppress("UNCHECKED_CAST") private val childClass: Class get() = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt index 489a380fc9d..b0ad4c8fb12 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt @@ -4,7 +4,6 @@ import android.animation.Animator import android.animation.ObjectAnimator import android.graphics.Rect import android.view.View -import android.widget.ImageView import com.facebook.react.views.image.ReactImageView import com.reactnativenavigation.options.SharedElementTransitionOptions import com.reactnativenavigation.utils.ViewUtils diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt index a8fb61613c9..6eb09d74266 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.views.element.animators import android.animation.Animator import android.animation.ObjectAnimator -import android.animation.TypeEvaluator import android.graphics.PointF import android.graphics.Rect import android.view.View @@ -14,6 +13,7 @@ import com.reactnativenavigation.options.SharedElementTransitionOptions import com.reactnativenavigation.utils.ViewUtils import kotlin.math.max import kotlin.math.roundToInt +import android.animation.TypeEvaluator class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) { override fun shouldAnimateProperty(fromChild: ReactImageView, toChild: ReactImageView): Boolean { @@ -53,7 +53,7 @@ class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) { private val fromRotation = from.rotation diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java index 66a006aa9b6..b749f94fd8c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java @@ -9,9 +9,9 @@ public class TopTabsLayoutCreator { private Context context; - private List tabs; + private List> tabs; - public TopTabsLayoutCreator(Context context, List tabs) { + public TopTabsLayoutCreator(Context context, List> tabs) { this.context = context; this.tabs = tabs; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java index 5fac998175a..fb522417560 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java @@ -22,9 +22,9 @@ public class TopTabsViewPager extends ViewPager implements Component, ButtonController.OnClickListener { private static final int OFFSCREEN_PAGE_LIMIT = 99; - private List tabs; + private List> tabs; - public TopTabsViewPager(Context context, List tabs, TopTabsAdapter adapter) { + public TopTabsViewPager(Context context, List> tabs, TopTabsAdapter adapter) { super(context); this.tabs = tabs; initTabs(adapter); @@ -32,7 +32,7 @@ public TopTabsViewPager(Context context, List tabs, TopTabsAdapt private void initTabs(TopTabsAdapter adapter) { setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT); - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { addView(tab.getView(), new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); } setAdapter(adapter); @@ -45,7 +45,7 @@ public boolean isRendered() { } private boolean areAllTabsRendered() { - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { if (!tab.isRendered()) return false; } return true; @@ -61,13 +61,13 @@ public void onPress(ButtonOptions button) { } public void destroy() { - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { tab.destroy(); } } public boolean isCurrentView(View view) { - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { if (tab.getView() == view) { return true; } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java index 50b30e922ce..712f04404d1 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java @@ -1,17 +1,24 @@ package com.reactnativenavigation; +import static com.reactnativenavigation.utils.CollectionUtils.forEach; +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; -import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Color; import android.os.Handler; import android.os.Looper; -import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.CallSuper; +import androidx.appcompat.app.AppCompatActivity; +import androidx.coordinatorlayout.widget.CoordinatorLayout; + import com.reactnativenavigation.options.params.Bool; import com.reactnativenavigation.utils.Functions; import com.reactnativenavigation.utils.StatusBarUtils; @@ -33,18 +40,6 @@ import java.util.Arrays; -import androidx.annotation.CallSuper; -import androidx.appcompat.app.AppCompatActivity; -import androidx.coordinatorlayout.widget.CoordinatorLayout; - -import static com.reactnativenavigation.utils.CollectionUtils.*; -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import kotlin.Function; - @RunWith(RobolectricTestRunner.class) @Config(sdk = 28, application = TestApplication.class) public abstract class BaseTest { @@ -90,7 +85,7 @@ public ActivityController newActivityController return Robolectric.buildActivity(clazz); } - public void assertIsChild(ViewGroup parent, ViewController... children) { + public void assertIsChild(ViewGroup parent, ViewController... children) { forEach(Arrays.asList(children), c -> assertIsChild(parent, c.getView())); } @@ -100,7 +95,7 @@ public void assertIsChild(ViewGroup parent, View child) { assertThat(ViewUtils.isChildOf(parent, child)).isTrue(); } - public void assertNotChildOf(ViewGroup parent, ViewController... children) { + public void assertNotChildOf(ViewGroup parent, ViewController... children) { forEach(Arrays.asList(children), c -> assertNotChildOf(parent, c.getView())); } @@ -115,31 +110,31 @@ public void assertMatchParent(View view) { assertThat(view.getLayoutParams().height).isEqualTo(ViewGroup.LayoutParams.MATCH_PARENT); } - protected void disablePushAnimation(ViewController... controllers) { - for (ViewController controller : controllers) { + protected void disablePushAnimation(ViewController... controllers) { + for (ViewController controller : controllers) { controller.options.animations.push.enabled = new Bool(false); } } - protected void disablePopAnimation(ViewController... controllers) { - for (ViewController controller : controllers) { + protected void disablePopAnimation(ViewController... controllers) { + for (ViewController controller : controllers) { controller.options.animations.pop.enabled = new Bool(false); } } - protected void disableModalAnimations(ViewController... modals) { + protected void disableModalAnimations(ViewController... modals) { disableShowModalAnimation(modals); disableDismissModalAnimation(modals); } - protected void disableShowModalAnimation(ViewController... modals) { - for (ViewController modal : modals) { + protected void disableShowModalAnimation(ViewController... modals) { + for (ViewController modal : modals) { modal.options.animations.showModal.toggle(new Bool(false)); } } - protected void disableDismissModalAnimation(ViewController... modals) { - for (ViewController modal : modals) { + protected void disableDismissModalAnimation(ViewController... modals) { + for (ViewController modal : modals) { modal.options.animations.dismissModal.toggle(new Bool(false)); } } @@ -152,8 +147,8 @@ protected void dispatchOnGlobalLayout(View view) { view.getViewTreeObserver().dispatchOnGlobalLayout(); } - protected void addToParent(Context context, ViewController... controllers) { - for (ViewController controller : controllers) { + protected void addToParent(Context context, ViewController... controllers) { + for (ViewController controller : controllers) { new CoordinatorLayout(context).addView(controller.getView()); } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java b/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java index 700bbc05e1a..e5c5799e90c 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java @@ -5,6 +5,8 @@ import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; + import com.reactnativenavigation.mocks.TitleBarReactViewCreatorMock; import com.reactnativenavigation.mocks.TopBarBackgroundViewCreatorMock; import com.reactnativenavigation.mocks.TitleBarButtonCreatorMock; @@ -31,7 +33,7 @@ public class TestUtils { public static StackControllerBuilder newStackController(Activity activity) { TopBarController topBarController = new TopBarController() { @Override - protected TopBar createTopBar(Context context, StackLayout stackLayout) { + protected TopBar createTopBar(@NonNull Context context, @NonNull StackLayout stackLayout) { TopBar topBar = super.createTopBar(context, stackLayout); topBar.layout(0, 0, 1000, UiUtils.getTopBarHeight(context)); return topBar; @@ -45,7 +47,7 @@ protected TopBar createTopBar(Context context, StackLayout stackLayout) { .setInitialOptions(new Options()); } - public static void hideBackButton(ViewController viewController) { + public static void hideBackButton(ViewController viewController) { viewController.options.topBar.buttons.back.visible = new Bool(false); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java b/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java index 2729278ac83..a2f7b7faede 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java @@ -4,6 +4,8 @@ import android.view.MotionEvent; import android.view.ViewGroup; +import androidx.annotation.NonNull; + import com.reactnativenavigation.options.ButtonOptions; import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener; import com.reactnativenavigation.options.Options; @@ -71,7 +73,7 @@ public void dispatchTouchEventToJs(MotionEvent event) { } @Override - public void onPress(ButtonOptions button) { + public void onPress(@NonNull ButtonOptions button) { } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java index 136fcf8cc5c..ee7e154d81d 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java @@ -6,7 +6,6 @@ import com.reactnativenavigation.BaseTest; import com.reactnativenavigation.options.params.DontApplyColour; import com.reactnativenavigation.options.params.ReactPlatformColor; -import com.reactnativenavigation.utils.StatusBarUtils; import org.json.JSONArray; import org.json.JSONException; @@ -16,7 +15,6 @@ import org.mockito.Mockito; import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; import android.app.Activity; @@ -38,7 +36,6 @@ public void nullIsParsedAsNoColor() throws JSONException { @Test public void shouldParsePlatformColors() throws JSONException { - JSONObject json = new JSONObject(); JSONObject color = new JSONObject(); final JSONArray jsonArray = new JSONArray(); jsonArray.put("@color/colorPrimary"); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java index f224242a22e..ec884b22dbe 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java @@ -25,7 +25,7 @@ public void beforeEach() { @Test public void areRendered() { - Collection items = Arrays.asList( + Collection> items = Arrays.asList( renderedComponent(), renderedComponent(), renderedComponent() @@ -36,7 +36,7 @@ public void areRendered() { @Test public void areRendered_reduce() { - Collection items = Arrays.asList( + Collection> items = Arrays.asList( renderedComponent(), notRenderedComponent(), renderedComponent() @@ -45,14 +45,14 @@ public void areRendered_reduce() { } - private ViewController renderedComponent() { - ViewController mock = Mockito.mock(ViewController.class); + private ViewController renderedComponent() { + ViewController mock = Mockito.mock(ViewController.class); when(mock.isRendered()).then(__ -> true); return mock; } - private ViewController notRenderedComponent() { - ViewController mock = Mockito.mock(ViewController.class); + private ViewController notRenderedComponent() { + ViewController mock = Mockito.mock(ViewController.class); when(mock.isRendered()).then(__ -> false); return mock; } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java index ba199cbe842..a05cad934bf 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java @@ -12,7 +12,6 @@ import com.reactnativenavigation.options.Options; import com.reactnativenavigation.options.params.Colour; import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.NullThemeColour; import com.reactnativenavigation.options.params.ThemeColour; @@ -47,9 +46,9 @@ public class BottomTabPresenterTest extends BaseTest { private BottomTabPresenter uut; private BottomTabs bottomTabs; private List> tabs; - private ViewController child1; - private ViewController child2; - private ViewController child3; + private ViewController child1; + private ViewController child2; + private ViewController child3; private Activity activity; private ChildControllersRegistry childRegistry; diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java index 793ee9620d7..02e3c504599 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java @@ -49,7 +49,7 @@ public void attach_delegatesToStrategy() { @Test public void onTabSelected() { - ViewController tab = mock(ViewController.class); + ViewController tab = mock(ViewController.class); uut.onTabSelected(tab); verify(mode).onTabSelected(tab); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java index c80ae2b393e..bb1ef6cbe57 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java @@ -36,7 +36,6 @@ import com.reactnativenavigation.views.bottomtabs.BottomTabsContainer; import com.reactnativenavigation.views.bottomtabs.BottomTabsLayout; -import org.jetbrains.annotations.NotNull; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -50,7 +49,6 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout; -import static com.nhaarman.mockitokotlin2.OngoingStubbingKt.whenever; import static com.reactnativenavigation.TestUtils.hideBackButton; import static com.reactnativenavigation.utils.ObjectUtils.perform; import static org.assertj.core.api.Java6Assertions.assertThat; @@ -68,12 +66,12 @@ public class BottomTabsControllerTest extends BaseTest { private BottomTabsContainer bottomTabsContainer; private BottomTabsController uut; private final Options initialOptions = new Options(); - private ViewController child1; - private ViewController child2; - private ViewController child3; - private ViewController stackChild; + private ViewController child1; + private ViewController child2; + private ViewController child3; + private ViewController stackChild; private StackController child4; - private ViewController child5; + private ViewController child5; private final Options tabOptions = OptionHelper.createBottomTabOptions(); private final ImageLoader imageLoaderMock = ImageLoaderMock.mock(); private EventEmitter eventEmitter; @@ -125,7 +123,7 @@ public void setTabs_ThrowWhenMoreThan5() { @Test public void parentControllerIsSet() { uut = createBottomTabs(); - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { assertThat(tab.getParentController()).isEqualTo(uut); } } @@ -134,7 +132,7 @@ public void parentControllerIsSet() { public void setTabs_allChildViewsAreAttachedToHierarchy() { uut.onViewWillAppear(); assertThat(uut.getView().getChildCount()).isEqualTo(6); - for (ViewController child : uut.getChildControllers()) { + for (ViewController child : uut.getChildControllers()) { assertThat(child.getView().getParent()).isNotNull(); } } @@ -152,13 +150,13 @@ public void setTabs_firstChildIsVisibleOtherAreGone() { public void onTabSelected() { uut.ensureViewIsCreated(); assertThat(uut.getSelectedIndex()).isZero(); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.VISIBLE); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.VISIBLE); uut.onTabSelected(3, false); assertThat(uut.getSelectedIndex()).isEqualTo(3); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.INVISIBLE); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(3)).getView().getVisibility()).isEqualTo(View.VISIBLE); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.INVISIBLE); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(3)).getView().getVisibility()).isEqualTo(View.VISIBLE); verify(eventEmitter).emitBottomTabSelected(0, 3); } @@ -170,7 +168,7 @@ public void onTabReSelected() { uut.onTabSelected(0, true); assertThat(uut.getSelectedIndex()).isEqualTo(0); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getParent()).isNotNull(); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getParent()).isNotNull(); verify(eventEmitter).emitBottomTabSelected(0, 0); } @@ -185,7 +183,7 @@ public void handleBack_DelegatesToSelectedChild() { @Test public void applyChildOptions_bottomTabsOptionsAreClearedAfterApply() { - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); uut.setParentController(parent); child1.options.bottomTabsOptions.backgroundColor = new ThemeColour(new Colour(Color.RED)); @@ -456,7 +454,7 @@ private void createChildren() { when(child5.handleBack(any())).thenReturn(true); } - private StackController spyOnStack(ViewController initialChild) { + private StackController spyOnStack(ViewController initialChild) { StackController build = TestUtils.newStackController(activity) .setInitialOptions(tabOptions) .build(); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java index 0def85660d0..c4cb666303c 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java @@ -31,8 +31,8 @@ public abstract class AttachModeTest extends BaseTest { private Activity activity; private ChildControllersRegistry childRegistry; protected ViewGroup parent; - ViewController tab1; - ViewController tab2; + ViewController tab1; + ViewController tab2; List> tabs; protected Options options; protected BottomTabsPresenter presenter; @@ -69,18 +69,18 @@ public void attach_otherTabsAreInvisibleWhenAttached() { forEach(otherTabs(), t -> assertThat(t.getView().getVisibility()).isEqualTo(View.INVISIBLE)); } - ViewController[] otherTabs() { + ViewController[] otherTabs() { return filter(tabs, t -> t != initialTab()).toArray(new ViewController[0]); } - ViewController initialTab() { + ViewController initialTab() { return tabs.get(INITIAL_TAB); } private List> createTabs() { tab1 = new SimpleViewController(activity, childRegistry, "child1", new Options()); tab2 = spy(new SimpleViewController(activity, childRegistry, "child2", new Options())); - ViewController tab3 = new SimpleViewController(activity, childRegistry, "child3", new Options()); + ViewController tab3 = new SimpleViewController(activity, childRegistry, "child3", new Options()); return Arrays.asList(tab1, tab2, tab3); } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java index 6490dc8061b..e32434e973a 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java @@ -16,7 +16,7 @@ public class ChildControllerTest extends BaseTest { - private ChildController uut; + private ChildController uut; private ChildControllersRegistry childRegistry; private Presenter presenter; private Options resolvedOptions = new Options(); @@ -31,7 +31,7 @@ public Options resolveCurrentOptions() { return resolvedOptions; } }; - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); uut.setParentController(parent); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java index be7a6d627fb..6ba7b2266ef 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java @@ -15,8 +15,8 @@ public class ChildControllersRegistryTest extends BaseTest { private ChildControllersRegistry uut; - private ChildController child1; - private ChildController child2; + private ChildController child1; + private ChildController child2; @Override public void beforeEach() { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java index f02acdc4590..7b3cc465f42 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java @@ -40,11 +40,11 @@ public class ModalPresenterTest extends BaseTest { private static final String MODAL_ID_1 = "modalId1"; private static final String MODAL_ID_2 = "modalId2"; - private ChildController modal1; - private ChildController modal2; + private ChildController modal1; + private ChildController modal2; private ModalPresenter uut; private ModalAnimator animator; - private ViewController root; + private ViewController root; private CoordinatorLayout modalsLayout; @@ -287,7 +287,7 @@ public void dismissModal_rejectIfContentIsNull() { public void dismissModal_successIsReportedBeforeViewIsDestroyed() { disableModalAnimations(modal1); CommandListenerAdapter listener = Mockito.mock(CommandListenerAdapter.class); - ViewController modal = spy(modal1); + ViewController modal = spy(modal1); InOrder inOrder = inOrder(listener, modal); uut.showModal(modal, root, new CommandListenerAdapter()); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java index d52d37719c8..6644441b01d 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java @@ -41,16 +41,16 @@ public class ModalStackTest extends BaseTest { private static final String MODAL_ID_4 = "modalId4"; private ModalStack uut; - private ViewController modal1; - private ViewController modal2; - private ViewController modal3; - private ViewController modal4; + private ViewController modal1; + private ViewController modal2; + private ViewController modal3; + private ViewController modal4; private StackController stack; private Activity activity; private ChildControllersRegistry childRegistry; private ModalPresenter presenter; private ModalAnimator animator; - private ViewController root; + private ViewController root; private EventEmitter emitter; @Override @@ -321,7 +321,7 @@ public void handleBack_dismissModal() { @Test public void handleBack_ViewControllerTakesPrecedenceOverModal() { - ViewController backHandlingModal = spy(new SimpleViewController(activity, childRegistry, "stack", new Options()){ + ViewController backHandlingModal = spy(new SimpleViewController(activity, childRegistry, "stack", new Options()){ @Override public boolean handleBack(CommandListener listener) { return true; @@ -351,17 +351,17 @@ public void destroy() { verify(modal2).destroy(); } - private ViewController findModal(String id) { + private ViewController findModal(String id) { return uut.findControllerById(id); } - private void showModalsWithoutAnimation(ViewController... modals) { - for (ViewController modal : modals) { + private void showModalsWithoutAnimation(ViewController... modals) { + for (ViewController modal : modals) { showModalWithoutAnimation(modal); } } - private void showModalWithoutAnimation(ViewController modal) { + private void showModalWithoutAnimation(ViewController modal) { disableShowModalAnimation(modal); uut.showModal(modal, root, new CommandListenerAdapter()); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java index b9badb49983..6ea75842139 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java @@ -36,7 +36,6 @@ import com.reactnativenavigation.viewcontrollers.component.ComponentViewController; import com.reactnativenavigation.viewcontrollers.modal.ModalStack; import com.reactnativenavigation.viewcontrollers.overlay.OverlayManager; -import com.reactnativenavigation.viewcontrollers.parent.ParentController; import com.reactnativenavigation.viewcontrollers.stack.StackController; import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter; import com.reactnativenavigation.viewcontrollers.viewcontroller.RootPresenter; @@ -71,10 +70,10 @@ public class NavigatorTest extends BaseTest { private RootPresenter rootPresenter; private StackController parentController; private SimpleViewController child1; - private ViewController child2; - private ViewController child3; - private ViewController child4; - private ViewController child5; + private ViewController child2; + private ViewController child3; + private ViewController child4; + private ViewController child5; private final Options tabOptions = OptionHelper.createBottomTabOptions(); private ImageLoader imageLoaderMock; private ActivityController activityController; @@ -100,7 +99,7 @@ public void beforeEach() { uut = new Navigator(activity, childRegistry, modalStack, overlayManager, rootPresenter); activity.setNavigator(uut); - ViewController initialChild = new SimpleViewController(activity, childRegistry, "initialChild", Options.EMPTY); + ViewController initialChild = new SimpleViewController(activity, childRegistry, "initialChild", Options.EMPTY); parentController = newStack(initialChild); parentVisibilityListener = spy(new ViewController.ViewVisibilityListener() { @Override @@ -131,8 +130,8 @@ public boolean onViewDisappear(View view) { public void onConfigurationChange_shouldCallOnConfigurationChangedForModals() { Navigator spyUUT = spy(uut); SimpleViewController spyChild1 = spy(child1); - ViewController spyChild2 = spy(child2); - ViewController spyChild3 = spy(child3); + ViewController spyChild2 = spy(child2); + ViewController spyChild3 = spy(child3); spyUUT.setRoot(spyChild1, new CommandListenerAdapter(), reactInstanceManager); spyUUT.showModal(spyChild2, new CommandListenerAdapter()); @@ -147,8 +146,8 @@ public void onConfigurationChange_shouldCallOnConfigurationChangedForModals() { public void onConfigurationChange_shouldCallOnConfigurationChangedForOverlays() { Navigator spyUUT = spy(uut); SimpleViewController spyChild1 = spy(child1); - ViewController spyChild2 = spy(child2); - ViewController spyChild3 = spy(child3); + ViewController spyChild2 = spy(child2); + ViewController spyChild3 = spy(child3); spyUUT.setRoot(spyChild1, new CommandListenerAdapter(), reactInstanceManager); spyUUT.showOverlay(spyChild2, new CommandListenerAdapter()); @@ -198,8 +197,8 @@ public void shouldCallOverlaysOnHostResumeWhenHostResumes() { @Test public void shouldCallOverlaysChildrenOnViewDidAppearOnHostResume() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); - ViewController child3 = spy(this.child3); + ViewController child2 = spy(this.child2); + ViewController child3 = spy(this.child3); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showOverlay(child2, new CommandListenerAdapter()); @@ -220,7 +219,7 @@ public void shouldCallRootOnViewDidAppearWhenModalDisplayedOverContext(){ final Options overContextOptions = tabOptions.copy(); overContextOptions.modal =new ModalOptions(); overContextOptions.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext; - ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", + ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", overContextOptions)); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(overContextModal, new CommandListenerAdapter()); @@ -236,7 +235,7 @@ public void shouldCallRootOnViewDisappearWhenModalDisplayedOverContext(){ final Options overContextOptions = tabOptions.copy(); overContextOptions.modal =new ModalOptions(); overContextOptions.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext; - ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", + ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", overContextOptions)); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(overContextModal, new CommandListenerAdapter()); @@ -249,11 +248,11 @@ public void shouldCallRootOnViewDisappearWhenModalDisplayedOverContext(){ @Test public void shouldCallModalOnViewDisappearWhenModalDisplayedOverContextUnderneath(){ SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); + ViewController child2 = spy(this.child2); final Options overContextOptions = tabOptions.copy(); overContextOptions.modal =new ModalOptions(); overContextOptions.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext; - ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", + ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", overContextOptions)); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(overContextModal, new CommandListenerAdapter()); @@ -266,9 +265,9 @@ public void shouldCallModalOnViewDisappearWhenModalDisplayedOverContextUnderneat @Test public void shouldCallOverlaysAndModalsChildrenOnViewDidAppearOnHostResume() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); - ViewController child3 = spy(this.child3); - ViewController child4 = spy(this.child4); + ViewController child2 = spy(this.child2); + ViewController child3 = spy(this.child3); + ViewController child4 = spy(this.child4); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); @@ -296,7 +295,7 @@ public void shouldNotCallModalOnHostResumeWhenHostResumesAndNoModals() { @Test public void shouldCallModalPeekDidAppearWhenHostResumes() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); + ViewController child2 = spy(this.child2); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); uut.onHostResume(); @@ -325,7 +324,7 @@ public void shouldNotCallModalOnHostPauseWhenHostPausesAndNoModals() { @Test public void shouldCallModalPeekDidDisappearWhenHostPauses() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); + ViewController child2 = spy(this.child2); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); uut.onHostPause(); @@ -383,11 +382,11 @@ public void setRoot_ReplacesExistingChildControllerViews() { @Test public void setRoot_withWaitForRender() { - ViewController initialRoot = spy(child2); + ViewController initialRoot = spy(child2); uut.setRoot(initialRoot, new CommandListenerAdapter(), reactInstanceManager); child3.options.animations.setRoot.getEnter().waitForRender = new Bool(true); - ViewController secondRoot = spy(child3); + ViewController secondRoot = spy(child3); CommandListenerAdapter listener = spy(new CommandListenerAdapter()); uut.setRoot(secondRoot, listener, reactInstanceManager); @@ -553,7 +552,7 @@ public void setStackRoot() { public void handleBack_DelegatesToRoot() { assertThat(uut.handleBack(new CommandListenerAdapter())).isFalse(); - ViewController root = spy(child1); + ViewController root = spy(child1); uut.setRoot(root, new CommandListenerAdapter(), reactInstanceManager); when(root.handleBack(any(CommandListener.class))).thenReturn(true); assertThat(uut.handleBack(new CommandListenerAdapter())).isTrue(); @@ -562,7 +561,7 @@ public void handleBack_DelegatesToRoot() { @Test public void handleBack_modalTakePrecedenceOverRoot() { - ViewController root = spy(child1); + ViewController root = spy(child1); uut.setRoot(root, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); verify(root, times(0)).handleBack(new CommandListenerAdapter()); @@ -887,7 +886,7 @@ public void destroyViews() { } @NonNull - private StackController newStack(ViewController... children) { + private StackController newStack(ViewController... children) { StackController stack = TestUtils.newStackController(activity) .setChildren(children) .setChildRegistry(childRegistry) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt index 9f0fdc64216..9c9c8fd7e49 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt @@ -47,12 +47,12 @@ class RootPresenterTest : BaseTest() { root = object : SimpleViewController(activity, ChildControllersRegistry(), "child1", Options()) { override fun createView(): SimpleView { - return root1View; + return root1View } } root2 = object : SimpleViewController(activity, ChildControllersRegistry(), "child1", Options()) { override fun createView(): SimpleView { - return root2View; + return root2View } } setupWithAnimator(Mockito.spy(createAnimator())) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java index 86e862bc65e..5e2fe6401ef 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java @@ -41,8 +41,8 @@ public class ParentControllerTest extends BaseTest { private static final String INITIAL_TITLE = "initial title"; private Activity activity; private ChildControllersRegistry childRegistry; - private List children; - private ParentController uut; + private List> children; + private ParentController uut; private Presenter presenter; @Override @@ -54,10 +54,10 @@ public void beforeEach() { Options initialOptions = new Options(); initialOptions.topBar.title.text = new Text(INITIAL_TITLE); presenter = spy(new Presenter(activity, new Options())); - uut = spy(new ParentController(activity, childRegistry, "uut", presenter, initialOptions) { + uut = spy(new ParentController(activity, childRegistry, "uut", presenter, initialOptions) { @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { return children.get(0); } @@ -65,7 +65,7 @@ public ViewController getCurrentChild() { @Override public ViewGroup createView() { FrameLayout layout = new FrameLayout(activity); - for (ViewController child : children) { + for (ViewController child : children) { child.setParentController(this); layout.addView(child.getView()); } @@ -79,7 +79,7 @@ public void sendOnNavigationButtonPressed(String buttonId) { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return children; } }); @@ -89,10 +89,10 @@ public Collection getChildControllers() { public void onConfigurationChange_shouldCallConfigurationChangeForPresenterAndChildren() { children.add(spy(new SimpleViewController(activity, childRegistry, "child1", new Options()))); children.add(spy(new SimpleViewController(activity, childRegistry, "child2", new Options()))); - ParentController spyUUT = spy(uut); + ParentController spyUUT = spy(uut); spyUUT.onConfigurationChanged(mockConfiguration); verify(presenter).onConfigurationChanged(any(),any()); - for (ViewController controller : children) { + for (ViewController controller : children) { verify(controller).onConfigurationChanged(any()); } } @@ -158,7 +158,7 @@ public void findControllerById_Recursive() { @Test public void destroy_DestroysChildren() { - ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", new Options())); + ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", new Options())); children.add(child1); verify(child1, times(0)).destroy(); @@ -181,7 +181,7 @@ public void optionsAreClearedWhenChildIsAppeared() { public void mergeOptions_optionsAreMergedWhenChildAppears() { Options options = new Options(); options.topBar.title.text = new Text("new title"); - ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); + ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); children.add(child1); uut.ensureViewIsCreated(); @@ -197,7 +197,7 @@ public void mergeOptions_optionsAreMergedWhenChildAppears() { public void mergeOptions_initialParentOptionsAreNotMutatedWhenChildAppears() { Options options = new Options(); options.topBar.title.text = new Text("new title"); - ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); + ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); children.add(child1); uut.ensureViewIsCreated(); @@ -243,7 +243,7 @@ public void resolveCurrentOptions_withDefaultOptions() { Options defaultOptions = new Options(); Options currentOptions = spy(new Options()); - ParentController spy = spy(uut); + ParentController spy = spy(uut); Mockito.when(spy.resolveCurrentOptions()).thenReturn(currentOptions); spy.resolveCurrentOptions(defaultOptions); verify(currentOptions).withDefaultOptions(defaultOptions); @@ -263,7 +263,7 @@ public void getTopInset() { @Test public void getTopInsetForChild() { - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); when(parent.getTopInset(any())).thenReturn(123); uut.setParentController(parent); @@ -279,14 +279,14 @@ public void applyBottomInset() { @Test public void getBottomInsetForChild() { - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); when(parent.getBottomInset(any())).thenReturn(123); uut.setParentController(parent); assertThat(uut.getBottomInset(Mockito.mock(ViewController.class))).isEqualTo(123); } - private List createChildren() { + private List> createChildren() { return Arrays.asList( spy(new SimpleViewController(activity, childRegistry, "child1", new Options())), spy(new SimpleViewController(activity, childRegistry, "child2", new Options())) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java index f18e9c70cd9..1a5b6d709d9 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java @@ -46,11 +46,11 @@ public class SideMenuControllerTest extends BaseTest { private Activity activity; private ChildControllersRegistry childRegistry; private SideMenuPresenter presenter; - private ViewController left; - private ViewController right; - private ViewController center; - private ViewController child; - private ParentController parent; + private ViewController left; + private ViewController right; + private ViewController center; + private ViewController child; + private ParentController parent; private Options resolvedOptions; @Override @@ -118,12 +118,12 @@ public void getCurrentChild() { @Test public void onViewAppeared() { - ViewController left = spy(this.left); + ViewController left = spy(this.left); ViewGroup leftView = spy(left.getView()); when(left.findController(leftView)).thenReturn(left); Mockito.doReturn(leftView).when(left).getView(); - ViewController right = spy(this.right); + ViewController right = spy(this.right); ViewGroup rightView = spy(right.getView()); when(right.findController(rightView)).thenReturn(right); Mockito.doReturn(rightView).when(right).getView(); @@ -373,7 +373,7 @@ public void onMeasureChild_topInsetsAreApplied() { forEach(uut.getChildControllers(), c -> verify(c).applyTopInset()); } - private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1 opt) { + private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1, SideMenuOptions> opt) { Options options = new Options(); (side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(true); uut.mergeOptions(options); @@ -381,7 +381,7 @@ private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1 assertThat(opt.run(side).visible.isFalseOrUndefined()).isTrue(); } - private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1 opt) { + private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1, SideMenuOptions> opt) { Options options = new Options(); (side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(false); uut.mergeOptions(options); @@ -389,7 +389,7 @@ private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR assertThat(opt.run(side).visible.isTrue()).isFalse(); } - private int getGravity(ViewController side) { + private int getGravity(ViewController side) { return side == left ? Gravity.LEFT : Gravity.RIGHT; } @@ -433,7 +433,7 @@ private Activity createActivity() { return activity; } - private void setLeftRight(ViewController left, ViewController right) { + private void setLeftRight(ViewController left, ViewController right) { uut.setLeftController(left); uut.setRightController(right); left.setParentController(uut); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java index 3560507cb87..8642fcf0966 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java @@ -24,8 +24,8 @@ public class BackButtonHelperTest extends BaseTest { private BackButtonHelper uut; private StackController stack; - private ChildController child1; - private ChildController child2; + private ChildController child1; + private ChildController child2; @Override public void beforeEach() { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt index 7a98399eba9..080c9718372 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt @@ -3,9 +3,6 @@ package com.reactnativenavigation.viewcontrollers.stack import android.animation.AnimatorSet import android.animation.ObjectAnimator import android.app.Activity -import android.os.Looper -import android.view.View -import android.view.ViewGroup import android.widget.FrameLayout import com.nhaarman.mockitokotlin2.* import com.reactnativenavigation.BaseTest @@ -19,7 +16,6 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController import com.reactnativenavigation.views.element.TransitionAnimatorCreator import org.assertj.core.api.Java6Assertions.assertThat import org.junit.Test -import org.robolectric.Shadows class StackAnimatorTest : BaseTest() { private lateinit var uut: StackAnimator diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt index b9d6dde9363..c0d9dda3472 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt @@ -73,7 +73,7 @@ class StackControllerTest : BaseTest() { TypefaceLoaderMock(), RenderChecker(), Options() - ) + ) ) createChildren() uut = createStack() @@ -182,7 +182,7 @@ class StackControllerTest : BaseTest() { child2.options.topBar.buttons.left = ArrayList(setOf(TitleBarHelper.iconButton("someButton", "icon.png"))) uut.push(child2, CommandListenerAdapter()) ShadowLooper.idleMainLooper() - assertThat(topBarController.leftButtonCount).isOne(); + assertThat(topBarController.leftButtonCount).isOne() verify(topBarController.view, never()).setBackButton(any()) } @@ -564,7 +564,7 @@ class StackControllerTest : BaseTest() { val captor = argumentCaptor() verify(animator).pop(any(), any(), captor.capture(), any(), any()) val animator = captor.firstValue.animations.pop.content.exit - .getAnimation(mockView(activity)) + .getAnimation(mockView(activity)) assertThat((animator as AnimatorSet).childAnimations.first().duration).isEqualTo(123) } @@ -581,7 +581,7 @@ class StackControllerTest : BaseTest() { val captor = argumentCaptor() verify(animator).pop(any(), any(), captor.capture(), any(), any()) val animator = captor.firstValue.animations.pop.content.exit - .getAnimation(mockView(activity)) + .getAnimation(mockView(activity)) assertThat((animator as AnimatorSet).childAnimations.first().duration).isEqualTo(123) } @@ -990,8 +990,8 @@ class StackControllerTest : BaseTest() { @Test fun mergeChildOptions_updatesParentControllerWithNewOptions() { val uut = TestUtils.newStackController(activity) - .setId("stack") - .build() + .setId("stack") + .build() val parentController = mock>() uut.parentController = parentController uut.ensureViewIsCreated() @@ -1129,7 +1129,7 @@ class StackControllerTest : BaseTest() { private fun assertContainsOnlyId(vararg ids: String) { assertThat(uut.size()).isEqualTo(ids.size) assertThat(uut.childControllers).extracting(Extractor { obj: ViewController<*> -> obj.id } as Extractor, String>) - .containsOnly(*ids) + .containsOnly(*ids) } private fun createStack(): StackController { @@ -1147,14 +1147,14 @@ class StackControllerTest : BaseTest() { private fun createStackBuilder(id: String, children: List>): StackControllerBuilder { createTopBarController() return TestUtils.newStackController(activity) - .setEventEmitter(eventEmitter) - .setChildren(children) - .setId(id) - .setTopBarController(topBarController) - .setChildRegistry(childRegistry) - .setAnimator(animator) - .setStackPresenter(presenter) - .setBackButtonHelper(backButtonHelper) + .setEventEmitter(eventEmitter) + .setChildren(children) + .setId(id) + .setTopBarController(topBarController) + .setChildRegistry(childRegistry) + .setAnimator(animator) + .setStackPresenter(presenter) + .setBackButtonHelper(backButtonHelper) } private fun createTopBarController() { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt index 3418a9cd133..779d9b3b621 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt @@ -76,21 +76,21 @@ class StackPresenterTest : BaseTest() { iconResolver = IconResolverFake(activity) buttonCreator = TitleBarButtonCreatorMock() ogUut = StackPresenter( - activity, - titleViewCreator, - TopBarBackgroundViewCreatorMock(), - buttonCreator, - iconResolver, - typefaceLoader, - renderChecker, - Options() + activity, + titleViewCreator, + TopBarBackgroundViewCreatorMock(), + buttonCreator, + iconResolver, + typefaceLoader, + renderChecker, + Options() ) uut = spy(ogUut) createTopBarController() parent = TestUtils.newStackController(activity) - .setTopBarController(topBarController) - .setStackPresenter(uut) - .build() + .setTopBarController(topBarController) + .setStackPresenter(uut) + .build() childRegistry = ChildControllersRegistry() child = spy(SimpleViewController(activity, childRegistry, "child1", Options.EMPTY)) otherChild = spy(SimpleViewController(activity, childRegistry, "child1", Options.EMPTY)) @@ -768,9 +768,9 @@ class StackPresenterTest : BaseTest() { uut.setComponentsButtonController(child.view, rightController, leftController) uut.mergeChildOptions(mergeOptions, initialOptions, parent, child) - verify(rightController, never()).applyColor(any(), any()); - verify(leftController, never()).applyColor(any(), any()); - verify(leftController, never()).applyDisabledColor(any(), any()); + verify(rightController, never()).applyColor(any(), any()) + verify(leftController, never()).applyColor(any(), any()) + verify(leftController, never()).applyDisabledColor(any(), any()) verify(leftController, never()).applyDisabledColor(any(), any()) } @@ -837,7 +837,7 @@ class StackPresenterTest : BaseTest() { val rightCaptor = argumentCaptor>() val leftCaptor = argumentCaptor>() verify(topBarController).applyRightButtons(rightCaptor.capture()) - verify(topBarController).applyLeftButtons(leftCaptor.capture()); + verify(topBarController).applyLeftButtons(leftCaptor.capture()) assertThat(rightCaptor.firstValue.size).isOne() assertThat(leftCaptor.firstValue.size).isOne() } @@ -897,8 +897,8 @@ class StackPresenterTest : BaseTest() { val options = Options().apply { topBar.buttons.right = ArrayList(listOf(componentBtn1)) topBar.buttons.left = ArrayList(listOf(componentBtn2)) - topBar.animateLeftButtons = Bool(false); - topBar.animateRightButtons = Bool(true); + topBar.animateLeftButtons = Bool(false) + topBar.animateRightButtons = Bool(true) } uut.applyChildOptions(options, parent, child) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt index b8947f0cc87..fc0baeb6fa4 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt @@ -107,10 +107,10 @@ class TopBarControllerTest : BaseTest() { fun setLeftButtons_emptyButtonsListClearsLeftButton() { uut.applyLeftButtons(leftButton(leftButton)) uut.applyRightButtons(rightButtons(componentButton)!!) - assertThat(uut.leftButtonCount).isNotZero(); + assertThat(uut.leftButtonCount).isNotZero() uut.applyLeftButtons(emptyList()) uut.applyRightButtons(rightButtons(textButton1)!!) - assertThat(uut.leftButtonCount).isZero(); + assertThat(uut.leftButtonCount).isZero() } @Test @@ -142,7 +142,7 @@ class TopBarControllerTest : BaseTest() { uut.view.setBackButton(TitleBarHelper.createButtonController(activity, backButton)) assertThat(uut.view.navigationIcon).isNotNull() val initialButtons = leftButton(leftButton) - uut.applyLeftButtons(initialButtons!!) + uut.applyLeftButtons(initialButtons) uut.mergeLeftButtons(initialButtons, emptyList()) assertThat(uut.view.navigationIcon).isNull() } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java index d78f6643c69..2a591fc3f7b 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java @@ -44,7 +44,7 @@ public class TopTabsViewControllerTest extends BaseTest { private StackController stack; private TopTabsController uut; - private List tabControllers = new ArrayList<>(SIZE); + private List> tabControllers = new ArrayList<>(SIZE); private final Options options = new Options(); private TopTabsViewPager topTabsLayout; private Activity activity; @@ -73,7 +73,7 @@ public void beforeEach() { @NonNull private ArrayList createOptions() { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (int i = 0; i < SIZE; i++) { final Options options = new Options(); options.topTabOptions.title = new Text("Tab " + i); @@ -83,8 +83,8 @@ private ArrayList createOptions() { return result; } - private List createTabsControllers(Activity activity, List tabOptions) { - List tabControllers = new ArrayList<>(SIZE); + private List> createTabsControllers(Activity activity, List tabOptions) { + List> tabControllers = new ArrayList<>(SIZE); for (int i = 0; i < SIZE; i++) { ComponentViewController viewController = new ComponentViewController( activity, @@ -117,7 +117,7 @@ public void componentViewDestroyedOnDestroy() { verify(tab(topTabs, i), times(0)).destroy(); } uut.destroy(); - for (ViewController tabController : tabControllers) { + for (ViewController tabController : tabControllers) { verify(tabController, times(1)).destroy(); } } @@ -162,7 +162,7 @@ public void setOptionsOfInitialTab() { verify(tabControllers.get(0), times(1)).onViewWillAppear(); verify(tabControllers.get(1), times(0)).onViewWillAppear(); - ViewController comp = tabControllers.get(0); + ViewController comp = tabControllers.get(0); verify(uut, times(1)).applyChildOptions(any(Options.class), eq(comp)); } @@ -174,7 +174,7 @@ public void setOptionsWhenTabChanges() { tabControllers.get(1).ensureViewIsCreated(); uut.onViewWillAppear(); - ViewController currentTab = tab(0); + ViewController currentTab = tab(0); verify(uut, times(1)).applyChildOptions(any(Options.class), eq(currentTab)); assertThat(uut.options.topBar.title.text.get()).isEqualTo(createTabTopBarTitle(0)); @@ -208,7 +208,7 @@ public void appliesOptionsOnLayoutWhenVisible() { public void applyOptions_tabsAreRemovedAfterViewDisappears() { StackController stackController = TestUtils.newStackController(activity).build(); stackController.ensureViewIsCreated(); - ViewController first = new SimpleViewController(activity, childRegistry, "first", Options.EMPTY); + ViewController first = new SimpleViewController(activity, childRegistry, "first", Options.EMPTY); disablePushAnimation(first, uut); stackController.push(first, new CommandListenerAdapter()); stackController.push(uut, new CommandListenerAdapter()); @@ -241,7 +241,7 @@ private String createTabTopBarTitle(int i) { return "Title " + i; } - private ViewController tab(int index) { + private ViewController tab(int index) { return tabControllers.get(index); } } diff --git a/lib/src/components/Modal.tsx b/lib/src/components/Modal.tsx index 23ecc5e3422..8dc0a796032 100644 --- a/lib/src/components/Modal.tsx +++ b/lib/src/components/Modal.tsx @@ -1,7 +1,6 @@ import React from 'react'; -import { requireNativeComponent, ViewProps, StyleSheet, Dimensions } from 'react-native'; +import { requireNativeComponent, View, ViewProps, StyleSheet, Dimensions } from 'react-native'; import { AnimationOptions, ViewAnimationOptions } from 'react-native-navigation/interfaces/Options'; -import { View } from 'react-native-ui-lib'; export interface RNNModalProps extends ViewProps { visible: boolean; transparent: boolean; From eca97bbfb110544e5f9c1541fc2babfb72d75f03 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 6 Oct 2021 15:22:29 +0300 Subject: [PATCH 34/39] AGP 7 --- playground/android/build.gradle | 2 +- playground/android/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playground/android/build.gradle b/playground/android/build.gradle index aac8ea5b657..a20063e1e8e 100644 --- a/playground/android/build.gradle +++ b/playground/android/build.gradle @@ -14,7 +14,7 @@ buildscript { } dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - classpath("com.android.tools.build:gradle:4.2.2") + classpath('com.android.tools.build:gradle:7.0.2') // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/playground/android/gradle/wrapper/gradle-wrapper.properties b/playground/android/gradle/wrapper/gradle-wrapper.properties index aab27c072b2..10f126bc99c 100644 --- a/playground/android/gradle/wrapper/gradle-wrapper.properties +++ b/playground/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip From 5b7279bd38d6b88ed2a0f3478c9bfac4fd1f31a1 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 6 Oct 2021 15:22:51 +0300 Subject: [PATCH 35/39] remove kotlin exts --- lib/android/app/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/android/app/build.gradle b/lib/android/app/build.gradle index 5a53040efcf..30267749385 100644 --- a/lib/android/app/build.gradle +++ b/lib/android/app/build.gradle @@ -2,7 +2,6 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' def safeExtGet(prop, fallback) { rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback @@ -28,8 +27,6 @@ android { defaultConfig { minSdkVersion safeExtGetFallbackLowerBound('minSdkVersion', DEFAULT_MIN_SDK_VERSION) targetSdkVersion safeExtGetFallbackLowerBound('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) - versionCode 1 - versionName "1.0" } buildTypes { release { From 143be6e093ac2263abdb8a82b241ea3f72f7b8bc Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 6 Oct 2021 15:23:07 +0300 Subject: [PATCH 36/39] fix deprecations --- .../react/modal/ModalContentLayout.kt | 2 +- .../react/modal/ModalViewManager.kt | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt index da7d5b1b4f9..b70d3e13c52 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt @@ -26,7 +26,7 @@ class ModalContentLayout(context: Context?) : ReactViewGroup(context), RootView{ hasAdjustedSize = false val viewTag = getChildAt(0).id val reactContext: ReactContext = this.getReactContext() - reactContext.runOnNativeModulesQueueThread(object : GuardedRunnable(reactContext) { + reactContext.runOnNativeModulesQueueThread(object : GuardedRunnable(reactContext.exceptionHandler) { override fun runGuarded() { val uiManager = this@ModalContentLayout.getReactContext().getNativeModule( UIManagerModule::class.java diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt index 23a93c54060..cad2373e2a3 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt @@ -1,7 +1,10 @@ package com.reactnativenavigation.react.modal import android.content.Context +import android.graphics.Insets import android.graphics.Point +import android.os.Build +import android.view.WindowInsets import android.view.WindowManager import com.facebook.infer.annotation.Assertions import com.facebook.react.bridge.ReactContext @@ -116,7 +119,24 @@ private fun getModalHostSize(context: Context): Point { // getCurrentSizeRange will return the min and max width and height that the window can be display.getCurrentSizeRange(MIN_POINT, MAX_POINT) // getSize will return the dimensions of the screen in its current orientation - display.getSize(SIZE_POINT) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val metrics = wm.currentWindowMetrics + val bounds = wm.currentWindowMetrics.bounds + val windowInsets: WindowInsets = metrics.windowInsets + val insets: Insets = windowInsets.getInsetsIgnoringVisibility( + WindowInsets.Type.navigationBars() + or WindowInsets.Type.displayCutout() + ) + + val insetsWidth: Int = insets.right + insets.left + val insetsHeight: Int = insets.top + insets.bottom + + SIZE_POINT.set(bounds.width() - insetsWidth, bounds.height() - insetsHeight) + + } else { + display.getSize(SIZE_POINT) + } val attrs = intArrayOf(android.R.attr.windowFullscreen) val theme = context.theme val ta = theme.obtainStyledAttributes(attrs) From 35fe09732266b56f63f3788d3816f896ef400c96 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Wed, 6 Oct 2021 15:23:27 +0300 Subject: [PATCH 37/39] update reanimated for rn66 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d919f2dfd3..01e4e2b4bd9 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "react-native": "0.66.0", "react-native-fast-image": "^8.5.11", "react-native-gesture-handler": "^1.10.3", - "react-native-reanimated": "^1.13.3", + "react-native-reanimated": "2.3.0-beta.2", "react-native-redash": "14.2.4", "react-native-ui-lib": "5.11.0", "react-redux": "5.x.x", From 59496d331e7c379e6d75b92002c30375f2d0d956 Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Thu, 7 Oct 2021 08:32:55 +0300 Subject: [PATCH 38/39] upgrade reanimated --- babel.config.js | 1 + .../playground/MainApplication.java | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/babel.config.js b/babel.config.js index c1d044b7c29..7d688a04fb7 100644 --- a/babel.config.js +++ b/babel.config.js @@ -3,6 +3,7 @@ module.exports = function (api) { return { presets: ['module:metro-react-native-babel-preset'], plugins: [ + 'react-native-reanimated/plugin', '@babel/plugin-proposal-export-namespace-from', '@babel/plugin-proposal-export-default-from', ], diff --git a/playground/android/app/src/main/java/com/reactnativenavigation/playground/MainApplication.java b/playground/android/app/src/main/java/com/reactnativenavigation/playground/MainApplication.java index bad653f3f50..1240c92f8c6 100644 --- a/playground/android/app/src/main/java/com/reactnativenavigation/playground/MainApplication.java +++ b/playground/android/app/src/main/java/com/reactnativenavigation/playground/MainApplication.java @@ -1,11 +1,15 @@ package com.reactnativenavigation.playground; +import androidx.annotation.Nullable; + import com.facebook.react.PackageList; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.JSIModulePackage; import com.reactnativenavigation.NavigationApplication; import com.reactnativenavigation.react.NavigationPackage; import com.reactnativenavigation.react.NavigationReactNativeHost; +import com.swmansion.reanimated.ReanimatedJSIModulePackage; import java.util.ArrayList; import java.util.List; @@ -14,6 +18,11 @@ public class MainApplication extends NavigationApplication { private final ReactNativeHost mReactNativeHost = new NavigationReactNativeHost(this) { + @Override + protected JSIModulePackage getJSIModulePackage() { + return new ReanimatedJSIModulePackage(); + } + @Override protected String getJSMainModuleName() { return "index"; From 35fad790f17a019604c7704c297dae00c1a15e4f Mon Sep 17 00:00:00 2001 From: Ward Abbass Date: Thu, 7 Oct 2021 09:10:10 +0300 Subject: [PATCH 39/39] fix release android builds --- playground/android/app/build.gradle | 2 +- playground/android/build.gradle | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/playground/android/app/build.gradle b/playground/android/app/build.gradle index c9d8ca3d331..f616a629a40 100644 --- a/playground/android/app/build.gradle +++ b/playground/android/app/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.google.android.material:material:1.0.0' + implementation 'com.google.android.material:material:1.4.0' //noinspection GradleDynamicVersion implementation 'com.facebook.react:react-native:+' diff --git a/playground/android/build.gradle b/playground/android/build.gradle index a20063e1e8e..363d0507598 100644 --- a/playground/android/build.gradle +++ b/playground/android/build.gradle @@ -5,7 +5,22 @@ buildscript { kotlinVersion = "1.5.31" RNNKotlinVersion = kotlinVersion detoxKotlinVersion = kotlinVersion + compileSdkVersion = 30 + buildToolsVersion = "30.0.2" + minSdkVersion = 21 + targetSdkVersion = 30 } + subprojects { + afterEvaluate {project -> + if (project.hasProperty("android")) { + android { + compileSdkVersion compileSdkVersion + buildToolsVersion "$buildToolsVersion" + } + } + } + } + repositories { google()