diff --git a/android/app/BUCK b/android/app/_BUCK similarity index 95% rename from android/app/BUCK rename to android/app/_BUCK index a80721d770d..04aff04acb8 100644 --- a/android/app/BUCK +++ b/android/app/_BUCK @@ -35,12 +35,12 @@ android_library( android_build_config( name = "build_config", - package = "com.rainbow", + package = "me.rainbow", ) android_resource( name = "res", - package = "com.rainbow", + package = "me.rainbow", res = "src/main/res", ) diff --git a/android/app/build.gradle b/android/app/build.gradle index 7a996d8df86..f26177f3868 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -18,6 +18,9 @@ import com.android.build.OutputFile * // the entry file for bundle generation * entryFile: "index.android.js", * + * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format + * bundleCommand: "ram-bundle", + * * // whether to bundle JS and assets in debug mode * bundleInDebug: false, * @@ -73,13 +76,15 @@ import com.android.build.OutputFile */ project.ext.react = [ - entryFile: "index.js" + entryFile: "index.js", + enableHermes: true, // clean and rebuild if changing ] apply from: "../../node_modules/react-native/react.gradle" apply from: "../../node_modules/@sentry/react-native/sentry.gradle" apply from: "../../node_modules/react-native-code-push/android/codepush.gradle" + /** * Set this to true to create two separate APKs instead of one: * - An APK that only works on ARM devices @@ -95,20 +100,46 @@ def enableSeparateBuildPerCPUArchitecture = false */ def enableProguardInReleaseBuilds = false +/** + * The preferred build flavor of JavaScriptCore. + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +/** + * Whether to enable the Hermes VM. + * + * This should be set on project.ext.react and mirrored here. If it is not set + * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode + * and the benefits of using Hermes will therefore be sharply reduced. + */ +def enableHermes = project.ext.react.get("enableHermes", false); + android { compileSdkVersion rootProject.ext.compileSdkVersion - + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { - applicationId "com.rainbow" + applicationId "me.rainbow" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" + missingDimensionStrategy 'react-native-camera', 'general' + renderscriptTargetApi 23 + renderscriptSupportModeEnabled true + multiDexEnabled true } splits { abi { @@ -118,61 +149,64 @@ android { include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } } - buildTypes { + signingConfigs { debug { - applicationIdSuffix ".debug" - // Note: CodePush updates should not be tested in Debug mode as they are overriden by the RN packager. However, because CodePush checks for updates in all modes, we must supply a key. - buildConfigField "String", "CODEPUSH_KEY", "" + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' } - - releaseStaging { - applicationIdSuffix ".staging" - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - buildConfigField "String", "CODEPUSH_KEY", "" + } + buildTypes { + debug { + signingConfig signingConfigs.debug } - release { + // Caution! In production, you need to generate your own keystore file. + // see https://facebook.github.io/react-native/docs/signed-apk-android. + signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - buildConfigField "String", "CODEPUSH_KEY", "" } } + + packagingOptions { + pickFirst "lib/armeabi-v7a/libc++_shared.so" + pickFirst "lib/arm64-v8a/libc++_shared.so" + pickFirst "lib/x86/libc++_shared.so" + pickFirst "lib/x86_64/libc++_shared.so" + } + + // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> // For each separate APK per architecture, set a unique version code as described here: - // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits - def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4] + // https://developer.android.com/studio/build/configure-apk-splits.html + def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } + } } } dependencies { - implementation project(':react-native-text-input-mask') - implementation project(':react-native-safe-area-context') - implementation project(':@segment_analytics-react-native') - implementation project(':@staltz_react-native-tcp') - implementation project(':@react-native-community_blur') - implementation project(':@react-native-community_netinfo') - implementation project(':@react-native-community_masked-view') - implementation project(':react-native-camera') - compile project(':react-native-device-info') - compile project(':react-native-screens') - compile project(':react-native-version-number') - compile project(':react-native-matomo') - compile project(':react-native-blur') - compile project(':react-native-languages') - compile project(':react-native-reanimated') - compile project(':react-native-code-push') - compile fileTree(dir: "libs", include: ["*.jar"]) - compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" - compile "com.facebook.react:react-native:+" // From node_modules + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation "com.facebook.react:react-native:+" // From node_modules + implementation 'androidx.appcompat:appcompat:1.1.0-rc01' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02' + + if (enableHermes) { + def hermesPath = "../../node_modules/hermes-engine/android/"; + debugImplementation files(hermesPath + "hermes-debug.aar") + releaseImplementation files(hermesPath + "hermes-release.aar") + } else { + implementation jscFlavor + } } // Run this once to be able to run the application with BUCK @@ -181,3 +215,8 @@ task copyDownloadableDepsToLibs(type: Copy) { from configurations.compile into 'libs' } + +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) +apply plugin: 'com.google.gms.google-services' + + diff --git a/android/app/debug.keystore b/android/app/debug.keystore new file mode 100644 index 00000000000..364e105ed39 Binary files /dev/null and b/android/app/debug.keystore differ diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 00000000000..288daba124e --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,45 @@ +{ + "project_info": { + "project_number": "401822667691", + "firebase_url": "https://rainbow-a485e.firebaseio.com", + "project_id": "rainbow-a485e", + "storage_bucket": "rainbow-a485e.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:401822667691:android:c03bb0d490f8efd3", + "android_client_info": { + "package_name": "me.rainbow" + } + }, + "oauth_client": [ + { + "client_id": "401822667691-0lh31s28po2q1jevo849lhcm57pl1oa8.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCtAokiK5mb_KJwdRbR6RP6-vuWIHvKcfo" + } + ], + "services": { + "analytics_service": { + "status": 2, + "analytics_property": { + "tracking_id": "UA-78554584-1" + } + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index a92fa177ee4..11b025724a3 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -8,10 +8,3 @@ # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index e2f3ff95d59..00000000000 --- a/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/android/app/src/debug/res/mipmap-hdpi/ic_launcher.png b/android/app/src/debug/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index fc613a42203..00000000000 Binary files a/android/app/src/debug/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index fc613a42203..00000000000 Binary files a/android/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-ldpi/ic_launcher.png b/android/app/src/debug/res/mipmap-ldpi/ic_launcher.png deleted file mode 100644 index 6526854d978..00000000000 Binary files a/android/app/src/debug/res/mipmap-ldpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-ldpi/ic_launcher_round.png b/android/app/src/debug/res/mipmap-ldpi/ic_launcher_round.png deleted file mode 100644 index 6526854d978..00000000000 Binary files a/android/app/src/debug/res/mipmap-ldpi/ic_launcher_round.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-mdpi/ic_launcher.png b/android/app/src/debug/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 557099ac114..00000000000 Binary files a/android/app/src/debug/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 557099ac114..00000000000 Binary files a/android/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 47ba7b227e4..00000000000 Binary files a/android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 47ba7b227e4..00000000000 Binary files a/android/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 800995ec243..00000000000 Binary files a/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 800995ec243..00000000000 Binary files a/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 3d3dcaed9b3..00000000000 Binary files a/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 3d3dcaed9b3..00000000000 Binary files a/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 839c88637da..e99b697153d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="me.rainbow"> @@ -9,7 +9,9 @@ android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:usesCleartextTraffic="true" + > getPackages() { - return Arrays.asList( - new MainReactPackage(), - new RNTextInputMaskPackage(), - new SafeAreaContextPackage(), - new RNCMaskedViewPackage(), - new RNTextInputMaskPackage(), - new RNAnalyticsPackage(), - new BlurViewPackage(), - new NetInfoPackage(), - new RNCameraPackage(), - new RNDeviceInfo(), - new RNScreensPackage(), - new RNVersionNumberPackage(), - new PiwikPackage(), - new BlurViewPackage(), - new RNLanguagesPackage(), - new ReanimatedPackage(), - new CodePush(BuildConfig.CODEPUSH_KEY, getApplicationContext(), BuildConfig.DEBUG), - new TcpSocketsModule() - ); - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - } -} diff --git a/android/app/src/main/java/me/rainbow/MainActivity.java b/android/app/src/main/java/me/rainbow/MainActivity.java new file mode 100644 index 00000000000..0ca6bf710fe --- /dev/null +++ b/android/app/src/main/java/me/rainbow/MainActivity.java @@ -0,0 +1,28 @@ +package me.rainbow; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; +import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; + +public class MainActivity extends ReactActivity { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "Rainbow"; + } + + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegate(this, getMainComponentName()) { + @Override + protected ReactRootView createRootView() { + return new RNGestureHandlerEnabledRootView(MainActivity.this); + } + }; + } +} diff --git a/android/app/src/main/java/me/rainbow/MainApplication.java b/android/app/src/main/java/me/rainbow/MainApplication.java new file mode 100644 index 00000000000..e184e21f77f --- /dev/null +++ b/android/app/src/main/java/me/rainbow/MainApplication.java @@ -0,0 +1,81 @@ +package me.rainbow; + +import android.app.Application; +import android.content.Context; +import com.facebook.react.PackageList; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.soloader.SoLoader; +import java.lang.reflect.InvocationTargetException; +import java.util.List; +import com.microsoft.codepush.react.CodePush; + + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = + new ReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages; + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + + @Override + protected String getJSBundleFile() { + return CodePush.getJSBundleFile(); + } + }; + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + initializeFlipper(this); // Remove this line if you don't want Flipper enabled + } + + /** + * Loads Flipper in React Native templates. + * + * @param context + */ + private static void initializeFlipper(Context context) { + if (BuildConfig.DEBUG) { + try { + /* + We use reflection here to pick up the class that initializes Flipper, + since Flipper library is not available in release mode + */ + Class aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper"); + aClass.getMethod("initializeFlipper", Context.class).invoke(null, context); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } +} diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 1ff997b074f..f8d2026bcf9 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ Rainbow + DeploymentKey diff --git a/android/build.gradle b/android/build.gradle index 3a1d305e5ba..d475173bb4c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,15 +6,14 @@ buildscript { minSdkVersion = 16 compileSdkVersion = 28 targetSdkVersion = 28 - supportLibVersion = "28.0.0" } repositories { google() jcenter() } dependencies { - classpath("com.android.tools.build:gradle:3.4.0") - + classpath("com.android.tools.build:gradle:3.4.2") + classpath 'com.google.gms:google-services:4.3.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -22,12 +21,21 @@ buildscript { allprojects { repositories { - mavenLocal() google() + mavenLocal() jcenter() + maven { + url 'https://maven.google.com' + } maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url "$rootDir/../node_modules/react-native/android" + url("$rootDir/../node_modules/react-native/android") } + maven { + // Android JSC is installed from npm + url("$rootDir/../node_modules/jsc-android/dist") + } + + maven { url 'https://jitpack.io' } } -} +} \ No newline at end of file diff --git a/android/gradle.properties b/android/gradle.properties index 1fd964e90b1..027ef9db8a3 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -17,4 +17,5 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -android.useDeprecatedNdk=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index ee69dd68d1a..e0c4de36ddd 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew index 4d4f3fb1db5..b0d6d0ab5de 100755 --- a/android/gradlew +++ b/android/gradlew @@ -1,5 +1,6 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh +# # Copyright 2015 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,20 +22,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='"-Xmx64m" "-Xms64m"' +# 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 @@ -45,6 +64,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -55,31 +75,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# 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\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -105,7 +105,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 @@ -129,6 +129,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -169,11 +170,19 @@ if $cygwin ; then 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" + +# 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" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat index be5e58a3cae..15e1ee37a70 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -24,14 +24,14 @@ @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="-Xmx64m" "-Xms64m" - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@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 @@ -62,10 +62,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@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. @@ -76,11 +75,6 @@ set _SKIP=2 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 diff --git a/android/settings.gradle b/android/settings.gradle index 51255462cdc..9843edfa8b6 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,37 +1,3 @@ -rootProject.name = 'Rainbow' -include ':react-native-text-input-mask' -project(':react-native-text-input-mask').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-text-input-mask/android') -include ':react-native-safe-area-context' -project(':react-native-safe-area-context').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-safe-area-context/android') -include ':@react-native-community_masked-view' -project(':@react-native-community_masked-view').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/masked-view/android') -include ':react-native-text-input-mask' -project(':react-native-text-input-mask').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-text-input-mask/android') -include ':@segment_analytics-react-native' -project(':@segment_analytics-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/@segment/analytics-react-native/android') -include ':@staltz_react-native-tcp' -project(':@staltz_react-native-tcp').projectDir = new File(rootProject.projectDir, '../node_modules/@staltz/react-native-tcp/android') -include ':@react-native-community_blur' -project(':@react-native-community_blur').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/blur/android') -include ':@react-native-community_netinfo' -project(':@react-native-community_netinfo').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/netinfo/android') -include ':react-native-camera' -project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') -include ':react-native-device-info' -project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') -include ':react-native-screens' -project(':react-native-screens').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-screens/android') -include ':react-native-version-number' -project(':react-native-version-number').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-version-number/android') -include ':react-native-matomo' -project(':react-native-matomo').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-matomo/android') -include ':react-native-blur' -project(':react-native-blur').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-blur/android') -include ':react-native-languages' -project(':react-native-languages').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-languages/android') -include ':react-native-reanimated' -project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/android') -include ':react-native-code-push' -project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app') - +rootProject.name = 'rainbow' +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' diff --git a/ios/Podfile b/ios/Podfile index 20b322235c7..ca3ad657088 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -35,9 +35,11 @@ target 'Rainbow' do pod 'ReactCommon/callinvoker', :path => "../node_modules/react-native/ReactCommon" pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' + pod 'FLAnimatedImage' pod 'libwebp' pod 'CodePush', :path => '../node_modules/react-native-code-push' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 50d55b9f883..b3333185d01 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -4,7 +4,7 @@ PODS: - boost-for-react-native (1.63.0) - BVLinearGradient (2.5.6): - React - - CodePush (5.7.0): + - CodePush (1000.0.0): - Base64 (~> 1.1) - JWT (~> 3.0.0-beta.7) - React @@ -81,27 +81,27 @@ PODS: - GoogleUtilities/Network (~> 6.0) - "GoogleUtilities/NSData+zlib (~> 6.0)" - nanopb (= 0.3.9011) - - GoogleDataTransport (3.2.0) - - GoogleDataTransportCCTSupport (1.2.3): - - GoogleDataTransport (~> 3.2) + - GoogleDataTransport (3.3.0) + - GoogleDataTransportCCTSupport (1.3.0): + - GoogleDataTransport (~> 3.3) - nanopb (~> 0.3.901) - - GoogleUtilities/AppDelegateSwizzler (6.4.0): + - GoogleUtilities/AppDelegateSwizzler (6.5.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (6.4.0) - - GoogleUtilities/Logger (6.4.0): + - GoogleUtilities/Environment (6.5.0) + - GoogleUtilities/Logger (6.5.0): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (6.4.0): + - GoogleUtilities/MethodSwizzler (6.5.0): - GoogleUtilities/Logger - - GoogleUtilities/Network (6.4.0): + - GoogleUtilities/Network (6.5.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (6.4.0)" - - GoogleUtilities/Reachability (6.4.0): + - "GoogleUtilities/NSData+zlib (6.5.0)" + - GoogleUtilities/Reachability (6.5.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (6.4.0): + - GoogleUtilities/UserDefaults (6.5.0): - GoogleUtilities/Logger - JWT (3.0.0-beta.12): - Base64 (~> 1.1.2) @@ -295,7 +295,7 @@ PODS: - React - react-native-mail (4.1.0): - React - - react-native-netinfo (5.3.2): + - react-native-netinfo (5.3.3): - React - react-native-randombytes (3.5.3): - React @@ -310,6 +310,8 @@ PODS: - React - react-native-version-number (0.3.6): - React + - react-native-viewpager (3.3.0): + - React - React-RCTActionSheet (0.62.0-rc.1): - React-Core/RCTActionSheetHeaders (= 0.62.0-rc.1) - React-RCTAnimation (0.62.0-rc.1): @@ -374,7 +376,7 @@ PODS: - RNAnalytics (1.1.0): - Analytics - React - - RNCAsyncStorage (1.6.2): + - RNCAsyncStorage (1.7.1): - React - RNCMaskedView (0.1.5): - React @@ -399,20 +401,20 @@ PODS: - Firebase/Messaging (~> 6.13.0) - React - RNFBApp - - RNGestureHandler (1.5.2): + - RNGestureHandler (1.5.3): - React - RNInputMask (4.1.0) - RNKeychain (4.0.3): - React - RNLanguages (3.0.2): - React - - RNOS (1.1.0): + - RNOS (1.2.8): - React - RNReactNativeHapticFeedback (1.8.2): - React - - RNReanimated (1.6.0): + - RNReanimated (1.7.0): - React - - RNScreens (2.0.0-alpha.24): + - RNScreens (2.0.0-alpha.25): - React - RNSentry (1.2.1): - React @@ -470,6 +472,7 @@ DEPENDENCIES: - react-native-text-input-mask (from `../node_modules/react-native-text-input-mask`) - react-native-udp (from `../node_modules/react-native-udp`) - react-native-version-number (from `../node_modules/react-native-version-number`) + - "react-native-viewpager (from `../node_modules/@react-native-community/viewpager`)" - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) @@ -589,6 +592,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-udp" react-native-version-number: :path: "../node_modules/react-native-version-number" + react-native-viewpager: + :path: "../node_modules/@react-native-community/viewpager" React-RCTActionSheet: :path: "../node_modules/react-native/Libraries/ActionSheetIOS" React-RCTAnimation: @@ -665,7 +670,7 @@ SPEC CHECKSUMS: Base64: cecfb41a004124895a7bcee567a89bae5a89d49b boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 - CodePush: d2e54ad42df82a8db65b2d23d8191b950ba945e1 + CodePush: 94a4a4e71ed30793296632f7024a74fc53d6bccf Crashlytics: 07fb167b1694128c1c9a5a5cc319b0e9c3ca0933 DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 Fabric: f988e33c97f08930a413e08123064d2e5f68d655 @@ -683,9 +688,9 @@ SPEC CHECKSUMS: Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51 glog: 1f3da668190260b06b429bb211bfbee5cd790c28 GoogleAppMeasurement: dfe55efa543e899d906309eaaac6ca26d249862f - GoogleDataTransport: 8e9b210c97d55fbff306cc5468ff91b9cb32dcf5 - GoogleDataTransportCCTSupport: 202d7cdf9c4a7d81a2bb7f7e7e1ba6faa421b1f2 - GoogleUtilities: 29bd0d8f850efbd28cff6d99e8b7da1f8d236bcf + GoogleDataTransport: 574a983e829327d7c18f2627f65d9e80164ea8a4 + GoogleDataTransportCCTSupport: cad3cd6cdbdbad6b5c2c9206ec413402755faaaa + GoogleUtilities: f8de7ddf8c706f58e9b405d53e38bbdaa2731e5a JWT: 9b5c05abbcc1a0e69c3c91e1655b3387fc7e581d libwebp: 057912d6d0abfb6357d8bb05c0ea470301f5d61e nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd @@ -702,13 +707,14 @@ SPEC CHECKSUMS: react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c react-native-camera: 1ba3e7f2375a6b44ae09ce9be70268e0b225bc10 react-native-mail: a864fb211feaa5845c6c478a3266de725afdce89 - react-native-netinfo: 817823a90f13ced48413875c0820df04c3aae28d + react-native-netinfo: 8884d510fe67349940b4399c01db3e3591c922aa react-native-randombytes: 3638d24759d67c68f6ccba60c52a7a8a8faa6a23 react-native-safe-area-context: 13004a45f3021328fdd9ee1f987c3131fb65928d react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865 react-native-text-input-mask: 07227297075f9653315f43b0424d596423a01736 react-native-udp: ff9d13e523f2b58e6bc5d4d32321ac60671b5dc9 react-native-version-number: b415bbec6a13f2df62bf978e85bc0d699462f37f + react-native-viewpager: a7b438ca32c57b2614ece2a123e7fe116f743131 React-RCTActionSheet: a9a397cdf75149175eab539e536eeb42518f529c React-RCTAnimation: 3fddf9e5dc82ea620c1c44b4206149688b43e054 React-RCTBlob: 245f8f0b4578bbecff5e99062f8e2db580218434 @@ -721,7 +727,7 @@ SPEC CHECKSUMS: ReactCommon: 13c3473a975e73db91b1999e0d6d89c62400785d ReactNativePermissions: 7cfad56d13c8961cd2a1005b4955b1400c79ef3e RNAnalytics: 35a54cb740c472a0a6a3de765176b82cccc2d1ef - RNCAsyncStorage: 60a80e72d95bf02a01cace55d3697d9724f0d77f + RNCAsyncStorage: 44395cb9c7c1523104c2b499eb426ef7aff82bca RNCMaskedView: dd13f9f7b146a9ad82f9b7eb6c9b5548fcf6e990 RNCPushNotificationIOS: 83ec11fe19d4ea9e32cc339d8e7d2cc3c88f543e RNDeviceInfo: 6f20764111df002b4484f90cbe0a861be29bcc6c @@ -729,14 +735,14 @@ SPEC CHECKSUMS: RNFBApp: 5b215aacc09105a1761de31b9a0eb2abcce06253 RNFBCrashlytics: 0469cb96b00904e0c9604b9636d8eeab31115b08 RNFBMessaging: be0b936394416ec5503add603f2c0a641c353063 - RNGestureHandler: 946a7691e41df61e2c4b1884deab41a4cdc3afff + RNGestureHandler: 02905abe54e1f6e59c081a10b4bd689721e17aa6 RNInputMask: 815461ebdf396beb62cf58916c35cf6930adb991 RNKeychain: f5783613aa3095af63345ddb9626a729bd4a3897 RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e - RNOS: 811de7b4be8824a86a775ade934147a02edb9b5a + RNOS: 31db6fa4a197d179afbba9e6b4d28d450a7f250b RNReactNativeHapticFeedback: e11a4da0ce174e9f88b03cbaf5d76d94633cdee2 - RNReanimated: e1251783216c7cb0a395314c9889d6662d86ed73 - RNScreens: 52650fc6874b8ba68a88da452833562fcf45afb5 + RNReanimated: 031fe8d9ea93c2bd689a40f05320ef9d96f74d7f + RNScreens: 031d10e2b648afc9546f16b6a786d2efc6870310 RNSentry: 9b1d983b2d5d1c215ba6490348fd2a4cc23a8a9d RNStoreReview: 62d6afd7c37db711a594bbffca6b0ea3a812b7a8 RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f @@ -749,6 +755,6 @@ SPEC CHECKSUMS: ToolTipMenu: ad9f45c5ef375418275c81a667c2805bcac8692a Yoga: b9a1f7189009fa4b6266ee0a63235547326295d2 -PODFILE CHECKSUM: 85d1a376657a62af7427d5a9d5e186c099944553 +PODFILE CHECKSUM: 4e11b438fd6bb2763be24d82eeafc6f69c49a2f4 COCOAPODS: 1.8.4 diff --git a/ios/Rainbow.xcodeproj/project.pbxproj b/ios/Rainbow.xcodeproj/project.pbxproj index 709c811a72f..0151cec693e 100644 --- a/ios/Rainbow.xcodeproj/project.pbxproj +++ b/ios/Rainbow.xcodeproj/project.pbxproj @@ -10,7 +10,6 @@ 03252948A60F4C4C87E4FD9E /* SF-Pro-Display-Ultralight.otf in Resources */ = {isa = PBXBuildFile; fileRef = 35833023DB594F1AA6A72866 /* SF-Pro-Display-Ultralight.otf */; }; 06B78001D9F2456D9C2D4A86 /* Graphik-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = DE019D6BCA1A4FF9B7F1E98A /* Graphik-Medium.otf */; }; 0AB30EE90F554EE59F57DFC1 /* SF-Pro-Display-RegularItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D880F2D2B7704793A8D141DC /* SF-Pro-Display-RegularItalic.otf */; }; - 0E56AA9A8843EB50FA4BDD4F /* libPods-Rainbow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C1814FA03B309E79858CD16 /* libPods-Rainbow.a */; }; 0F4372360E744AF4B37EB905 /* Graphik-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = 7818F79CD3944D17AF4196A5 /* Graphik-Black.otf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; @@ -81,6 +80,7 @@ DBBDEB86E54044EE8712C882 /* Graphik-BlackItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = CEC826911B5641B8AF788BB3 /* Graphik-BlackItalic.otf */; }; E98BBF45029948B38545996F /* Graphik-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = E6F010E529544E518E1792C7 /* Graphik-Bold.otf */; }; ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; }; + F504FABC04ED3FF96616663B /* libPods-Rainbow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 505C396DBC90ABA5C8F58327 /* libPods-Rainbow.a */; }; F9EB9219ED9A4C72826A5908 /* Graphik-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = A6EEFE6EA9354456B0DB4520 /* Graphik-Regular.otf */; }; F9EF1D44351840B8A380BD3E /* SF-Pro-Display-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = BA31E8CEDBCC417CA50BC57B /* SF-Pro-Display-Bold.otf */; }; FBDF4EF177284CF4826D7BF9 /* SF-Pro-Display-HeavyItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D7BFD847B72D414D9BE734A0 /* SF-Pro-Display-HeavyItalic.otf */; }; @@ -99,9 +99,9 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Rainbow/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Rainbow/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Rainbow/main.m; sourceTree = ""; }; - 15B240C971E54630F3158955 /* Pods-Rainbow.localrelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.localrelease.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.localrelease.xcconfig"; sourceTree = ""; }; 1736F851327A41C3815212E7 /* SF-Pro-Text-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-BoldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Text-BoldItalic.otf"; sourceTree = ""; }; 182DC054E3584C83822F2A82 /* Graphik-RegularItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-RegularItalic.otf"; path = "../src/assets/fonts/Graphik-RegularItalic.otf"; sourceTree = ""; }; + 19E9E15CE284C848F124D513 /* Pods-Rainbow.staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.staging.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.staging.xcconfig"; sourceTree = ""; }; 1DEDF110038147A598C9B152 /* SF-Pro-Text-HeavyItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-HeavyItalic.otf"; path = "../src/assets/fonts/SF-Pro-Text-HeavyItalic.otf"; sourceTree = ""; }; 233322FCDC624F6FA60C4B52 /* SF-Pro-Text-Heavy.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-Heavy.otf"; path = "../src/assets/fonts/SF-Pro-Text-Heavy.otf"; sourceTree = ""; }; 24979E3620F84003007EB0DA /* Protobuf.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Protobuf.framework; path = Frameworks/Protobuf.framework; sourceTree = ""; }; @@ -132,7 +132,10 @@ 3CE850D5210FEA8F00672599 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; }; 3CE850D7210FEACE00672599 /* libnanopb.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libnanopb.a; sourceTree = BUILT_PRODUCTS_DIR; }; 3EA8003C5E2D46E38184714B /* Graphik-ThinItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-ThinItalic.otf"; path = "../src/assets/fonts/Graphik-ThinItalic.otf"; sourceTree = ""; }; + 4ABE78989066EA78E640934A /* Pods-Rainbow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.debug.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.debug.xcconfig"; sourceTree = ""; }; + 505C396DBC90ABA5C8F58327 /* libPods-Rainbow.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Rainbow.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 51E41940863B4B88BDEF48D7 /* Graphik-SuperItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-SuperItalic.otf"; path = "../src/assets/fonts/Graphik-SuperItalic.otf"; sourceTree = ""; }; + 5837E559F5A2A3BB2C7BD75E /* Pods-Rainbow.localrelease.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.localrelease.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.localrelease.xcconfig"; sourceTree = ""; }; 5842861A013B4B379705CC5A /* SF-Pro-Display-Semibold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-Semibold.otf"; path = "../src/assets/fonts/SF-Pro-Display-Semibold.otf"; sourceTree = ""; }; 6613987F23689A430097D1D5 /* libReact-Core.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-Core.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 6613988123689A430097D1D5 /* libReact-CoreModules.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libReact-CoreModules.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -141,14 +144,13 @@ 66139B432368A9AE0097D1D5 /* libRNFirebase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRNFirebase.a; sourceTree = BUILT_PRODUCTS_DIR; }; 662C7FD632C1481AB5AB1DB7 /* SF-Pro-Display-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-Thin.otf"; path = "../src/assets/fonts/SF-Pro-Display-Thin.otf"; sourceTree = ""; }; 668A9E253DAF444A90ECB997 /* SFMono-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SFMono-Medium.otf"; path = "../src/assets/fonts/SFMono-Medium.otf"; sourceTree = ""; }; - 66C5D39A1EDC48A6255FF83C /* Pods-Rainbow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.debug.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.debug.xcconfig"; sourceTree = ""; }; 66CA6CFD237C27E200C8E3D6 /* InputMask.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = InputMask.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6C1814FA03B309E79858CD16 /* libPods-Rainbow.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Rainbow.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 715DAAA3174542BAB93807A6 /* SF-Pro-Text-RegularItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-RegularItalic.otf"; path = "../src/assets/fonts/SF-Pro-Text-RegularItalic.otf"; sourceTree = ""; }; 7818F79CD3944D17AF4196A5 /* Graphik-Black.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Black.otf"; path = "../src/assets/fonts/Graphik-Black.otf"; sourceTree = ""; }; 7A9AF25703474604964D6EC1 /* Graphik-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Light.otf"; path = "../src/assets/fonts/Graphik-Light.otf"; sourceTree = ""; }; 7CD46377E5FC4E5EBFD57D71 /* Graphik-Super.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Super.otf"; path = "../src/assets/fonts/Graphik-Super.otf"; sourceTree = ""; }; 7CEEDA7A68C24426BBAA8D77 /* Graphik-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-BoldItalic.otf"; path = "../src/assets/fonts/Graphik-BoldItalic.otf"; sourceTree = ""; }; + 7D0A643847F2CCA674E39E65 /* Pods-Rainbow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.release.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.release.xcconfig"; sourceTree = ""; }; 84DB92DCDF5D4374B26FFCC6 /* SF-Pro-Display-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-BoldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-BoldItalic.otf"; sourceTree = ""; }; 86B30DBBDA594167BFE4747E /* SF-Pro-Display-SemiboldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-SemiboldItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-SemiboldItalic.otf"; sourceTree = ""; }; 8789D635428240B5ABF282EE /* SFMono-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SFMono-Bold.otf"; path = "../src/assets/fonts/SFMono-Bold.otf"; sourceTree = ""; }; @@ -198,7 +200,6 @@ E672AB1C5404435897615660 /* SF-Pro-Text-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Text-Light.otf"; path = "../src/assets/fonts/SF-Pro-Text-Light.otf"; sourceTree = ""; }; E6F010E529544E518E1792C7 /* Graphik-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Bold.otf"; path = "../src/assets/fonts/Graphik-Bold.otf"; sourceTree = ""; }; E8E3CE2A4AD34CB991CD61EE /* SF-Pro-Display-LightItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "SF-Pro-Display-LightItalic.otf"; path = "../src/assets/fonts/SF-Pro-Display-LightItalic.otf"; sourceTree = ""; }; - E93A96605FE51CFC31676801 /* Pods-Rainbow.staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rainbow.staging.xcconfig"; path = "Target Support Files/Pods-Rainbow/Pods-Rainbow.staging.xcconfig"; sourceTree = ""; }; EB48DC1D46D449759B9C61D4 /* Graphik-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Graphik-Thin.otf"; path = "../src/assets/fonts/Graphik-Thin.otf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; @@ -212,8 +213,8 @@ buildActionMask = 2147483647; files = ( ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */, - 0E56AA9A8843EB50FA4BDD4F /* libPods-Rainbow.a in Frameworks */, C72F456C99A646399192517D /* libz.tbd in Frameworks */, + F504FABC04ED3FF96616663B /* libPods-Rainbow.a in Frameworks */, ADBDB9381DFEBF1600ED6528 /* (null) in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -298,8 +299,8 @@ 24979E7E20F84005007EB0DA /* nanopb.framework */, 24979E3620F84003007EB0DA /* Protobuf.framework */, 2D16E6891FA4F8E400B85C8A /* libReact.a */, - 6C1814FA03B309E79858CD16 /* libPods-Rainbow.a */, 98AED33BAB4247CEBEF8464D /* libz.tbd */, + 505C396DBC90ABA5C8F58327 /* libPods-Rainbow.a */, ); name = Frameworks; sourceTree = ""; @@ -366,10 +367,10 @@ C640359C0E6575CE0A7ECD73 /* Pods */ = { isa = PBXGroup; children = ( - 66C5D39A1EDC48A6255FF83C /* Pods-Rainbow.debug.xcconfig */, - A671DF9861FA8D2C9A6FCB91 /* Pods-Rainbow.release.xcconfig */, - 15B240C971E54630F3158955 /* Pods-Rainbow.localrelease.xcconfig */, - E93A96605FE51CFC31676801 /* Pods-Rainbow.staging.xcconfig */, + 4ABE78989066EA78E640934A /* Pods-Rainbow.debug.xcconfig */, + 7D0A643847F2CCA674E39E65 /* Pods-Rainbow.release.xcconfig */, + 5837E559F5A2A3BB2C7BD75E /* Pods-Rainbow.localrelease.xcconfig */, + 19E9E15CE284C848F124D513 /* Pods-Rainbow.staging.xcconfig */, ); path = Pods; sourceTree = ""; @@ -442,14 +443,14 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Rainbow" */; buildPhases = ( - B448B1B66A188D3AC6DA3639 /* [CP] Check Pods Manifest.lock */, + A0E02F7D98DEA0A875313618 /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 3CF823D3218F310D0024B77B /* ShellScript */, - 7D8EDE895DE18700A743F64E /* [CP-User] [RNFB] Core Configuration */, - 8C1D9934C43085FED5C8B69C /* [CP-User] [RNFB] Crashlytics Configuration */, + 45328AAEE53DABB0EEF4E068 /* [CP-User] [RNFB] Core Configuration */, + A60DB963902D74FE3CD4681A /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( ); @@ -605,7 +606,7 @@ shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Fabric/run\"\n"; }; - 7D8EDE895DE18700A743F64E /* [CP-User] [RNFB] Core Configuration */ = { + 45328AAEE53DABB0EEF4E068 /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -615,17 +616,7 @@ shellPath = /bin/sh; shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes usful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"firebase_crashlytics_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\n\n # config.admob_delay_app_measurement_init\n _ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_delay_app_measurement_init\")\n if [[ $_ADMOB_DELAY_APP_MEASUREMENT == \"true\" ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADDelayAppMeasurementInit\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"YES\")\n fi\n\n # config.admob_ios_app_id\n _ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_ios_app_id\")\n if [[ $_ADMOB_IOS_APP_ID ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADApplicationIdentifier\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_ADMOB_IOS_APP_ID\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in ${_TARGET_PLIST} ${_DSYM_PLIST} ; do\n if [[ -f ${plist} ]]; then\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n\n\n\n"; }; - 8C1D9934C43085FED5C8B69C /* [CP-User] [RNFB] Crashlytics Configuration */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] [RNFB] Crashlytics Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec Fabric Run from Pods\"\n \"${PODS_ROOT}/Fabric/run\"\nelse\n echo \"info: Exec Fabric Run from framework\"\n \"${PROJECT_DIR}/Fabric.framework/run\"\nfi\n"; - }; - B448B1B66A188D3AC6DA3639 /* [CP] Check Pods Manifest.lock */ = { + A0E02F7D98DEA0A875313618 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -647,6 +638,16 @@ 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; }; + A60DB963902D74FE3CD4681A /* [CP-User] [RNFB] Crashlytics Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec Fabric Run from Pods\"\n \"${PODS_ROOT}/Fabric/run\"\nelse\n echo \"info: Exec Fabric Run from framework\"\n \"${PROJECT_DIR}/Fabric.framework/run\"\nfi\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -689,7 +690,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66C5D39A1EDC48A6255FF83C /* Pods-Rainbow.debug.xcconfig */; + baseConfigurationReference = 4ABE78989066EA78E640934A /* Pods-Rainbow.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_OPTIMIZATION = time; @@ -746,7 +747,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A671DF9861FA8D2C9A6FCB91 /* Pods-Rainbow.release.xcconfig */; + baseConfigurationReference = 7D0A643847F2CCA674E39E65 /* Pods-Rainbow.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_OPTIMIZATION = ""; @@ -838,7 +839,7 @@ }; 2C6A799821127ED9003AFB37 /* Staging */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E93A96605FE51CFC31676801 /* Pods-Rainbow.staging.xcconfig */; + baseConfigurationReference = 19E9E15CE284C848F124D513 /* Pods-Rainbow.staging.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_OPTIMIZATION = ""; @@ -930,7 +931,7 @@ }; 2C87B79A2197FA1900682EC4 /* LocalRelease */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 15B240C971E54630F3158955 /* Pods-Rainbow.localrelease.xcconfig */; + baseConfigurationReference = 5837E559F5A2A3BB2C7BD75E /* Pods-Rainbow.localrelease.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_OPTIMIZATION = time; diff --git a/package.json b/package.json index 4cee8d4b7cb..bf91169f825 100644 --- a/package.json +++ b/package.json @@ -23,17 +23,17 @@ "@hocs/omit-props": "^0.4.0", "@hocs/safe-timers": "^0.4.0", "@hocs/with-view-layout-props": "^0.2.0", - "@react-native-community/async-storage": "1.6.2", + "@react-native-community/async-storage": "1.7.1", "@react-native-community/blur": "^3.4.1", "@react-native-community/masked-view": "^0.1.5", - "@react-native-community/netinfo": "^5.0.0", + "@react-native-community/netinfo": "^5.3.2", "@react-native-community/push-notification-ios": "^1.0.3", + "@react-native-community/viewpager": "^3.3.0", "@react-native-firebase/app": "^6.2.0", "@react-native-firebase/crashlytics": "^6.2.0", "@react-native-firebase/messaging": "^6.2.0", "@segment/analytics-react-native": "^1.0.1", "@sentry/react-native": "^1.2.0", - "@staltz/react-native-tcp": "^3.3.1", "@tradle/react-native-http": "^2.0.1", "@uniswap/sdk": "^1.0.0-beta.4", "@walletconnect/react-native": "^1.0.0-beta.29", @@ -83,13 +83,13 @@ "react-native-actionsheet": "^2.4.2", "react-native-camera": "^3.9.0", "react-native-circular-progress": "^1.3.4", - "react-native-code-push": "^5.6.0", + "react-native-code-push": "osdnk/react-native-code-push#patch-1", "react-native-crypto": "^2.2.0", "react-native-device-info": "5.3.1", "react-native-dotenv": "^0.2.0", "react-native-emoji": "1.5.0", "react-native-fast-image": "andrewschenk-linx/react-native-fast-image#fix-ios-xcode-proj", - "react-native-gesture-handler": "1.5.2", + "react-native-gesture-handler": "1.5.3", "react-native-haptic-feedback": "^1.8.2", "react-native-indicators": "0.17.0", "react-native-ios11-devicecheck": "^0.0.3", @@ -99,21 +99,23 @@ "react-native-level-fs": "^3.0.1", "react-native-linear-gradient": "^2.5.6", "react-native-mail": "^4.1.0", - "react-native-os": "icxcat/react-native-os#master", + "react-native-os": "software-mansion-labs/react-native-os#41a08e45260b8c1c53c77ad00e13ae954cb9337c", "react-native-permissions": "^1.2.1", "react-native-qrcode-scanner": "mikedemarais/react-native-qrcode-scanner#2ca70b8c64afb87e712aba578e11409c6406069e", "react-native-qrcode-svg": "git+https://github.com/mikedemarais/react-native-qrcode-svg.git", "react-native-radial-gradient": "shkatulo/react-native-radial-gradient", "react-native-randombytes": "^3.5.3", - "react-native-reanimated": "software-mansion/react-native-reanimated", + "react-native-reanimated": "1.7.0", "react-native-redash": "9.0.0", "react-native-safe-area-context": "^0.5.0", "react-native-safe-area-view": "mikedemarais/react-native-safe-area-view", - "react-native-screens": "2.0.0-alpha.24", + "react-native-screens": "2.0.0-alpha.25", "react-native-splash-screen": "^3.2.0", "react-native-storage": "^1.0.1", "react-native-store-review": "^0.1.5", "react-native-svg": "9.13.6", + "react-native-tab-view-viewpager-adapter": "^1.0.7", + "react-native-tab-view": "^2.12.0", "react-native-tcp": "^3.3.2", "react-native-text-input-mask": "waqas19921/react-native-text-input-mask", "react-native-tooltip": "marcosrdz/react-native-tooltip#master", @@ -138,7 +140,7 @@ "redux-thunk": "^2.3.0", "reselect": "^4.0.0", "rn-nodeify": "10.2.0", - "socket.io-client": "^2.2.0", + "socket.io-client": "^2.3.0", "stream-browserify": "^1.0.0", "string_decoder": "^0.10.31", "styled-components": "5.0.0-beta.9", diff --git a/patches/react-native-gesture-handler+1.5.2.patch b/patches/react-native-gesture-handler+1.5.3.patch similarity index 100% rename from patches/react-native-gesture-handler+1.5.2.patch rename to patches/react-native-gesture-handler+1.5.3.patch diff --git a/src/App.js b/src/App.js index 33bf3fe2268..f1ed28076dc 100644 --- a/src/App.js +++ b/src/App.js @@ -44,7 +44,7 @@ CodePush.getUpdateMetadata().then(update => { } }); -enableScreens(true); +enableScreens(); class App extends Component { static propTypes = { diff --git a/src/components/AddFundsInterstitial.js b/src/components/AddFundsInterstitial.js index 4f2314cb197..230007839b1 100644 --- a/src/components/AddFundsInterstitial.js +++ b/src/components/AddFundsInterstitial.js @@ -83,8 +83,10 @@ export default compose( pure, withNavigation, withHandlers({ - onPressAddFunds: ({ navigation }) => () => - navigation.navigate('ReceiveModal'), + onPressAddFunds: ({ navigation }) => () => { + console.log('should go to modal'); + navigation.navigate('ReceiveModal'); + }, onPressImportWallet: ({ navigation }) => () => navigation.navigate('ImportSeedPhraseSheet'), }) diff --git a/src/components/animations/ButtonPressAnimation/ButtonPressAnimation.android.js b/src/components/animations/ButtonPressAnimation/ButtonPressAnimation.android.js new file mode 100644 index 00000000000..1335d648424 --- /dev/null +++ b/src/components/animations/ButtonPressAnimation/ButtonPressAnimation.android.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { TouchableOpacity } from 'react-native'; + +export default function ButtonPressAnimation({ + children, + disabled, + onLongPress, + onPress, + onPressStart, + style, +}) { + return ( + + {children} + + ); +} diff --git a/src/components/animations/ButtonPressAnimation.js b/src/components/animations/ButtonPressAnimation/ButtonPressAnimation.ios.js similarity index 96% rename from src/components/animations/ButtonPressAnimation.js rename to src/components/animations/ButtonPressAnimation/ButtonPressAnimation.ios.js index 44ccfde12b0..17414ec099e 100644 --- a/src/components/animations/ButtonPressAnimation.js +++ b/src/components/animations/ButtonPressAnimation/ButtonPressAnimation.ios.js @@ -9,11 +9,11 @@ import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; import Animated, { clockRunning, Easing } from 'react-native-reanimated'; import stylePropType from 'react-style-proptype'; import { useMemoOne } from 'use-memo-one'; -import { useInteraction, useTransformOrigin } from '../../hooks'; -import { animations } from '../../styles'; -import { directionPropType } from '../../utils'; -import Button from '../native-button'; -import isNativeButtonAvailable from '../../helpers/isNativeButtonAvailable'; +import { useInteraction, useTransformOrigin } from '../../../hooks'; +import { animations } from '../../../styles'; +import { directionPropType } from '../../../utils'; +import Button from '../../native-button'; +import isNativeButtonAvailable from '../../../helpers/isNativeButtonAvailable'; const { and, diff --git a/src/components/animations/ButtonPressAnimation/index.js b/src/components/animations/ButtonPressAnimation/index.js new file mode 100644 index 00000000000..7a02a3b9390 --- /dev/null +++ b/src/components/animations/ButtonPressAnimation/index.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line import/no-unresolved +import ButtonPressAnimation from './ButtonPressAnimation'; + +export default ButtonPressAnimation; diff --git a/src/components/buttons/Button/Button.android.js b/src/components/buttons/Button/Button.android.js new file mode 100644 index 00000000000..7339b24f2ba --- /dev/null +++ b/src/components/buttons/Button/Button.android.js @@ -0,0 +1,121 @@ +import { isArray, isString } from 'lodash'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { TouchableOpacity } from 'react-native'; +import styled from 'styled-components/primitives'; +import { colors, padding } from '../../../styles'; +import InnerBorder from '../../InnerBorder'; +import { Centered } from '../../layout'; +import { Text } from '../../text'; + +const ButtonSizeTypes = { + default: { + fontSize: 'h5', + padding: [12, 16, 15], + }, + small: { + fontSize: 'medium', + padding: [5.5, 10, 6.5], + }, +}; + +const ButtonShapeTypes = { + pill: 'pill', + rounded: 'rounded', +}; + +const shadowStyles = ` + shadow-color: ${colors.blueGreyLight}; + shadow-offset: 0px 4px; + shadow-opacity: 0.2; + shadow-radius: 6; +`; + +const Container = styled(Centered)` + ${({ showShadow }) => (showShadow ? shadowStyles : '')} + ${({ size }) => padding(...ButtonSizeTypes[size].padding)} + background-color: ${({ backgroundColor }) => backgroundColor}; + border-radius: ${({ type }) => (type === 'rounded' ? 14 : 50)}; + flex-grow: 0; +`; + +const shouldRenderChildrenAsText = children => + isArray(children) ? isString(children[0]) : isString(children); + +const Button = ({ + backgroundColor, + borderColor, + borderOpacity, + borderWidth, + children, + color, + containerStyles, + disabled, + onPress, + showShadow, + size, + style, + textProps, + type, + ...props +}) => ( + + + {!shouldRenderChildrenAsText(children) ? ( + children + ) : ( + + {children} + + )} + {(!onPress || !disabled) && ( + + )} + + +); + +Button.propTypes = { + backgroundColor: PropTypes.string, + borderColor: PropTypes.string, + borderOpacity: PropTypes.string, + borderWidth: PropTypes.number, + children: PropTypes.node.isRequired, + color: PropTypes.string, + containerStyles: PropTypes.string, + disabled: PropTypes.bool, + onPress: PropTypes.func, + showShadow: PropTypes.bool, + size: PropTypes.oneOf(Object.keys(ButtonSizeTypes)), + style: PropTypes.oneOfType([PropTypes.array, PropTypes.object]), + textProps: PropTypes.object, + type: PropTypes.oneOf(Object.keys(ButtonShapeTypes)), +}; + +Button.defaultProps = { + backgroundColor: colors.grey, + color: colors.white, + showShadow: true, + size: 'default', + type: ButtonShapeTypes.pill, +}; + +export default Button; diff --git a/src/components/buttons/Button.js b/src/components/buttons/Button/Button.ios.js similarity index 92% rename from src/components/buttons/Button.js rename to src/components/buttons/Button/Button.ios.js index 655b8cfe8ac..7c9cb783af8 100644 --- a/src/components/buttons/Button.js +++ b/src/components/buttons/Button/Button.ios.js @@ -2,11 +2,11 @@ import { isArray, isString, pick } from 'lodash'; import PropTypes from 'prop-types'; import React from 'react'; import styled from 'styled-components/primitives'; -import { colors, padding } from '../../styles'; -import { ButtonPressAnimation } from '../animations'; -import InnerBorder from '../InnerBorder'; -import { Centered } from '../layout'; -import { Text } from '../text'; +import { colors, padding } from '../../../styles'; +import { ButtonPressAnimation } from '../../animations'; +import InnerBorder from '../../InnerBorder'; +import { Centered } from '../../layout'; +import { Text } from '../../text'; const ButtonSizeTypes = { default: { diff --git a/src/components/buttons/Button/index.js b/src/components/buttons/Button/index.js new file mode 100644 index 00000000000..7a784a3e14b --- /dev/null +++ b/src/components/buttons/Button/index.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line import/no-unresolved +import Button from './Button'; + +export default Button; diff --git a/src/components/copy-tooltip/CopyTooltip.android.js b/src/components/copy-tooltip/CopyTooltip.android.js new file mode 100644 index 00000000000..461f67a0a4b --- /dev/null +++ b/src/components/copy-tooltip/CopyTooltip.android.js @@ -0,0 +1 @@ +export default () => null; diff --git a/src/components/CopyTooltip.js b/src/components/copy-tooltip/CopyTooltip.ios.js similarity index 97% rename from src/components/CopyTooltip.js rename to src/components/copy-tooltip/CopyTooltip.ios.js index 73939a17fc3..14722ae9a51 100644 --- a/src/components/CopyTooltip.js +++ b/src/components/copy-tooltip/CopyTooltip.ios.js @@ -4,7 +4,7 @@ import { Clipboard } from 'react-native'; import ToolTip from 'react-native-tooltip'; import { withNavigation } from 'react-navigation'; import { compose, onlyUpdateForKeys } from 'recompact'; -import { colors } from '../styles'; +import { colors } from '../../styles'; class CopyTooltip extends PureComponent { static propTypes = { diff --git a/src/components/copy-tooltip/index.js b/src/components/copy-tooltip/index.js new file mode 100644 index 00000000000..73c4708e6b0 --- /dev/null +++ b/src/components/copy-tooltip/index.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line import/no-unresolved +import CopyTooltip from './CopyTooltip'; + +export default CopyTooltip; diff --git a/src/components/expanded-state/AddContactState.js b/src/components/expanded-state/AddContactState.js index b8e7cc04755..8c820a11ed4 100644 --- a/src/components/expanded-state/AddContactState.js +++ b/src/components/expanded-state/AddContactState.js @@ -9,7 +9,7 @@ import { abbreviations, deviceUtils } from '../../utils'; import { ButtonPressAnimation } from '../animations'; import { Button } from '../buttons'; import { ContactAvatar, showDeleteContactActionSheet } from '../contacts'; -import CopyTooltip from '../CopyTooltip'; +import CopyTooltip from '../copy-tooltip'; import Divider from '../Divider'; import { Input } from '../inputs'; import { Centered, KeyboardFixedOpenLayout } from '../layout'; diff --git a/src/components/fab/FloatingActionButton.js b/src/components/fab/FloatingActionButton.js index bc8d092c8ae..3f2090ded4f 100644 --- a/src/components/fab/FloatingActionButton.js +++ b/src/components/fab/FloatingActionButton.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { View } from 'react-primitives'; import ReactNativeHapticFeedback from 'react-native-haptic-feedback'; -import { ButtonPressAnimation } from '../animations'; +import ButtonPressAnimation from '../animations/ButtonPressAnimation'; import InnerBorder from '../InnerBorder'; import { borders, colors, position } from '../../styles'; import { isNewValueForObjectPaths } from '../../utils'; diff --git a/src/components/fields/UnderlineField.js b/src/components/fields/UnderlineField.js index 08367f05d3e..b5c188d9888 100644 --- a/src/components/fields/UnderlineField.js +++ b/src/components/fields/UnderlineField.js @@ -79,8 +79,9 @@ export default class UnderlineField extends PureComponent { this.setState({ isFocused: false }); - if (this.props.onBlur) this.props.onBlur(...props); - store.dispatch(setSelectedInputId(null)); + if (this.props.onBlur) { + this.props.onBlur(...props); + } }; onChange = event => { diff --git a/src/components/modal/ModalFooterButton.js b/src/components/modal/ModalFooterButton.js index ac3c69f4d79..e841ab40a17 100644 --- a/src/components/modal/ModalFooterButton.js +++ b/src/components/modal/ModalFooterButton.js @@ -1,6 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; +import { Platform } from 'react-native'; import { BorderlessButton } from 'react-native-gesture-handler'; +import { Button } from '../buttons'; import styled from 'styled-components'; import { withNeverRerender } from '../../hoc'; import { colors, position } from '../../styles'; @@ -25,7 +27,10 @@ const IconContainer = styled(Centered)` `; const ModalFooterButton = ({ icon, label, onPress }) => ( - + diff --git a/src/components/modal/ModalHeaderButton.js b/src/components/modal/ModalHeaderButton.js index 4bf32385240..f69de0980d9 100644 --- a/src/components/modal/ModalHeaderButton.js +++ b/src/components/modal/ModalHeaderButton.js @@ -1,6 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; +import { Platform } from 'react-native'; import { BorderlessButton } from 'react-native-gesture-handler'; +import { Button } from '../buttons'; import styled from 'styled-components'; import { colors } from '../../styles'; import { Icon } from '../icons'; @@ -28,7 +30,7 @@ const Text = styled(UnstyledText).attrs({ const ModalHeaderButton = ({ label, showBackArrow, side, ...props }) => ( = 13; +export default Platform.OS === 'ios' && Platform.Version >= 13; diff --git a/src/screens/ImportSeedPhraseSheet.js b/src/screens/ImportSeedPhraseSheet.js index 848e9b9901d..93908037ece 100644 --- a/src/screens/ImportSeedPhraseSheet.js +++ b/src/screens/ImportSeedPhraseSheet.js @@ -7,8 +7,9 @@ import React, { useState, useRef, } from 'react'; -import { KeyboardAvoidingView, StatusBar } from 'react-native'; +import { KeyboardAvoidingView, StatusBar, Platform } from 'react-native'; import { BorderlessButton } from 'react-native-gesture-handler'; +import { Button } from '../components/buttons'; import { useNavigation } from 'react-navigation-hooks'; import styled from 'styled-components/primitives'; import { getStatusBarHeight } from 'react-native-iphone-x-helper'; @@ -54,7 +55,9 @@ const HandleIcon = styled(Icon).attrs({ margin-bottom: 2; `; -const StyledImportButton = styled(BorderlessButton)` +const StyledImportButton = styled( + Platform.OS === 'ios' ? BorderlessButton : Button +)` ${padding(5, 9, 7)}; ${shadow.build(0, 6, 10, colors.dark, 0.16)}; background-color: ${({ disabled }) => diff --git a/src/screens/Routes/Routes.android.js b/src/screens/Routes/Routes.android.js new file mode 100644 index 00000000000..231827e715d --- /dev/null +++ b/src/screens/Routes/Routes.android.js @@ -0,0 +1,283 @@ +import analytics from '@segment/analytics-react-native'; +import { get, omit } from 'lodash'; +import React from 'react'; +import { StatusBar } from 'react-native'; +import { createAppContainer } from 'react-navigation'; +import { createMaterialTopTabNavigator } from 'react-navigation-tabs'; +import ViewPagerAdapter from 'react-native-tab-view-viewpager-adapter'; + +import createNativeStackNavigator from 'react-native-screens/createNativeStackNavigator'; +import { createStackNavigator } from 'react-navigation-stack'; +import isNativeStackAvailable from '../../helpers/isNativeStackAvailable'; +import { ExchangeModalNavigator, Navigation } from '../../navigation'; +import { updateTransitionProps } from '../../redux/navigation'; +import store from '../../redux/store'; +import { deviceUtils } from '../../utils'; +import ExpandedAssetScreenWithData from '../ExpandedAssetScreenWithData'; +import ImportSeedPhraseSheetWithData from '../ImportSeedPhraseSheetWithData'; +import ProfileScreenWithData from '../ProfileScreenWithData'; +import QRScannerScreenWithData from '../QRScannerScreenWithData'; +import ReceiveModal from '../ReceiveModal'; +import ExampleScreen from '../ExampleScreen'; +import WalletConnectConfirmationModal from '../WalletConnectConfirmationModal'; +import SendSheetWithData from '../SendSheetWithData'; +import SettingsModal from '../SettingsModal'; +import TransactionConfirmationScreenWithData from '../TransactionConfirmationScreenWithData'; +import WalletScreen from '../WalletScreen'; +import { + exchangePreset, + expandedPreset, + sheetPreset, + backgroundPreset, + overlayExpandedPreset, +} from '../../navigation/transitions/effects'; + +const onTransitionEnd = () => + store.dispatch(updateTransitionProps({ isTransitioning: false })); +const onTransitionStart = () => + store.dispatch(updateTransitionProps({ isTransitioning: true })); + +const SwipeStack = createMaterialTopTabNavigator( + { + ProfileScreen: { + name: 'ProfileScreen', + screen: ProfileScreenWithData, + }, + WalletScreen: { + name: 'WalletScreen', + screen: WalletScreen, + }, + // eslint-disable-next-line sort-keys + QRScannerScreen: { + name: 'QRScannerScreen', + screen: QRScannerScreenWithData, + }, + }, + { + headerMode: 'none', + initialLayout: deviceUtils.dimensions, + initialRouteName: 'WalletScreen', + pagerComponent: ViewPagerAdapter, + swipeEnabled: true, + tabBarComponent: null, + } +); + +const MainNavigator = createStackNavigator( + { + ConfirmRequest: { + navigationOptions: { + ...sheetPreset, + onTransitionStart: props => { + sheetPreset.onTransitionStart(props); + onTransitionStart(); + }, + }, + screen: TransactionConfirmationScreenWithData, + }, + ExampleScreen, + ExchangeModal: { + navigationOptions: { + ...exchangePreset, + onTransitionEnd, + onTransitionStart: props => { + expandedPreset.onTransitionStart(props); + onTransitionStart(); + }, + }, + params: { + isGestureBlocked: false, + }, + screen: ExchangeModalNavigator, + }, + ExpandedAssetScreen: { + navigationOptions: { + ...expandedPreset, + // onTransitionStart: props => { + // expandedPreset.onTransitionStart(props); + // onTransitionStart(); + // }, + }, + screen: ExpandedAssetScreenWithData, + }, + OverlayExpandedAssetScreen: { + navigationOptions: overlayExpandedPreset, + screen: ExpandedAssetScreenWithData, + }, + ReceiveModal: { + navigationOptions: { + ...expandedPreset, + onTransitionStart: props => { + expandedPreset.onTransitionStart(props); + onTransitionStart(); + }, + }, + screen: ReceiveModal, + }, + SettingsModal: { + navigationOptions: { + ...expandedPreset, + gesturesEnabled: false, + onTransitionStart: props => { + expandedPreset.onTransitionStart(props); + onTransitionStart(); + }, + }, + screen: SettingsModal, + transparentCard: true, + }, + SwipeLayout: { + navigationOptions: { + ...backgroundPreset, + }, + screen: SwipeStack, + }, + WalletConnectConfirmationModal: { + navigationOptions: { + ...expandedPreset, + onTransitionStart: props => { + expandedPreset.onTransitionStart(props); + onTransitionStart(); + }, + }, + screen: WalletConnectConfirmationModal, + }, + }, + { + defaultNavigationOptions: { + onTransitionEnd, + onTransitionStart, + }, + headerMode: 'none', + initialRouteName: 'SwipeLayout', + mode: 'modal', + } +); + +let appearListener = null; +const setListener = listener => (appearListener = listener); + +const NativeStack = createNativeStackNavigator( + { + ImportSeedPhraseSheet: function ImportSeedPhraseSheetWrapper(...props) { + return ( + + ); + }, + MainNavigator, + SendSheet: function SendSheetWrapper(...props) { + return ; + }, + }, + { + defaultNavigationOptions: { + onAppear: () => appearListener && appearListener(), + }, + headerMode: 'none', + initialRouteName: 'MainNavigator', + mode: 'modal', + } +); + +const NativeStackFallback = createStackNavigator( + { + ImportSeedPhraseSheet: { + navigationOptions: { + ...sheetPreset, + onTransitionStart: props => { + sheetPreset.onTransitionStart(props); + onTransitionStart(); + }, + }, + screen: ImportSeedPhraseSheetWithData, + }, + MainNavigator, + SendSheet: { + navigationOptions: { + ...omit(sheetPreset, 'gestureResponseDistance'), + onTransitionStart: props => { + onTransitionStart(props); + sheetPreset.onTransitionStart(props); + }, + }, + screen: SendSheetWithData, + }, + }, + { + defaultNavigationOptions: { + onTransitionEnd, + onTransitionStart, + }, + headerMode: 'none', + initialRouteName: 'MainNavigator', + mode: 'modal', + } +); + +const Stack = isNativeStackAvailable ? NativeStack : NativeStackFallback; + +const AppContainer = createAppContainer(Stack); + +// eslint-disable-next-line react/display-name +const AppContainerWithAnalytics = React.forwardRef((props, ref) => ( + { + const { params, routeName } = Navigation.getActiveRoute(currentState); + const prevRouteName = Navigation.getActiveRouteName(prevState); + // native stack rn does not support onTransitionEnd and onTransitionStart + if ( + prevRouteName === 'ImportSeedPhraseSheet' && + (routeName === 'ProfileScreen' || routeName === 'WalletScreen') + ) { + StatusBar.setBarStyle('dark-content'); + } + + if (routeName === 'SettingsModal') { + let subRoute = get(params, 'section.title'); + if (subRoute === 'Settings') subRoute = null; + return analytics.screen( + `${routeName}${subRoute ? `>${subRoute}` : ''}` + ); + } + + if (routeName !== prevRouteName) { + let paramsToTrack = {}; + + if ( + prevRouteName === 'MainExchangeScreen' && + routeName === 'WalletScreen' + ) { + // store.dispatch(updateTransitionProps({ blurColor: null })); + } else if ( + prevRouteName === 'WalletScreen' && + routeName === 'MainExchangeScreen' + ) { + // store.dispatch( + // updateTransitionProps({ + // blurColor: colors.alpha(colors.black, 0.9), + // }) + // ); + } + + if (routeName === 'ExpandedAssetScreen') { + const { asset, type } = params; + paramsToTrack = { + assetContractAddress: + asset.address || get(asset, 'asset_contract.address'), + assetName: asset.name, + assetSymbol: asset.symbol || get(asset, 'asset_contract.symbol'), + assetType: type, + }; + } + + return analytics.screen(routeName, paramsToTrack); + } + }} + ref={ref} + /> +)); + +export default React.memo(AppContainerWithAnalytics); diff --git a/src/screens/Routes.js b/src/screens/Routes/Routes.ios.js similarity index 87% rename from src/screens/Routes.js rename to src/screens/Routes/Routes.ios.js index 51369d793da..53baee41e81 100644 --- a/src/screens/Routes.js +++ b/src/screens/Routes/Routes.ios.js @@ -8,29 +8,29 @@ import { createMaterialTopTabNavigator } from 'react-navigation-tabs-v1'; import { enableScreens } from 'react-native-screens'; import createNativeStackNavigator from 'react-native-screens/createNativeStackNavigator'; import { createStackNavigator } from 'react-navigation-stack'; -import isNativeStackAvailable from '../helpers/isNativeStackAvailable'; -import { ExchangeModalNavigator, Navigation } from '../navigation'; -import { updateTransitionProps } from '../redux/navigation'; -import store from '../redux/store'; -import { deviceUtils } from '../utils'; -import ExpandedAssetScreenWithData from './ExpandedAssetScreenWithData'; -import ImportSeedPhraseSheetWithData from './ImportSeedPhraseSheetWithData'; -import ProfileScreenWithData from './ProfileScreenWithData'; -import QRScannerScreenWithData from './QRScannerScreenWithData'; -import ReceiveModal from './ReceiveModal'; -import ExampleScreen from './ExampleScreen'; -import WalletConnectConfirmationModal from './WalletConnectConfirmationModal'; -import SendSheetWithData from './SendSheetWithData'; -import SettingsModal from './SettingsModal'; -import TransactionConfirmationScreenWithData from './TransactionConfirmationScreenWithData'; -import WalletScreen from './WalletScreen'; +import isNativeStackAvailable from '../../helpers/isNativeStackAvailable'; +import { ExchangeModalNavigator, Navigation } from '../../navigation'; +import { updateTransitionProps } from '../../redux/navigation'; +import store from '../../redux/store'; +import { deviceUtils } from '../../utils'; +import ExpandedAssetScreenWithData from '../ExpandedAssetScreenWithData'; +import ImportSeedPhraseSheetWithData from '../ImportSeedPhraseSheetWithData'; +import ProfileScreenWithData from '../ProfileScreenWithData'; +import QRScannerScreenWithData from '../QRScannerScreenWithData'; +import ReceiveModal from '../ReceiveModal'; +import ExampleScreen from '../ExampleScreen'; +import WalletConnectConfirmationModal from '../WalletConnectConfirmationModal'; +import SendSheetWithData from '../SendSheetWithData'; +import SettingsModal from '../SettingsModal'; +import TransactionConfirmationScreenWithData from '../TransactionConfirmationScreenWithData'; +import WalletScreen from '../WalletScreen'; import { exchangePreset, expandedPreset, sheetPreset, backgroundPreset, overlayExpandedPreset, -} from '../navigation/transitions/effects'; +} from '../../navigation/transitions/effects'; enableScreens(); diff --git a/src/screens/Routes/index.js b/src/screens/Routes/index.js new file mode 100644 index 00000000000..bc9edf41045 --- /dev/null +++ b/src/screens/Routes/index.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line import/no-unresolved +import Routes from './Routes'; + +export default Routes; diff --git a/yarn.lock b/yarn.lock index 91623a8694a..85a6b35661a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -978,10 +978,10 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@react-native-community/async-storage@1.6.2": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.6.2.tgz#a19ca7149c4dfe8216f2330e6b1ebfe2d075ef92" - integrity sha512-EJGsbrHubK1mGxPjWB74AaHAd5m9I+Gg2RRPZzMK6org7QOU9WOBnIMFqoeVto3hKOaEPlk8NV74H6G34/2pZQ== +"@react-native-community/async-storage@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.7.1.tgz#ef2104d865de61ad91bba66613e57e689ff4e6a1" + integrity sha512-/oX/x+EU4xNaqIaC/epVKzO8XghzImPA7l8cLz3USEFmtFiXFjBbTeeIFjjEm/u4/cv38Wi1xMEa10PHIWygRg== "@react-native-community/blur@^3.4.1": version "3.4.1" @@ -1084,10 +1084,10 @@ resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.5.tgz#25421be6cd943a4b1660b62cfbcd45be8891462c" integrity sha512-Lj1DzfCmW0f4HnmHtEuX8Yy2f7cnUA8r5KGGUuDDGtQt1so6QJkKeUmsnLo2zYDtsF8due6hvIL06Vdo5xxuLQ== -"@react-native-community/netinfo@^5.0.0": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-5.3.2.tgz#7b6ee417c2a905663e10de176c00eeab09bdd14c" - integrity sha512-npNcLAz6iWzwRNh+0tSFMlR+xkpSz9NWzX+5AxW40KE6qEZGWdE3dtGBKsezMdWD2Fh+6Je6P6hgUEF8xuZrbA== +"@react-native-community/netinfo@^5.3.2": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-5.3.3.tgz#2e627456d83c1d75d4c43ab6cef70fe125b9691d" + integrity sha512-L4BsdIEEuG5rKkVNzjESdJ1wvusn0kflj/FrwctaW+xkLxiFs1+mdBg/mvqqfXvVFuBEphbyXJTFT4aG4Okkow== "@react-native-community/push-notification-ios@^1.0.3": version "1.0.3" @@ -1096,6 +1096,11 @@ dependencies: invariant "^2.2.4" +"@react-native-community/viewpager@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-native-community/viewpager/-/viewpager-3.3.0.tgz#e613747a43a31a6f3278f817ba96fdaaa7941f23" + integrity sha512-tyzh79l4t/hxiyS9QD3LRmWMs8KVkZzjrkQ8U8+8To1wmvVCBtp8BenvNsDLTBO7CpO/YmiThpmIdEZMr1WuVw== + "@react-native-firebase/app-types@6.2.0": version "6.2.0" resolved "https://registry.yarnpkg.com/@react-native-firebase/app-types/-/app-types-6.2.0.tgz#4d3c0e7fa4e4f00061c52b1a32d76e85e5db9f2c" @@ -1247,19 +1252,6 @@ xcode "2.0.0" yargs "^12.0.2" -"@staltz/react-native-tcp@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@staltz/react-native-tcp/-/react-native-tcp-3.3.1.tgz#c5be709adafd802ec12e4542b0aa350efa86b2dd" - integrity sha512-f3EdzTEJH8jkegoc3igzXNx2mkQJq4q5VY0j/VojefHyW9etz5ZoG2B0bCxr5TvZ7xvWNyfW2uUengupFXmu+g== - dependencies: - base64-js "0.0.8" - buffer "^5.0.0" - events "^1.0.2" - ip-regex "^1.0.3" - process "^0.11.9" - stream-browserify "^1.0.0" - util "^0.10.3" - "@svgr/babel-plugin-add-jsx-attribute@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" @@ -2832,13 +2824,6 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -2968,14 +2953,16 @@ code-push@^2.0.6: superagent-proxy "^2.0.0" yazl "^2.4.1" -code-push@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/code-push/-/code-push-3.1.0.tgz#02b43b8f8cae1d8d281437aa5635c288399a48ca" - integrity sha512-SwEWx/MLEkRh/oXw4kvi8AIVzR7R2HFWKjsZwX3BWMLEudus3kekwuO2ufk9nYxHcDBZjUfao0G3HIkV9P2Cbw== +code-push@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/code-push/-/code-push-3.1.1.tgz#4433e5eb36a71d729e0ff17cfb7b3b4826d8ab9d" + integrity sha512-ZD1uVIushJD/vpxtl42hqWO+ZEcINgjDmuCfs3TtXV6nm5fS5+VQKI1Y5d7fcb6wsMs9oGlIPz89V2FolSx1kw== dependencies: q "^1.4.1" recursive-fs "^1.1.2" slash "^3.0.0" + superagent "^5.1.2" + superagent-proxy "^2.0.0" yazl "^2.4.1" collapse-white-space@^1.0.2: @@ -3118,7 +3105,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.4, concat-stream@^1.4.7, concat-stream@^1.6.0: +concat-stream@^1.4.4, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -4367,11 +4354,6 @@ execall@^2.0.0: dependencies: clone-regexp "^2.1.0" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4436,15 +4418,6 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" - integrity sha1-Etew24UPf/fnCBuvQAVwAGDEYAs= - dependencies: - extend "^3.0.0" - spawn-sync "^1.0.15" - tmp "^0.0.29" - external-editor@^2.0.1, external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" @@ -4589,14 +4562,6 @@ fbjs@^1.0.0: setimmediate "^1.0.5" ua-parser-js "^0.7.18" -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -5519,26 +5484,6 @@ inquirer@3.0.6: strip-ansi "^3.0.0" through "^2.3.6" -inquirer@^1.1.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918" - integrity sha1-TexvMvN+97sLLtPx0aXD9UUHSRg= - dependencies: - ansi-escapes "^1.1.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - external-editor "^1.1.0" - figures "^1.3.5" - lodash "^4.3.0" - mute-stream "0.0.6" - pinkie-promise "^2.0.0" - run-async "^2.2.0" - rx "^4.1.0" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -5578,7 +5523,7 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0: +inquirer@^7.0.0, inquirer@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.3.tgz#f9b4cd2dff58b9f73e8d43759436ace15bed4567" integrity sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw== @@ -7609,11 +7554,6 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mute-stream@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" - integrity sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s= - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -7995,11 +7935,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -8115,12 +8050,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-shim@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -9035,17 +8965,16 @@ react-native-clean-project@^3.1.0: resolved "https://registry.yarnpkg.com/react-native-clean-project/-/react-native-clean-project-3.3.0.tgz#89974c4a291123e6d1f72c32185a012a649f1fa8" integrity sha512-IudFlNsaQd6QcgcbTZcNEXDlrJ9zzRspIUV7yvBX3bfB72Z9et9hIceH9+F+xYSlvwUSB4L/fvkIPosYKa+q9Q== -react-native-code-push@^5.6.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/react-native-code-push/-/react-native-code-push-5.7.0.tgz#38667c1ba5a5e1a6dd1b4271468c6ef6284b3ca4" - integrity sha512-Sy54tRfV9kKH9gcu4mVlcmpGLzPinw3fuSlxxmOdndIH03zZdclys2QU9ipk1zYEgmYhT7ls/MjXFz84YdJL2w== +react-native-code-push@osdnk/react-native-code-push#patch-1: + version "1000.0.0-beta" + resolved "https://codeload.github.com/osdnk/react-native-code-push/tar.gz/af8da1b5c136051d99be2028df448fbb846ae0ea" dependencies: - code-push "^3.0.1" + code-push "^3.1.0" glob "^5.0.15" hoist-non-react-statics "^2.3.1" - inquirer "^1.1.2" + inquirer "^7.0.3" plist "3.0.1" - semver "^5.6.0" + semver "^7.1.1" xcode "1.0.0" react-native-crypto@^2.2.0: @@ -9087,10 +9016,10 @@ react-native-fast-image@andrewschenk-linx/react-native-fast-image#fix-ios-xcode- version "7.0.2" resolved "https://codeload.github.com/andrewschenk-linx/react-native-fast-image/tar.gz/d19ae11a6469de94cb49211d00a7bc002ea76ff8" -react-native-gesture-handler@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.2.tgz#281111550bf1eee10b7feba5278d142169892731" - integrity sha512-Xp03dq4XYVTD0xmWx4DW4eX+ox1NQLjHmbykspTdS5FCNIVIOekVXRLFCw1698/v8dYUHApNo6K3s3BCD8fqPA== +react-native-gesture-handler@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.3.tgz#191b44701fab7ba54c27a2438cb5eaa252666e66" + integrity sha512-y2/jw0uHAQtEPR02PHAah6tdMymrVtZFoHqjlEWdhK807w2sgU5CySYINK/nOTczd+zB4GMX+9euA3VfbGJ5aA== dependencies: hammerjs "^2.0.8" hoist-non-react-statics "^2.3.1" @@ -9147,9 +9076,9 @@ react-native-mail@^4.1.0: resolved "https://registry.yarnpkg.com/react-native-mail/-/react-native-mail-4.1.0.tgz#2ebe2df2211a84862a3aea77316736189e23435b" integrity sha512-3IHQmUQJwFFV7HwDONeIEahhaEvK9u23liqIUQajPy7frk/AoIGhkdKf4FVSTeq+VlUx97qls4uNizP7hBXIIw== -react-native-os@icxcat/react-native-os#master: - version "1.1.0" - resolved "https://codeload.github.com/icxcat/react-native-os/tar.gz/1efb92b990fb4c02475fcc98a8260c3991c59b2d" +react-native-os@software-mansion-labs/react-native-os#41a08e45260b8c1c53c77ad00e13ae954cb9337c: + version "1.2.8" + resolved "https://codeload.github.com/software-mansion-labs/react-native-os/tar.gz/41a08e45260b8c1c53c77ad00e13ae954cb9337c" react-native-permissions@^1.1.1, react-native-permissions@^1.2.1: version "1.2.1" @@ -9182,9 +9111,10 @@ react-native-randombytes@^3.5.3: buffer "^4.9.1" sjcl "^1.0.3" -react-native-reanimated@software-mansion/react-native-reanimated: - version "1.6.0" - resolved "https://codeload.github.com/software-mansion/react-native-reanimated/tar.gz/98d422ef54435b09eb6e10e70492e02d4ae47921" +react-native-reanimated@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.7.0.tgz#896db2576552ac59d288a1f6c7f00afc171f240c" + integrity sha512-FQWSqP605eQVJumuK2HpR+7heF0ZI+qfy4jNguv3Xv8nPFHeIgZaRTXHCEQL2AcuSIj50zy8jGJf5l134QMQWQ== react-native-redash@9.0.0: version "9.0.0" @@ -9214,10 +9144,10 @@ react-native-safe-area-view@mikedemarais/react-native-safe-area-view: dependencies: hoist-non-react-statics "^2.3.1" -react-native-screens@2.0.0-alpha.24: - version "2.0.0-alpha.24" - resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.0.0-alpha.24.tgz#b904b85cdabc2de9717e9a598bb1e63e912bd33e" - integrity sha512-rvqUk8ZAIUUG3jYpJtDr2pLmwt2+VMQcZq4mHWbKGEtBsRjqLpCfAneMS10vUfxEyZw+X0bk+uzMpzrq5rfCfA== +react-native-screens@2.0.0-alpha.25: + version "2.0.0-alpha.25" + resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.0.0-alpha.25.tgz#790d273b41d8dde37aa3e43bc662444aff18cd20" + integrity sha512-IxKOqPxIWwyJhFOvfkxU/NSFzM5PRiyWWL8g0WCPozVU1KNEtJQp7j0sONkTLGQDkGwLbDu0kuGawT1zXMnE5A== dependencies: debounce "^1.2.0" @@ -9254,6 +9184,11 @@ react-native-svg@9.13.6: css-select "^2.0.2" css-tree "^1.0.0-alpha.37" +react-native-tab-view-viewpager-adapter@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/react-native-tab-view-viewpager-adapter/-/react-native-tab-view-viewpager-adapter-1.0.7.tgz#673cacc8e1ce98bcfd9d44dda8f094126c7432be" + integrity sha512-EmH/ETtC5o7VjTWvuZvf3pUdkuR7TaUgWgbroS60FMmrLeO/5bzUpEJS637FkNMy5dXMPAdGzml3/ebjtIsgvg== + react-native-tab-view@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-1.4.1.tgz#f113cd87485808f0c991abec937f70fa380478b9" @@ -9266,6 +9201,11 @@ react-native-tab-view@^2.11.0: resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-2.11.0.tgz#2e57d1f617ccc88c7f452708804f3409f880b700" integrity sha512-vqetlxGO7A8bnqvXcB50MWpRZAImXFrDGz1WCQKdCqe03Ey3ZzENe7yLuWrtBJYlepGfOLAsmCXv+wW82Yfm1w== +react-native-tab-view@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-2.12.0.tgz#357c8632fd16a622ab16e6965779171bb00a85d0" + integrity sha512-rjAicASp7RMiohZ0afjfzqbHDO9leeZCD6d9s9sXwrnf1qNiP6oixforKbmVFr+mgAfa8Q0k4kJwf1w9t0AY+A== + react-native-tcp@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/react-native-tcp/-/react-native-tcp-3.3.2.tgz#b38c153039acac89294caa4991689c003ec62dce" @@ -9920,14 +9860,6 @@ resolve@1.1.7, resolve@1.8.1, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, dependencies: path-parse "^1.0.5" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -10177,6 +10109,11 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.1.tgz#29104598a197d6cbe4733eeecbe968f7b43a9667" + integrity sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A== + semver@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" @@ -10428,7 +10365,7 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socket.io-client@^2.2.0: +socket.io-client@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== @@ -10534,14 +10471,6 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spawn-sync@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" - integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= - dependencies: - concat-stream "^1.4.7" - os-shim "^0.1.2" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -10968,7 +10897,7 @@ superagent-proxy@^2.0.0: debug "^3.1.0" proxy-agent "3" -superagent@^5.1.0: +superagent@^5.1.0, superagent@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/superagent/-/superagent-5.2.1.tgz#9f5f86b705be0865a8c1b9bcde533ab7773ff63a" integrity sha512-46b4Lkwnlz7Ebdv2FBbfuqb3kVkG1jV/SK3EW6NnwL9a3T4h5hHtegNEQfbXvTFbDoUZXId4W3dMgap2f6ic1g== @@ -11200,13 +11129,6 @@ tiny-queue@0.2.0: resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.0.tgz#c49fcb5c87555be1b4a5df7eb87101d5b78bc9dc" integrity sha1-xJ/LXIdVW+G0pd9+uHEB1beLydw= -tmp@^0.0.29: - version "0.0.29" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" - integrity sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA= - dependencies: - os-tmpdir "~1.0.1" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"