diff --git a/.github/actions/eas-build/action.yml b/.github/actions/eas-build/action.yml index 54366197bab67..70a3c0736bd12 100644 --- a/.github/actions/eas-build/action.yml +++ b/.github/actions/eas-build/action.yml @@ -54,7 +54,7 @@ runs: run: | while true do - STATUS=$(eas build:view $BUILD_ID --json 2>/dev/null | jq -r ".status") + STATUS=$(eas build:view $BUILD_ID --json 2>/dev/null | jq -r ".status" || true) if [[ "$STATUS" == "ERRORED" || "$STATUS" == "CANCELLED" ]] ; then echo "Build failed" exit 1; diff --git a/CHANGELOG.md b/CHANGELOG.md index 1739dcf98b983..097d6c411071e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ Package-specific changes not released in any SDK will be added here just before - Updated `@shopify/flash-list` from `1.1.0` to `1.3.0`. ([#19317](https://github.com/expo/expo/pull/19317) by [@kudo](https://github.com/kudo)) - Updated `react-native-view-shot` from `3.3.0` to `3.4.0`. ([#19405](https://github.com/expo/expo/pull/19405) by [@douglowder](https://github.com/douglowder)) - Updated `react-native-webview` from `11.23.0` to `11.23.1`. ([#19375](https://github.com/expo/expo/pull/19375) by [@aleqsio](https://github.com/aleqsio)) +- Updated `react-native-gesture-handler` from `2.5.0` to `2.7.0`. ([#19362](https://github.com/expo/expo/pull/19362) by [@tsapeta](https://github.com/tsapeta)) +- Updated `@react-native-picker/picker` from `2.4.2` to `2.4.6`. ([#19390](https://github.com/expo/expo/pull/19390) by [@aleqsio](https://github.com/aleqsio)) ### 🛠 Breaking changes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 50b831527b545..e9f269b706702 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,7 +37,7 @@ Manual smoke tests are included in `apps/native-component-list`, this is a good ### Set up documentation -If you plan to contribute to the documentation, run `npm run setup:docs`. +If you plan to contribute to the documentation, run `npm run setup:docs`. ### Set up Android @@ -62,7 +62,7 @@ If you will be working with the iOS project, ensure **ruby 2.7** is installed on - Web: `yarn web` - iOS: `yarn ios` - Android: `yarn android` - - If you are working on Linux, make sure to set the `TERMINAL` environment variable to your preferred terminal application. (e.g. `export TERMINAL="Konsole"`) + - If you are working on Linux, make sure to set the `TERMINAL` environment variable to your preferred terminal application. (e.g. `export TERMINAL="konsole"`) 3. You are now running the `test-suite` app via the `bare-expo` project. The next section explains how you can begin to make changes to SDK packages. diff --git a/android/expoview/build.gradle b/android/expoview/build.gradle index 819e439d11c1d..2507a96d5b25b 100644 --- a/android/expoview/build.gradle +++ b/android/expoview/build.gradle @@ -411,7 +411,7 @@ dependencies { // expo-av // See explanation in expo-av/build.gradle - api 'com.google.android.exoplayer:extension-okhttp:2.13.3' + api 'com.google.android.exoplayer:extension-okhttp:2.18.1' // expo-application api 'com.android.installreferrer:installreferrer:1.0' diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentPackage.kt b/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentPackage.kt index 4575933434a65..d463e6a680e33 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentPackage.kt +++ b/android/expoview/src/main/java/versioned/host/exp/exponent/ExponentPackage.kt @@ -9,6 +9,8 @@ import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.uimanager.ViewManager import com.shopify.reactnative.flash_list.ReactNativeFlashListPackage import com.shopify.reactnative.skia.RNSkiaPackage +import com.swmansion.gesturehandler.RNGestureHandlerPackage +import com.swmansion.gesturehandler.react.RNGestureHandlerModule import expo.modules.adapters.react.ReactModuleRegistryProvider import expo.modules.core.interfaces.Package import expo.modules.core.interfaces.SingletonModule @@ -26,8 +28,6 @@ import org.json.JSONException import versioned.host.exp.exponent.modules.api.* import versioned.host.exp.exponent.modules.api.cognito.RNAWSCognitoModule import versioned.host.exp.exponent.modules.api.components.datetimepicker.RNDateTimePickerPackage -import versioned.host.exp.exponent.modules.api.components.gesturehandler.react.RNGestureHandlerModule -import versioned.host.exp.exponent.modules.api.components.gesturehandler.RNGestureHandlerPackage import versioned.host.exp.exponent.modules.api.components.lottie.LottiePackage import versioned.host.exp.exponent.modules.api.components.maps.MapsPackage import versioned.host.exp.exponent.modules.api.components.maskedview.RNCMaskedViewPackage diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RNGestureHandlerPackage.kt b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RNGestureHandlerPackage.kt deleted file mode 100644 index 8dbd9f55f8ed9..0000000000000 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RNGestureHandlerPackage.kt +++ /dev/null @@ -1,30 +0,0 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler -import host.exp.expoview.BuildConfig - -import com.facebook.react.ReactPackage -import com.facebook.react.bridge.NativeModule -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.uimanager.ViewManager -import com.facebook.soloader.SoLoader - -import versioned.host.exp.exponent.modules.api.components.gesturehandler.react.RNGestureHandlerModule -import versioned.host.exp.exponent.modules.api.components.gesturehandler.react.RNGestureHandlerRootViewManager -import versioned.host.exp.exponent.modules.api.components.gesturehandler.react.RNGestureHandlerButtonViewManager - -class RNGestureHandlerPackage : ReactPackage { - override fun createNativeModules(reactContext: ReactApplicationContext): List { - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // For Fabric, we load c++ native library here, this triggers gesture handler's - // Fabric component registration which is necessary in order to avoid asking users - // to manually add init calls in their application code. - // This should no longer be needed if RN's autolink mechanism has Fabric support - SoLoader.loadLibrary("rngesturehandler_modules") - } - return listOf(RNGestureHandlerModule(reactContext)) - } - - override fun createViewManagers(reactContext: ReactApplicationContext) = - listOf>( - RNGestureHandlerRootViewManager(), - RNGestureHandlerButtonViewManager()) -} diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/reanimated/NativeProxy.java b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/reanimated/NativeProxy.java index 6d2ab5d7802cb..02fd6797927a9 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/reanimated/NativeProxy.java +++ b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/reanimated/NativeProxy.java @@ -15,7 +15,8 @@ import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.events.RCTEventEmitter; -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandlerStateManager; +import com.swmansion.common.GestureHandlerStateManager; + import versioned.host.exp.exponent.modules.api.reanimated.layoutReanimation.AnimationsManager; import versioned.host.exp.exponent.modules.api.reanimated.layoutReanimation.LayoutAnimations; import versioned.host.exp.exponent.modules.api.reanimated.layoutReanimation.NativeMethodsHolder; diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt index 6a51a40817bee..601e31c4cf3e8 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt +++ b/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt @@ -5,6 +5,7 @@ import com.facebook.react.modules.network.NetworkingModule import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.upstream.TransferListener +import expo.modules.av.player.datasource.CustomHeadersOkHttpDataSourceFactory class SharedCookiesDataSourceFactory( reactApplicationContext: ReactContext, diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/build.gradle b/android/vendored/unversioned/react-native-gesture-handler/android/build.gradle new file mode 100644 index 0000000000000..59e09d694a166 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/build.gradle @@ -0,0 +1,229 @@ +import groovy.json.JsonSlurper +import java.nio.file.Paths + +buildscript { + def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['RNGH_kotlinVersion'] + + repositories { + mavenCentral() + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") + } +} + +def isNewArchitectureEnabled() { + // To opt-in for the New Architecture, you can either: + // - Set `newArchEnabled` to true inside the `gradle.properties` file + // - Invoke gradle with `-newArchEnabled=true` + // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} + +static def findNodeModulePath(baseDir, packageName) { + def basePath = baseDir.toPath().normalize() + // Node's module resolution algorithm searches up to the root directory, + // after which the base path will be null + while (basePath) { + def candidatePath = Paths.get(basePath.toString(), "node_modules", packageName) + if (candidatePath.toFile().exists()) { + return candidatePath.toString() + } + basePath = basePath.getParent() + } + return null +} + +def findNodeModulePath(packageName) { + // Don't start in the project dir, as its path ends with node_modules/react-native-gesture-handler/android + // we want to go two levels up, so we end up in the first_node modules and eventually + // search upwards if the package is not found there + return findNodeModulePath(projectDir.toPath().parent.parent.toFile(), packageName) +} + +if (isNewArchitectureEnabled()) { + apply plugin: 'com.facebook.react' +} +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +def safeExtGet(prop, fallback) { + rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback +} + +// Check whether Reanimated 2.3 or higher is installed alongside Gesture Handler +def shouldUseCommonInterfaceFromReanimated() { + def reanimated = rootProject.subprojects.find { it.name == 'react-native-reanimated' } + if (reanimated != null) { + def inputFile = new File(reanimated.projectDir, '../package.json') + def json = new JsonSlurper().parseText(inputFile.text) + def reanimatedVersion = json.version as String + def (major, minor, patch) = reanimatedVersion.tokenize('.') + return (Integer.parseInt(major) == 2 && Integer.parseInt(minor) >= 3) || Integer.parseInt(major) == 3 + } else { + return false + } +} + +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} + +def shouldAssertNoMultipleInstances() { + if (rootProject.hasProperty("disableMultipleInstancesCheck")) { + return rootProject.property("disableMultipleInstancesCheck") != "true" + } else { + return true + } +} + +def noMultipleInstancesAssertion() { + Set files = fileTree(rootDir.parent) { + include "node_modules/**/react-native-gesture-handler/package.json" + exclude "**/.yarn/**" + }.files + + if (files.size() > 1) { + String parsedLocation = files.stream().map({ File file -> "- " + file.toString().replace("/package.json", "") }).collect().join("\n") + String exceptionMessage = "\n[Gesture Handler] Multiple instances of Gesture Handler were detected. Only one instance of react-native-gesture-handler can be installed in a project. You need to resolve the conflict manually. Check out the documentation: https://docs.swmansion.com/react-native-gesture-handler/docs/troubleshooting#multiple-instances-of-gesture-handler-were-detected \n\nConflict between: \n" + parsedLocation + "\n"; + throw new Exception(exceptionMessage); + } +} + +def REACT_NATIVE_DIR = findNodeModulePath("react-native") + +def assertionTask = task assertNoMultipleInstances { + onlyIf { shouldAssertNoMultipleInstances() } + doFirst { + noMultipleInstancesAssertion() + } +} + +tasks.preBuild { + dependsOn assertionTask +} + +repositories { + mavenCentral() +} + +android { + compileSdkVersion safeExtGet("compileSdkVersion", 28) + + // Used to override the NDK path/version on internal CI or by allowing + // users to customize the NDK path/version from their root project (e.g. for M1 support) + if (rootProject.hasProperty("ndkPath")) { + ndkPath rootProject.ext.ndkPath + } + if (rootProject.hasProperty("ndkVersion")) { + ndkVersion rootProject.ext.ndkVersion + } + + defaultConfig { + minSdkVersion safeExtGet('minSdkVersion', 16) + targetSdkVersion safeExtGet('targetSdkVersion', 28) + versionCode 1 + versionName "1.0" + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + if (isNewArchitectureEnabled()) { + var appProject = rootProject.allprojects.find {it.plugins.hasPlugin('com.android.application')} + externalNativeBuild { + cmake { + cppFlags "-O2 -frtti -fexceptions -Wall -Wno-unused-variable -fstack-protector-all" + arguments "-DAPP_BUILD_DIR=${appProject.buildDir}", + "-DREACT_NATIVE_DIR=${REACT_NATIVE_DIR}", + "-DANDROID_STL=c++_shared" + abiFilters (*reactNativeArchitectures()) + } + } + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + if (isNewArchitectureEnabled()) { + externalNativeBuild { + cmake { + path "src/main/jni/CMakeLists.txt" + } + } + } + + packagingOptions { + // For some reason gradle only complains about the duplicated version of libreact_render libraries + // while there are more libraries copied in intermediates folder of the lib build directory, we exclude + // only the ones that make the build fail (ideally we should only include libgesturehandler but we + // are only allowed to specify exclude patterns) + exclude "**/libreact_render*.so" + } + + // Include "lib/" as sources, unfortunately react-native link can't handle + // setting up alternative gradle modules. We still have "lib" defined as a + // standalone gradle module just to be used in AndroidNativeExample + sourceSets.main { + java { + srcDirs += 'lib/src/main/java' + + // Include "common/" only when it's not provided by Reanimated to mitigate + // multiple definitions of the same class preventing build + if (shouldUseCommonInterfaceFromReanimated()) { + srcDirs += 'reanimated/src/main/java' + } else { + srcDirs += 'common/src/main/java' + srcDirs += 'noreanimated/src/main/java' + } + + if (isNewArchitectureEnabled()) { + srcDirs += 'src/fabric/java' + } else { + // this folder also includes files from codegen so the library can compile with + // codegen turned off + srcDirs += 'src/paper/java' + } + } + } +} + +def kotlin_version = safeExtGet('kotlinVersion', project.properties['RNGH_kotlinVersion']) + +dependencies { + //noinspection GradleDynamicVersion + if (isNewArchitectureEnabled()) { + implementation project(':ReactAndroid') + } else { + implementation 'com.facebook.react:react-native:+' + } + + if (shouldUseCommonInterfaceFromReanimated()) { + // Include Reanimated as dependency to load the common interface + implementation (rootProject.subprojects.find { it.name == 'react-native-reanimated' }) { + exclude group:'com.facebook.fbjni' // resolves "Duplicate class com.facebook.jni.CppException" + } + } + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation "androidx.core:core-ktx:1.6.0" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} + +if (isNewArchitectureEnabled()) { + // Resolves "LOCAL_SRC_FILES points to a missing file, Check that libfb.so exists or that its path is correct". + tasks.whenTaskAdded { task -> + if (task.name.contains("configureCMakeDebug")) { + rootProject.getTasksByName("packageReactNdkDebugLibs", true).forEach { + task.dependsOn(it) + } + } + // We want to add a dependency for both configureCMakeRelease and configureCMakeRelWithDebInfo + if (task.name.contains("configureCMakeRel")) { + rootProject.getTasksByName("packageReactNdkReleaseLibs", true).forEach { + task.dependsOn(it) + } + } + } +} diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/common/GestureHandlerStateManager.kt b/android/vendored/unversioned/react-native-gesture-handler/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt similarity index 58% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/common/GestureHandlerStateManager.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt index 95b91702dbd37..4e754cdbf1a0d 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/common/GestureHandlerStateManager.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.common interface GestureHandlerStateManager { fun setGestureHandlerState(handlerTag: Int, newState: Int) diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/gradle.properties b/android/vendored/unversioned/react-native-gesture-handler/android/gradle.properties new file mode 100644 index 0000000000000..bb5cbe32541a0 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/gradle.properties @@ -0,0 +1,19 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +RNGH_kotlinVersion=1.6.21 diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/AndroidManifest.xml b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/AndroidManifest.xml new file mode 100644 index 0000000000000..5fa4c9c519414 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/Extensions.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt similarity index 85% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/Extensions.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt index 1033096d6a915..a0c959ddec9a9 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/Extensions.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import com.facebook.react.bridge.ReactContext import com.facebook.react.modules.core.DeviceEventManagerModule diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/FlingGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt similarity index 83% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/FlingGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt index c73bc6f7d1572..fc2c8ed019bd0 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/FlingGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt @@ -1,6 +1,7 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.os.Handler +import android.os.Looper import android.view.MotionEvent class FlingGestureHandler : GestureHandler() { @@ -27,7 +28,7 @@ class FlingGestureHandler : GestureHandler() { begin() maxNumberOfPointersSimultaneously = 1 if (handler == null) { - handler = Handler() // lazy delegate? + handler = Handler(Looper.getMainLooper()) // lazy delegate? } else { handler!!.removeCallbacksAndMessages(null) } @@ -62,19 +63,19 @@ class FlingGestureHandler : GestureHandler() { } } - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { val state = state if (state == STATE_UNDETERMINED) { - startFling(event) + startFling(sourceEvent) } if (state == STATE_BEGAN) { - tryEndFling(event) - if (event.pointerCount > maxNumberOfPointersSimultaneously) { - maxNumberOfPointersSimultaneously = event.pointerCount + tryEndFling(sourceEvent) + if (sourceEvent.pointerCount > maxNumberOfPointersSimultaneously) { + maxNumberOfPointersSimultaneously = sourceEvent.pointerCount } - val action = event.actionMasked + val action = sourceEvent.actionMasked if (action == MotionEvent.ACTION_UP) { - endFling(event) + endFling(sourceEvent) } } } diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt similarity index 91% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt index f99caa3e9b37d..f690e42efb771 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt @@ -1,9 +1,9 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler -import host.exp.expoview.BuildConfig +package com.swmansion.gesturehandler import android.app.Activity import android.content.Context import android.content.ContextWrapper +import android.graphics.PointF import android.graphics.Rect import android.view.MotionEvent import android.view.MotionEvent.PointerCoords @@ -14,7 +14,7 @@ import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.bridge.WritableArray import com.facebook.react.uimanager.PixelUtil -import versioned.host.exp.exponent.modules.api.components.gesturehandler.react.RNGestureHandlerTouchEvent +import com.swmansion.gesturehandler.react.RNGestureHandlerTouchEvent import java.lang.IllegalStateException import java.util.* @@ -326,7 +326,7 @@ open class GestureHandler + val padLeft = hitSlop[HIT_SLOP_LEFT_IDX] + val padTop = hitSlop[HIT_SLOP_TOP_IDX] + val padRight = hitSlop[HIT_SLOP_RIGHT_IDX] + val padBottom = hitSlop[HIT_SLOP_BOTTOM_IDX] if (hitSlopSet(padLeft)) { left -= padLeft } @@ -603,8 +606,8 @@ open class GestureHandler, otherHandler: GestureHandler<*>): Boolean diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandlerOrchestrator.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt similarity index 83% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandlerOrchestrator.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt index 861de375e7ab5..d4380a2faaed8 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandlerOrchestrator.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt @@ -1,10 +1,11 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.graphics.Matrix import android.graphics.PointF import android.view.MotionEvent import android.view.View import android.view.ViewGroup +import android.widget.EditText import java.util.* class GestureHandlerOrchestrator( @@ -128,6 +129,13 @@ class GestureHandlerOrchestrator( if (newState == GestureHandler.STATE_END) { // gesture has ended, we need to kill the awaiting handler otherHandler.cancel() + if (otherHandler.state == GestureHandler.STATE_END) { + // Handle edge case, where discrete gestures end immediately after activation thus + // their state is set to END and when the gesture they are waiting for activates they + // should be cancelled, however `cancel` was never sent as gestures were already in the END state. + // Send synthetic BEGAN -> CANCELLED to properly handle JS logic + otherHandler.dispatchStateChange(GestureHandler.STATE_CANCELLED, GestureHandler.STATE_BEGAN) + } otherHandler.isAwaiting = false } else { // gesture has failed recognition, we may try activating @@ -142,9 +150,12 @@ class GestureHandlerOrchestrator( } else if (prevState == GestureHandler.STATE_ACTIVE || prevState == GestureHandler.STATE_END) { if (handler.isActive) { handler.dispatchStateChange(newState, prevState) - } else if (prevState == GestureHandler.STATE_ACTIVE) { - // handle edge case where handler awaiting for another one tries to activate but finishes - // before the other would not send state change event upon ending + } else if (prevState == GestureHandler.STATE_ACTIVE && (newState == GestureHandler.STATE_CANCELLED || newState == GestureHandler.STATE_FAILED)) { + // Handle edge case where handler awaiting for another one tries to activate but finishes + // before the other would not send state change event upon ending. Note that we only want + // to do this if the newState is either CANCELLED or FAILED, if it is END we still want to + // wait for the other handler to finish as in that case synthetic events will be sent by the + // makeActive method. handler.dispatchStateChange(newState, GestureHandler.STATE_BEGAN) } } else if (prevState != GestureHandler.STATE_UNDETERMINED || newState != GestureHandler.STATE_CANCELLED) { @@ -231,7 +242,7 @@ class GestureHandlerOrchestrator( } } - private fun deliverEventToGestureHandler(handler: GestureHandler<*>, event: MotionEvent) { + private fun deliverEventToGestureHandler(handler: GestureHandler<*>, sourceEvent: MotionEvent) { if (!isViewAttachedUnderWrapper(handler.view)) { handler.cancel() return @@ -239,18 +250,9 @@ class GestureHandlerOrchestrator( if (!handler.wantEvents()) { return } - val action = event.actionMasked - val coords = tempCoords - extractCoordsForView(handler.view, event, coords) - val oldX = event.x - val oldY = event.y - // TODO: we may consider scaling events if necessary using MotionEvent.transform - // for now the events are only offset to the top left corner of the view but if - // view or any ot the parents is scaled the other pointers position will not reflect - // their actual place in the view. On the other hand not scaling seems like a better - // approach when we want to use pointer coordinates to calculate velocity or distance - // for pinch so I don't know yet if we should transform or not... - event.setLocation(coords[0], coords[1]) + + val action = sourceEvent.actionMasked + val event = transformEventToViewCoords(handler.view, MotionEvent.obtain(sourceEvent)) // Touch events are sent before the handler itself has a chance to process them, // mainly because `onTouchesUp` shoul be send befor gesture finishes. This means that @@ -266,7 +268,7 @@ class GestureHandlerOrchestrator( if (!handler.isAwaiting || action != MotionEvent.ACTION_MOVE) { val isFirstEvent = handler.state == 0 - handler.handle(event) + handler.handle(event, sourceEvent) if (handler.isActive) { // After handler is done waiting for other one to fail its progress should be // reset, otherwise there may be a visible jump in values sent by the handler. @@ -294,7 +296,7 @@ class GestureHandlerOrchestrator( } } - event.setLocation(oldX, oldY) + event.recycle() } /** @@ -318,19 +320,75 @@ class GestureHandlerOrchestrator( return parent === wrapperView } - private fun extractCoordsForView(view: View?, event: MotionEvent, outputCoords: FloatArray) { - if (view === wrapperView) { - outputCoords[0] = event.x - outputCoords[1] = event.y - return + /** + * Transforms an event in the coordinates of wrapperView into the coordinate space of the received view. + * + * This modifies and returns the same event as it receives + * + * @param view - view to which coordinate space the event should be transformed + * @param event - event to transform + */ + fun transformEventToViewCoords(view: View?, event: MotionEvent): MotionEvent { + if (view == null) { + return event + } + + val parent = view.parent as? ViewGroup + // Events are passed down to the orchestrator by the wrapperView, so they are already in the + // relevant coordinate space. We want to stop traversing the tree when we reach it. + if (parent != wrapperView) { + transformEventToViewCoords(parent, event) + } + + if (parent != null) { + val localX = event.x + parent.scrollX - view.left + val localY = event.y + parent.scrollY - view.top + event.setLocation(localX, localY) + } + + if (!view.matrix.isIdentity) { + view.matrix.invert(inverseMatrix) + event.transform(inverseMatrix) + } + + return event + } + + /** + * Transforms a point in the coordinates of wrapperView into the coordinate space of the received view. + * + * This modifies and returns the same point as it receives + * + * @param view - view to which coordinate space the point should be transformed + * @param point - point to transform + */ + fun transformPointToViewCoords(view: View?, point: PointF): PointF { + if (view == null) { + return point + } + + val parent = view.parent as? ViewGroup + // Events are passed down to the orchestrator by the wrapperView, so they are already in the + // relevant coordinate space. We want to stop traversing the tree when we reach it. + if (parent != wrapperView) { + transformPointToViewCoords(parent, point) + } + + if (parent != null) { + point.x += parent.scrollX - view.left + point.y += parent.scrollY - view.top + } + + if (!view.matrix.isIdentity) { + view.matrix.invert(inverseMatrix) + tempCoords[0] = point.x + tempCoords[1] = point.y + inverseMatrix.mapPoints(tempCoords) + point.x = tempCoords[0] + point.y = tempCoords[1] } - require(!(view == null || view.parent !is ViewGroup)) { "Parent is null? View is no longer in the tree" } - val parent = view.parent as ViewGroup - extractCoordsForView(parent, event, outputCoords) - val childPoint = tempPoint - transformTouchPointToViewCoords(outputCoords[0], outputCoords[1], parent, view, childPoint) - outputCoords[0] = childPoint.x - outputCoords[1] = childPoint.y + + return point } private fun addAwaitingHandler(handler: GestureHandler<*>) { @@ -440,7 +498,7 @@ class GestureHandlerOrchestrator( val child = viewConfigHelper.getChildInDrawingOrderAtIndex(viewGroup, i) if (canReceiveEvents(child)) { val childPoint = tempPoint - transformTouchPointToViewCoords(coords[0], coords[1], viewGroup, child, childPoint) + transformPointToChildViewCoords(coords[0], coords[1], viewGroup, child, childPoint) val restoreX = coords[0] val restoreY = coords[1] coords[0] = childPoint.x @@ -474,14 +532,24 @@ class GestureHandlerOrchestrator( } PointerEventsConfig.BOX_NONE -> { // This view can't be the target, but its children might - if (view is ViewGroup) { - extractGestureHandlers(view, coords, pointerId).also { found -> - // A child view is handling touch, also extract handlers attached to this view - if (found) { - recordViewHandlersForPointer(view, coords, pointerId) + when (view) { + is ViewGroup -> { + extractGestureHandlers(view, coords, pointerId).also { found -> + // A child view is handling touch, also extract handlers attached to this view + if (found) { + recordViewHandlersForPointer(view, coords, pointerId) + } } } - } else false + // When has editable set to `false` getPointerEventsConfigForView returns + // `BOX_NONE` as it's `isEnabled` property is false. In this case we still want to extract + // handlers attached to the text input, as it makes sense that gestures would work on a + // non-editable TextInput. + is EditText -> { + recordViewHandlersForPointer(view, coords, pointerId) + } + else -> false + } } PointerEventsConfig.AUTO -> { // Either this view or one of its children is the target @@ -543,7 +611,7 @@ class GestureHandlerOrchestrator( return isLeafOrTransparent && isTransformedTouchPointInView(coords[0], coords[1], view) } - private fun transformTouchPointToViewCoords( + private fun transformPointToChildViewCoords( x: Float, y: Float, parent: ViewGroup, diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandlerRegistry.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt similarity index 67% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandlerRegistry.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt index d0f721b018970..f8f51723cd522 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureHandlerRegistry.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.view.View import java.util.* diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureUtils.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt similarity index 78% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureUtils.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt index def114cba35b2..15f9c395c92ec 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/GestureUtils.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt @@ -1,17 +1,16 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.view.MotionEvent object GestureUtils { fun getLastPointerX(event: MotionEvent, averageTouches: Boolean): Float { - val offset = event.rawX - event.x val excludeIndex = if (event.actionMasked == MotionEvent.ACTION_POINTER_UP) event.actionIndex else -1 return if (averageTouches) { var sum = 0f var count = 0 for (i in 0 until event.pointerCount) { if (i != excludeIndex) { - sum += event.getX(i) + offset + sum += event.getX(i) count++ } } @@ -21,19 +20,18 @@ object GestureUtils { if (lastPointerIdx == excludeIndex) { lastPointerIdx-- } - event.getX(lastPointerIdx) + offset + event.getX(lastPointerIdx) } } fun getLastPointerY(event: MotionEvent, averageTouches: Boolean): Float { - val offset = event.rawY - event.y val excludeIndex = if (event.actionMasked == MotionEvent.ACTION_POINTER_UP) event.actionIndex else -1 return if (averageTouches) { var sum = 0f var count = 0 for (i in 0 until event.pointerCount) { if (i != excludeIndex) { - sum += event.getY(i) + offset + sum += event.getY(i) count++ } } @@ -43,7 +41,7 @@ object GestureUtils { if (lastPointerIdx == excludeIndex) { lastPointerIdx -= 1 } - event.getY(lastPointerIdx) + offset + event.getY(lastPointerIdx) } } } diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/LongPressGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt similarity index 80% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/LongPressGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt index e8073b396a8ca..47a5222c25f09 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/LongPressGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt @@ -1,7 +1,8 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.content.Context import android.os.Handler +import android.os.Looper import android.os.SystemClock import android.view.MotionEvent @@ -19,7 +20,9 @@ class LongPressGestureHandler(context: Context) : GestureHandler 0) { handler!!.postDelayed({ activate() }, minDurationMs) } else if (minDurationMs == 0L) { activate() } } - if (event.actionMasked == MotionEvent.ACTION_UP) { + if (sourceEvent.actionMasked == MotionEvent.ACTION_UP) { handler?.let { it.removeCallbacksAndMessages(null) handler = null @@ -60,8 +63,8 @@ class LongPressGestureHandler(context: Context) : GestureHandler maxDistSq) { if (state == STATE_ACTIVE) { diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ManualGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt similarity index 58% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ManualGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt index 11e713da5db22..f55ecd68f4f40 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ManualGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt @@ -1,9 +1,9 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.view.MotionEvent class ManualGestureHandler : GestureHandler() { - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { if (state == STATE_UNDETERMINED) { begin() } diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/NativeViewGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt similarity index 97% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/NativeViewGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt index 19eedfc845326..1ab3048169087 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/NativeViewGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.os.SystemClock import android.view.MotionEvent @@ -9,7 +9,8 @@ import com.facebook.react.views.textinput.ReactEditText class NativeViewGestureHandler : GestureHandler() { private var shouldActivateOnStart = false - private var disallowInterruption = false + var disallowInterruption = false + private set private var hook: NativeViewGestureHandlerHook = defaultHook @@ -74,7 +75,7 @@ class NativeViewGestureHandler : GestureHandler() { } } - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { val view = view!! if (event.actionMasked == MotionEvent.ACTION_UP) { view.onTouchEvent(event) diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/OnTouchEventListener.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt similarity index 79% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/OnTouchEventListener.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt index b82986a050e00..2bdd7fa75e632 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/OnTouchEventListener.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.view.MotionEvent diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PanGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt similarity index 91% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PanGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt index 999f245ab80e9..7caf07fa55fc9 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PanGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt @@ -1,12 +1,13 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.content.Context import android.os.Handler +import android.os.Looper import android.view.MotionEvent import android.view.VelocityTracker import android.view.ViewConfiguration -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureUtils.getLastPointerX -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureUtils.getLastPointerY +import com.swmansion.gesturehandler.GestureUtils.getLastPointerX +import com.swmansion.gesturehandler.GestureUtils.getLastPointerY class PanGestureHandler(context: Context?) : GestureHandler() { var velocityX = 0f @@ -204,41 +205,41 @@ class PanGestureHandler(context: Context?) : GestureHandler() return failOffsetYEnd != MIN_VALUE_IGNORE && dy > failOffsetYEnd } - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { val state = state - val action = event.actionMasked + val action = sourceEvent.actionMasked if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN) { // update offset if new pointer gets added or removed offsetX += lastX - startX offsetY += lastY - startY // reset starting point - lastX = getLastPointerX(event, averageTouches) - lastY = getLastPointerY(event, averageTouches) + lastX = getLastPointerX(sourceEvent, averageTouches) + lastY = getLastPointerY(sourceEvent, averageTouches) startX = lastX startY = lastY } else { - lastX = getLastPointerX(event, averageTouches) - lastY = getLastPointerY(event, averageTouches) + lastX = getLastPointerX(sourceEvent, averageTouches) + lastY = getLastPointerY(sourceEvent, averageTouches) } - if (state == STATE_UNDETERMINED && event.pointerCount >= minPointers) { + if (state == STATE_UNDETERMINED && sourceEvent.pointerCount >= minPointers) { resetProgress() offsetX = 0f offsetY = 0f velocityX = 0f velocityY = 0f velocityTracker = VelocityTracker.obtain() - addVelocityMovement(velocityTracker, event) + addVelocityMovement(velocityTracker, sourceEvent) begin() if (activateAfterLongPress > 0) { if (handler == null) { - handler = Handler() + handler = Handler(Looper.getMainLooper()) } handler!!.postDelayed(activateDelayed, activateAfterLongPress) } } else if (velocityTracker != null) { - addVelocityMovement(velocityTracker, event) + addVelocityMovement(velocityTracker, sourceEvent) velocityTracker!!.computeCurrentVelocity(1000) velocityX = velocityTracker!!.xVelocity velocityY = velocityTracker!!.yVelocity @@ -249,14 +250,14 @@ class PanGestureHandler(context: Context?) : GestureHandler() } else { fail() } - } else if (action == MotionEvent.ACTION_POINTER_DOWN && event.pointerCount > maxPointers) { + } else if (action == MotionEvent.ACTION_POINTER_DOWN && sourceEvent.pointerCount > maxPointers) { // When new finger is placed down (POINTER_DOWN) we check if MAX_POINTERS is not exceeded if (state == STATE_ACTIVE) { cancel() } else { fail() } - } else if (action == MotionEvent.ACTION_POINTER_UP && state == STATE_ACTIVE && event.pointerCount < minPointers) { + } else if (action == MotionEvent.ACTION_POINTER_UP && state == STATE_ACTIVE && sourceEvent.pointerCount < minPointers) { // When finger is lifted up (POINTER_UP) and the number of pointers falls below MIN_POINTERS // threshold, we only want to take an action when the handler has already activated. Otherwise // we can still expect more fingers to be placed on screen and fulfill MIN_POINTERS criteria. diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PinchGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt similarity index 75% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PinchGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt index 56ec6acc25c05..6f6afd72557da 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PinchGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt @@ -1,5 +1,6 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler +import android.graphics.PointF import android.view.MotionEvent import android.view.ViewConfiguration import kotlin.math.abs @@ -9,10 +10,10 @@ class PinchGestureHandler : GestureHandler() { private set var velocity = 0.0 private set - val focalPointX: Float - get() = scaleGestureDetector?.focusX ?: Float.NaN - val focalPointY: Float - get() = scaleGestureDetector?.focusY ?: Float.NaN + var focalPointX: Float = Float.NaN + private set + var focalPointY: Float = Float.NaN + private set private var scaleGestureDetector: ScaleGestureDetector? = null private var startingSpan = 0f @@ -47,7 +48,7 @@ class PinchGestureHandler : GestureHandler() { } } - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { if (state == STATE_UNDETERMINED) { val context = view!!.context resetProgress() @@ -56,14 +57,19 @@ class PinchGestureHandler : GestureHandler() { spanSlop = configuration.scaledTouchSlop.toFloat() begin() } - scaleGestureDetector?.onTouchEvent(event) - var activePointers = event.pointerCount - if (event.actionMasked == MotionEvent.ACTION_POINTER_UP) { + scaleGestureDetector?.onTouchEvent(sourceEvent) + scaleGestureDetector?.let { + val point = transformPoint(PointF(it.focusX, it.focusY)) + this.focalPointX = point.x + this.focalPointY = point.y + } + var activePointers = sourceEvent.pointerCount + if (sourceEvent.actionMasked == MotionEvent.ACTION_POINTER_UP) { activePointers -= 1 } if (state == STATE_ACTIVE && activePointers < 2) { end() - } else if (event.actionMasked == MotionEvent.ACTION_UP) { + } else if (sourceEvent.actionMasked == MotionEvent.ACTION_UP) { fail() } } @@ -78,6 +84,8 @@ class PinchGestureHandler : GestureHandler() { override fun onReset() { scaleGestureDetector = null + focalPointX = Float.NaN + focalPointY = Float.NaN resetProgress() } diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PointerEventsConfig.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PointerEventsConfig.kt similarity index 84% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PointerEventsConfig.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PointerEventsConfig.kt index 90b400a388d6c..d85ef12f3607e 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/PointerEventsConfig.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/PointerEventsConfig.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler enum class PointerEventsConfig { /** diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RotationGestureDetector.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt similarity index 98% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RotationGestureDetector.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt index 5fd4ff3a8fcbc..6da6049ddc4a8 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RotationGestureDetector.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.view.MotionEvent import kotlin.math.atan2 diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RotationGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt similarity index 72% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RotationGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt index be9ff4b61e942..e86c7447c1dad 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/RotationGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt @@ -1,7 +1,8 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler +import android.graphics.PointF import android.view.MotionEvent -import versioned.host.exp.exponent.modules.api.components.gesturehandler.RotationGestureDetector.OnRotationGestureListener +import com.swmansion.gesturehandler.RotationGestureDetector.OnRotationGestureListener import kotlin.math.abs class RotationGestureHandler : GestureHandler() { @@ -10,11 +11,10 @@ class RotationGestureHandler : GestureHandler() { private set var velocity = 0.0 private set - - val anchorX: Float - get() = rotationGestureDetector?.anchorX ?: Float.NaN - val anchorY: Float - get() = rotationGestureDetector?.anchorY ?: Float.NaN + var anchorX: Float = Float.NaN + private set + var anchorY: Float = Float.NaN + private set init { setShouldCancelWhenOutside(false) @@ -41,14 +41,19 @@ class RotationGestureHandler : GestureHandler() { } } - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { if (state == STATE_UNDETERMINED) { resetProgress() rotationGestureDetector = RotationGestureDetector(gestureListener) begin() } - rotationGestureDetector?.onTouchEvent(event) - if (event.actionMasked == MotionEvent.ACTION_UP) { + rotationGestureDetector?.onTouchEvent(sourceEvent) + rotationGestureDetector?.let { + val point = transformPoint(PointF(it.anchorX, it.anchorY)) + anchorX = point.x + anchorY = point.y + } + if (sourceEvent.actionMasked == MotionEvent.ACTION_UP) { if (state == STATE_ACTIVE) { end() } else { @@ -67,6 +72,8 @@ class RotationGestureHandler : GestureHandler() { override fun onReset() { rotationGestureDetector = null + anchorX = Float.NaN + anchorY = Float.NaN resetProgress() } diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ScaleGestureDetector.java b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java similarity index 99% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ScaleGestureDetector.java rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java index 087600881cf23..32c266367baf5 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ScaleGestureDetector.java +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ScaleGestureDetector.java @@ -5,7 +5,7 @@ * Modified line 189 to set initial min span to 0 instead of copying it from the system configuration */ -package versioned.host.exp.exponent.modules.api.components.gesturehandler; +package com.swmansion.gesturehandler; import android.content.Context; import android.os.Build; diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/TapGestureHandler.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt similarity index 82% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/TapGestureHandler.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt index 78aa19c4f50b7..048abd7b1123d 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/TapGestureHandler.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt @@ -1,9 +1,10 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.os.Handler +import android.os.Looper import android.view.MotionEvent -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureUtils.getLastPointerX -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureUtils.getLastPointerY +import com.swmansion.gesturehandler.GestureUtils.getLastPointerX +import com.swmansion.gesturehandler.GestureUtils.getLastPointerY import kotlin.math.abs class TapGestureHandler : GestureHandler() { @@ -70,7 +71,7 @@ class TapGestureHandler : GestureHandler() { private fun startTap() { if (handler == null) { - handler = Handler() // TODO: lazy init (handle else branch correctly) + handler = Handler(Looper.getMainLooper()) // TODO: lazy init (handle else branch correctly) } else { handler!!.removeCallbacksAndMessages(null) } @@ -79,7 +80,7 @@ class TapGestureHandler : GestureHandler() { private fun endTap() { if (handler == null) { - handler = Handler() + handler = Handler(Looper.getMainLooper()) } else { handler!!.removeCallbacksAndMessages(null) } @@ -103,28 +104,28 @@ class TapGestureHandler : GestureHandler() { return maxDistSq != MAX_VALUE_IGNORE && dist > maxDistSq } - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { val state = state - val action = event.actionMasked + val action = sourceEvent.actionMasked if (state == STATE_UNDETERMINED) { offsetX = 0f offsetY = 0f - startX = event.rawX - startY = event.rawY + startX = getLastPointerX(sourceEvent, true) + startY = getLastPointerY(sourceEvent, true) } if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN) { offsetX += lastX - startX offsetY += lastY - startY - lastX = getLastPointerX(event, true) - lastY = getLastPointerY(event, true) + lastX = getLastPointerX(sourceEvent, true) + lastY = getLastPointerY(sourceEvent, true) startX = lastX startY = lastY } else { - lastX = getLastPointerX(event, true) - lastY = getLastPointerY(event, true) + lastX = getLastPointerX(sourceEvent, true) + lastY = getLastPointerY(sourceEvent, true) } - if (currentMaxNumberOfPointers < event.pointerCount) { - currentMaxNumberOfPointers = event.pointerCount + if (currentMaxNumberOfPointers < sourceEvent.pointerCount) { + currentMaxNumberOfPointers = sourceEvent.pointerCount } if (shouldFail()) { fail() diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ViewConfigurationHelper.kt b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt similarity index 79% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ViewConfigurationHelper.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt index 869aeafb63947..131f4869613e8 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ViewConfigurationHelper.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import android.view.View import android.view.ViewGroup diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/test/java/com/swmansion/gesturehandler/ExampleUnitTest.java b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/test/java/com/swmansion/gesturehandler/ExampleUnitTest.java new file mode 100644 index 0000000000000..b258220b8e2f3 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/lib/src/test/java/com/swmansion/gesturehandler/ExampleUnitTest.java @@ -0,0 +1,12 @@ +package com.swmansion.gesturehandler; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt b/android/vendored/unversioned/react-native-gesture-handler/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt new file mode 100644 index 0000000000000..6202cde89b3a9 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt @@ -0,0 +1,10 @@ +package com.swmansion.gesturehandler + +import com.facebook.react.bridge.ReactContext +import com.facebook.react.uimanager.events.Event + +class ReanimatedEventDispatcher { + fun >sendEvent(event: T, reactApplicationContext: ReactContext) { + // no-op + } +} diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt b/android/vendored/unversioned/react-native-gesture-handler/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt new file mode 100644 index 0000000000000..3abd66529cd15 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt @@ -0,0 +1,17 @@ +package com.swmansion.gesturehandler + +import com.facebook.react.bridge.ReactContext +import com.facebook.react.uimanager.events.Event +import com.swmansion.reanimated.ReanimatedModule + +class ReanimatedEventDispatcher { + private var reanimatedModule: ReanimatedModule? = null + + fun >sendEvent(event: T, reactApplicationContext: ReactContext) { + if (reanimatedModule == null) { + reanimatedModule = reactApplicationContext.getNativeModule(ReanimatedModule::class.java) + } + + reanimatedModule?.nodesManager?.onEventDispatch(event) + } +} diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/settings.gradle b/android/vendored/unversioned/react-native-gesture-handler/android/settings.gradle new file mode 100644 index 0000000000000..c8e23f4979eb4 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/settings.gradle @@ -0,0 +1 @@ +include 'lib' \ No newline at end of file diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java b/android/vendored/unversioned/react-native-gesture-handler/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java new file mode 100644 index 0000000000000..44f6fc6ff31ed --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java @@ -0,0 +1,29 @@ +package com.swmansion.gesturehandler.react; + +import com.facebook.jni.HybridData; +import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.soloader.SoLoader; + +@DoNotStrip +public class RNGestureHandlerComponentsRegistry { + static { + SoLoader.loadLibrary("fabricjni"); + SoLoader.loadLibrary("gesturehandler"); + } + + @DoNotStrip private final HybridData mHybridData; + + @DoNotStrip + private native HybridData initHybrid(ComponentFactory componentFactory); + + @DoNotStrip + private RNGestureHandlerComponentsRegistry(ComponentFactory componentFactory) { + mHybridData = initHybrid(componentFactory); + } + + @DoNotStrip + public static RNGestureHandlerComponentsRegistry register(ComponentFactory componentFactory) { + return new RNGestureHandlerComponentsRegistry(componentFactory); + } +} diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt new file mode 100644 index 0000000000000..bdc18b772df1d --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt @@ -0,0 +1,12 @@ +package com.swmansion.gesturehandler + +import com.facebook.react.bridge.ReactContext +import com.facebook.react.fabric.FabricUIManager +import com.facebook.react.uimanager.UIManagerHelper +import com.facebook.react.uimanager.common.UIManagerType +import com.facebook.react.uimanager.events.Event + +fun ReactContext.dispatchEvent(event: Event<*>) { + val fabricUIManager = UIManagerHelper.getUIManager(this, UIManagerType.FABRIC) as FabricUIManager + fabricUIManager.eventDispatcher.dispatchEvent(event) +} diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/src/main/AndroidManifest.xml b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000000000..5fa4c9c519414 --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt new file mode 100644 index 0000000000000..d022eb381e86a --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt @@ -0,0 +1,21 @@ +package com.swmansion.gesturehandler + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager +import com.swmansion.gesturehandler.BuildConfig +import com.swmansion.gesturehandler.react.RNGestureHandlerModule +import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager +import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager + +class RNGestureHandlerPackage : ReactPackage { + override fun createNativeModules(reactContext: ReactApplicationContext): List { + return listOf(RNGestureHandlerModule(reactContext)) + } + + override fun createViewManagers(reactContext: ReactApplicationContext) = + listOf>( + RNGestureHandlerRootViewManager(), + RNGestureHandlerButtonViewManager()) +} diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt similarity index 90% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerButtonViewManager.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt index 27ab12d30b861..7451e47a51382 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt @@ -1,5 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react -import host.exp.expoview.R +package com.swmansion.gesturehandler.react import android.annotation.SuppressLint import android.annotation.TargetApi @@ -28,8 +27,8 @@ import com.facebook.react.uimanager.ViewProps import com.facebook.react.uimanager.annotations.ReactProp import com.facebook.react.viewmanagers.RNGestureHandlerButtonManagerDelegate import com.facebook.react.viewmanagers.RNGestureHandlerButtonManagerInterface -import versioned.host.exp.exponent.modules.api.components.gesturehandler.NativeViewGestureHandler -import versioned.host.exp.exponent.modules.api.components.gesturehandler.react.RNGestureHandlerButtonViewManager.ButtonViewGroup +import com.swmansion.gesturehandler.NativeViewGestureHandler +import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager.ButtonViewGroup @ReactModule(name = RNGestureHandlerButtonViewManager.REACT_CLASS) class RNGestureHandlerButtonViewManager : ViewGroupManager(), RNGestureHandlerButtonManagerInterface { @@ -165,9 +164,13 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R * (e.g. move and up in one gesture; move and cancel) * * Reference: - * [versioned.host.exp.exponent.modules.api.components.gesturehandler.NativeViewGestureHandler.onHandle] */ + * [com.swmansion.gesturehandler.NativeViewGestureHandler.onHandle] */ @SuppressLint("ClickableViewAccessibility") override fun onTouchEvent(event: MotionEvent): Boolean { + if (event.action == MotionEvent.ACTION_CANCEL) { + tryFreeingResponder() + } + val eventTime = event.eventTime val action = event.action // always true when lastEventTime or lastAction have default value (-1) @@ -268,7 +271,7 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R } override fun drawableHotspotChanged(x: Float, y: Float) { - if (responder == null || responder === this) { + if (touchResponder == null || touchResponder === this) { super.drawableHotspotChanged(x, y) } } @@ -281,19 +284,31 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R return isResponder } + override fun afterGestureEnd(event: MotionEvent) { + tryFreeingResponder() + isTouched = false + } + + private fun tryFreeingResponder() { + if (touchResponder === this) { + touchResponder = null + soundResponder = this + } + } + private fun tryGrabbingResponder(): Boolean { if (isChildTouched()) { return false } - if (responder == null) { - responder = this + if (touchResponder == null) { + touchResponder = this return true } return if (exclusive) { - responder === this + touchResponder === this } else { - !(responder?.exclusive ?: false) + !(touchResponder?.exclusive ?: false) } } @@ -314,7 +329,8 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R override fun performClick(): Boolean { // don't preform click when a child button is pressed (mainly to prevent sound effect of // a parent button from playing) - return if (!isChildTouched()) { + return if (!isChildTouched() && soundResponder == this) { + soundResponder = null super.performClick() } else { false @@ -328,22 +344,23 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R // when canStart is called eventually, tryGrabbingResponder will return true if the button // already is a responder if (pressed) { - tryGrabbingResponder() + if (tryGrabbingResponder()) { + soundResponder = this + } } // button can be pressed alongside other button if both are non-exclusive and it doesn't have // any pressed children (to prevent pressing the parent when children is pressed). - val canBePressedAlongsideOther = !exclusive && responder?.exclusive != true && !isChildTouched() + val canBePressedAlongsideOther = !exclusive && touchResponder?.exclusive != true && !isChildTouched() - if (!pressed || responder === this || canBePressedAlongsideOther) { + if (!pressed || touchResponder === this || canBePressedAlongsideOther) { // we set pressed state only for current responder or any non-exclusive button when responder // is null or non-exclusive, assuming it doesn't have pressed children isTouched = pressed super.setPressed(pressed) } - if (!pressed && responder === this) { + if (!pressed && touchResponder === this) { // if the responder is no longer pressed we release button responder - responder = null isTouched = false } } @@ -355,7 +372,8 @@ class RNGestureHandlerButtonViewManager : ViewGroupManager(), R companion object { var resolveOutValue = TypedValue() - var responder: ButtonViewGroup? = null + var touchResponder: ButtonViewGroup? = null + var soundResponder: ButtonViewGroup? = null var dummyClickListener = OnClickListener { } } } diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEnabledRootView.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt similarity index 91% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEnabledRootView.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt index 5f922b4e8b352..471ce311ef518 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import android.content.Context import android.os.Bundle diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEvent.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt similarity index 92% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEvent.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt index ece0c0abe6512..10ca971db7daf 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEvent.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt @@ -4,14 +4,14 @@ // ref: https://github.com/facebook/react-native/commit/2fbbdbb2ce897e8da3f471b08b93f167d566db1d @file:Suppress("DEPRECATION") -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import androidx.core.util.Pools import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event import com.facebook.react.uimanager.events.RCTEventEmitter -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandler class RNGestureHandlerEvent private constructor() : Event() { private var extraData: WritableMap? = null diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt similarity index 51% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt index 70b4566250098..3a4ce05e83034 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt @@ -1,7 +1,7 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import com.facebook.react.bridge.WritableMap -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandler interface RNGestureHandlerEventDataExtractor> { fun extractEventData(handler: T, eventData: WritableMap) diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerInteractionManager.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt similarity index 82% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerInteractionManager.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt index 7cb640720d657..682eeec010e89 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerInteractionManager.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt @@ -1,9 +1,10 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import android.util.SparseArray import com.facebook.react.bridge.ReadableMap -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandlerInteractionController +import com.swmansion.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandlerInteractionController +import com.swmansion.gesturehandler.NativeViewGestureHandler class RNGestureHandlerInteractionManager : GestureHandlerInteractionController { private val waitForRelations = SparseArray() @@ -42,8 +43,13 @@ class RNGestureHandlerInteractionManager : GestureHandlerInteractionController { otherHandler: GestureHandler<*>, ) = false - override fun shouldHandlerBeCancelledBy(handler: GestureHandler<*>, otherHandler: GestureHandler<*>) = false + override fun shouldHandlerBeCancelledBy(handler: GestureHandler<*>, otherHandler: GestureHandler<*>): Boolean { + if (otherHandler is NativeViewGestureHandler) { + return otherHandler.disallowInterruption + } + return false + } override fun shouldRecognizeSimultaneously( handler: GestureHandler<*>, otherHandler: GestureHandler<*>, diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerModule.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt similarity index 98% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerModule.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt index b962aac4efb6a..c710e85e1e823 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerModule.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt @@ -1,5 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react -import host.exp.expoview.BuildConfig +package com.swmansion.gesturehandler.react import android.content.Context import android.util.Log @@ -12,8 +11,8 @@ import com.facebook.react.uimanager.PixelUtil import com.facebook.react.uimanager.UIBlock import com.facebook.react.uimanager.events.Event import com.facebook.soloader.SoLoader -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandlerStateManager -import versioned.host.exp.exponent.modules.api.components.gesturehandler.* +import com.swmansion.common.GestureHandlerStateManager +import com.swmansion.gesturehandler.* import java.util.* // NativeModule.onCatalystInstanceDestroy() was deprecated in favor of NativeModule.invalidate() // ref: https://github.com/facebook/react-native/commit/18c8417290823e67e211bde241ae9dde27b72f17 @@ -347,7 +346,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) val registry: RNGestureHandlerRegistry = RNGestureHandlerRegistry() private val interactionManager = RNGestureHandlerInteractionManager() private val roots: MutableList = ArrayList() - private val enqueuedRootViewInit: MutableList = ArrayList() + private val reanimatedEventDispatcher = ReanimatedEventDispatcher() override fun getName() = MODULE_NAME @ReactMethod @@ -426,7 +425,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) @ReactMethod(isBlockingSynchronousMethod = true) fun install(): Boolean { return try { - SoLoader.loadLibrary("rngesturehandler_modules") + SoLoader.loadLibrary("gesturehandler") val jsContext = reactApplicationContext.javaScriptContextHolder decorateRuntime(jsContext.get()) true @@ -594,7 +593,7 @@ class RNGestureHandlerModule(reactContext: ReactApplicationContext?) // Delivers the event to Reanimated. if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { // Send event directly to Reanimated - // ReanimatedEventDispatcher.sendEvent(event, reactApplicationContext) // COMMENTED OUT BY VENDORING SCRIPT + reanimatedEventDispatcher.sendEvent(event, reactApplicationContext) } else { // In the old architecture, Reanimated subscribes for specific direct events. sendEventForDirectEvent(event) diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRegistry.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt similarity index 91% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRegistry.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt index b517da0a5148c..6c100f37a1f36 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRegistry.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt @@ -1,10 +1,10 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import android.util.SparseArray import android.view.View import com.facebook.react.bridge.UiThreadUtil -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandlerRegistry +import com.swmansion.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandlerRegistry import java.util.* class RNGestureHandlerRegistry : GestureHandlerRegistry { diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootHelper.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt similarity index 93% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootHelper.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt index 90570d118f8dd..2a3442e7c9f81 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootHelper.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import android.os.SystemClock import android.util.Log @@ -10,8 +10,8 @@ import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.common.ReactConstants import com.facebook.react.uimanager.RootView import com.facebook.react.views.modal.ReactModalHostView -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandlerOrchestrator +import com.swmansion.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandlerOrchestrator class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView: ViewGroup) { private val orchestrator: GestureHandlerOrchestrator? @@ -54,7 +54,7 @@ class RNGestureHandlerRootHelper(private val context: ReactContext, wrappedView: } private inner class RootViewGestureHandler : GestureHandler() { - override fun onHandle(event: MotionEvent) { + override fun onHandle(event: MotionEvent, sourceEvent: MotionEvent) { val currentState = state if (currentState == STATE_UNDETERMINED) { begin() diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootInterface.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt similarity index 53% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootInterface.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt index d85d88e83db71..5bed5489b8428 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootInterface.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react interface RNGestureHandlerRootInterface { val rootHelper: RNGestureHandlerRootHelper? diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootView.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt similarity index 96% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootView.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt index 6b36e18a8c5fe..da3098fd03218 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootView.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import android.content.Context import android.util.Log diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootViewManager.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt similarity index 96% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootViewManager.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt index ed698b17256f0..e310c04314b07 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerRootViewManager.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.ThemedReactContext diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt similarity index 93% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt index b9993f1cb1e6a..90aff4694145a 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt @@ -4,14 +4,14 @@ // ref: https://github.com/facebook/react-native/commit/2fbbdbb2ce897e8da3f471b08b93f167d566db1d @file:Suppress("DEPRECATION") -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import androidx.core.util.Pools import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event import com.facebook.react.uimanager.events.RCTEventEmitter -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandler class RNGestureHandlerStateChangeEvent private constructor() : Event() { private var extraData: WritableMap? = null diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerTouchEvent.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt similarity index 92% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerTouchEvent.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt index 6a94c2e128b46..88f0ece7e5e00 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNGestureHandlerTouchEvent.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt @@ -1,11 +1,11 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import androidx.core.util.Pools import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.facebook.react.uimanager.events.Event import com.facebook.react.uimanager.events.RCTEventEmitter -import versioned.host.exp.exponent.modules.api.components.gesturehandler.GestureHandler +import com.swmansion.gesturehandler.GestureHandler class RNGestureHandlerTouchEvent private constructor() : Event() { private var extraData: WritableMap? = null diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNViewConfigurationHelper.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt similarity index 86% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNViewConfigurationHelper.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt index 83b5e662bd9c3..d33c4f3034083 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/react/RNViewConfigurationHelper.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt @@ -1,12 +1,12 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler.react +package com.swmansion.gesturehandler.react import android.view.View import android.view.ViewGroup import com.facebook.react.uimanager.PointerEvents import com.facebook.react.uimanager.ReactPointerEventsView import com.facebook.react.views.view.ReactViewGroup -import versioned.host.exp.exponent.modules.api.components.gesturehandler.PointerEventsConfig -import versioned.host.exp.exponent.modules.api.components.gesturehandler.ViewConfigurationHelper +import com.swmansion.gesturehandler.PointerEventsConfig +import com.swmansion.gesturehandler.ViewConfigurationHelper class RNViewConfigurationHelper : ViewConfigurationHelper { override fun getPointerEventsConfigForView(view: View): PointerEventsConfig { diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/src/main/jni/CMakeLists.txt b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/jni/CMakeLists.txt new file mode 100644 index 0000000000000..af11fb44ecbaa --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/jni/CMakeLists.txt @@ -0,0 +1,59 @@ +project(GestureHandler) +cmake_minimum_required(VERSION 3.9.0) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_FLAGS "-DFOLLY_NO_CONFIG=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_MOBILE=1 -DFOLLY_HAVE_RECVMMSG=1 -DFOLLY_HAVE_PTHREAD=1") + +add_library(gesturehandler + SHARED + cpp-adapter.cpp +) + +set(REACT_ANDROID_DIR "${REACT_NATIVE_DIR}/ReactAndroid") +set(REACT_COMMON_DIR "${REACT_NATIVE_DIR}/ReactCommon") +set(REACT_NDK_EXPORT_DIR "${APP_BUILD_DIR}/react-ndk/exported") + +# copied from react-native/ReactAndroid/cmake-utils/Android-prebuilt.cmake + +## jsi +add_library(jsi SHARED IMPORTED GLOBAL) +set_target_properties(jsi + PROPERTIES + IMPORTED_LOCATION + ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libjsi.so) +target_include_directories(jsi INTERFACE ${REACT_COMMON_DIR}/jsi) + +## react_render_core +add_library(react_render_core SHARED IMPORTED GLOBAL) +set_target_properties(react_render_core + PROPERTIES + IMPORTED_LOCATION + ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_core.so) +target_include_directories(react_render_core + INTERFACE + ${REACT_COMMON_DIR} + ${REACT_COMMON_DIR}/react/renderer/core) + +## react_render_uimanager +add_library(react_render_uimanager SHARED IMPORTED GLOBAL) +set_target_properties(react_render_uimanager + PROPERTIES + IMPORTED_LOCATION + ${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_uimanager.so) +target_include_directories(react_render_uimanager INTERFACE ${REACT_COMMON_DIR}/react/renderer/uimanager) + +target_include_directories( + gesturehandler + PRIVATE + "${REACT_ANDROID_DIR}/build/third-party-ndk/boost/boost_1_76_0" + "${REACT_ANDROID_DIR}/build/third-party-ndk/double-conversion" + "${REACT_ANDROID_DIR}/build/third-party-ndk/folly" +) + +target_link_libraries( + gesturehandler + jsi + react_render_uimanager + react_render_core +) diff --git a/android/vendored/unversioned/react-native-gesture-handler/android/src/main/jni/cpp-adapter.cpp b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/jni/cpp-adapter.cpp new file mode 100644 index 0000000000000..211f2f966769e --- /dev/null +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/main/jni/cpp-adapter.cpp @@ -0,0 +1,41 @@ +#include +#include + +#include + +using namespace facebook; +using namespace react; + +void decorateRuntime(jsi::Runtime &runtime) +{ + auto isFormsStackingContext = jsi::Function::createFromHostFunction( + runtime, + jsi::PropNameID::forAscii(runtime, "isFormsStackingContext"), + 1, + [](jsi::Runtime &runtime, + const jsi::Value &thisValue, + const jsi::Value *arguments, + size_t count) -> jsi::Value + { + if (!arguments[0].isObject()) + { + return jsi::Value::null(); + } + + auto shadowNode = arguments[0].asObject(runtime).getHostObject(runtime)->shadowNode; + bool isFormsStackingContext = shadowNode->getTraits().check(ShadowNodeTraits::FormsStackingContext); + + return jsi::Value(isFormsStackingContext); + }); + runtime.global().setProperty(runtime, "isFormsStackingContext", std::move(isFormsStackingContext)); +} + +extern "C" JNIEXPORT void JNICALL +Java_com_swmansion_gesturehandler_react_RNGestureHandlerModule_decorateRuntime(JNIEnv *env, jobject clazz, jlong jsiPtr) +{ + jsi::Runtime *runtime = reinterpret_cast(jsiPtr); + if (runtime) + { + decorateRuntime(*runtime); + } +} diff --git a/android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java b/android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java similarity index 100% rename from android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java rename to android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java diff --git a/android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java b/android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java similarity index 100% rename from android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java rename to android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java diff --git a/android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java b/android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java similarity index 100% rename from android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java rename to android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java diff --git a/android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java b/android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java similarity index 100% rename from android/expoview/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java rename to android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ReactContextExtensions.kt b/android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt similarity index 86% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ReactContextExtensions.kt rename to android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt index 9613d94920367..757956c9eaa7f 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/components/gesturehandler/ReactContextExtensions.kt +++ b/android/vendored/unversioned/react-native-gesture-handler/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt @@ -1,4 +1,4 @@ -package versioned.host.exp.exponent.modules.api.components.gesturehandler +package com.swmansion.gesturehandler import com.facebook.react.bridge.ReactContext import com.facebook.react.uimanager.UIManagerModule diff --git a/android/versioned-abis/expoview-abi45_0_0/build.gradle b/android/versioned-abis/expoview-abi45_0_0/build.gradle index af36e999a8ab8..7ec94d6493201 100644 --- a/android/versioned-abis/expoview-abi45_0_0/build.gradle +++ b/android/versioned-abis/expoview-abi45_0_0/build.gradle @@ -191,7 +191,7 @@ dependencies { // expo-av // See explanation in expo-av/build.gradle - api 'com.google.android.exoplayer:extension-okhttp:2.13.3' + api 'com.google.android.exoplayer:extension-okhttp:2.18.1' // expo-application api 'com.android.installreferrer:installreferrer:1.0' diff --git a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/SimpleExoPlayerData.java b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/SimpleExoPlayerData.java index 6c803fa7c63e9..7b97200d521c9 100644 --- a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/SimpleExoPlayerData.java +++ b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/SimpleExoPlayerData.java @@ -13,16 +13,16 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.LoadEventInfo; import com.google.android.exoplayer2.source.MediaLoadData; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSourceEventListener; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.source.dash.DashMediaSource; import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource; import com.google.android.exoplayer2.source.hls.HlsMediaSource; @@ -37,7 +37,7 @@ import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.RawResourceDataSource; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.VideoListener; +import com.google.android.exoplayer2.video.VideoSize; import java.io.IOException; import java.util.Map; @@ -47,7 +47,7 @@ import abi45_0_0.expo.modules.av.player.datasource.DataSourceFactoryProvider; class SimpleExoPlayerData extends PlayerData - implements Player.EventListener, MediaSourceEventListener, VideoListener { + implements Player.Listener, MediaSourceEventListener { private static final String IMPLEMENTATION_NAME = "SimpleExoPlayer"; private static final String TAG = SimpleExoPlayerData.class.getSimpleName(); @@ -92,7 +92,6 @@ public void load(final Bundle status, final LoadCompletionListener loadCompletio .build(); mSimpleExoPlayer.addListener(this); - mSimpleExoPlayer.addVideoListener(this); // Produces DataSource instances through which media data is loaded. final DataSource.Factory dataSourceFactory = mAVModule.getModuleRegistry() @@ -263,7 +262,7 @@ public void updateVolumeMuteAndDuck() { // endregion - // region ExoPlayer.EventListener + // region Player.Listener @Override public void onLoadingChanged(final boolean isLoading) { @@ -275,11 +274,6 @@ public void onLoadingChanged(final boolean isLoading) { public void onPlaybackParametersChanged(PlaybackParameters parameters) { } - @Override - public void onSeekProcessed() { - - } - @Override public void onRepeatModeChanged(int repeatMode) { } @@ -312,7 +306,7 @@ public void onPlayerStateChanged(final boolean playWhenReady, final int playback } @Override - public void onPlayerError(final ExoPlaybackException error) { + public void onPlayerError(PlaybackException error) { onFatalError(error.getCause()); } @@ -325,11 +319,27 @@ public void onPositionDiscontinuity(int reason) { // Source: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Timeline.Period.html // So I guess it's safe to say that when a period transition happens, // media file transition happens, so we just finished playing one. - if (reason == Player.DISCONTINUITY_REASON_PERIOD_TRANSITION) { + if (reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION) { callStatusUpdateListenerWithDidJustFinish(); } } + @Override + public void onVideoSizeChanged(VideoSize videoSize) { + mVideoWidthHeight = new Pair<>(videoSize.width, videoSize.height); + if (mFirstFrameRendered && mVideoSizeUpdateListener != null) { + mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); + } + } + + @Override + public void onRenderedFirstFrame() { + if (!mFirstFrameRendered && mVideoWidthHeight != null && mVideoSizeUpdateListener != null) { + mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); + } + mFirstFrameRendered = true; + } + // endregion // region MediaSourceEventListener @@ -363,27 +373,6 @@ private void onFatalError(final Throwable error) { // endregion - // region VideoListener - - @Override - public void onVideoSizeChanged(final int width, final int height, final int unAppliedRotationDegrees, final float pixelWidthHeightRatio) { - // TODO other params? - mVideoWidthHeight = new Pair<>(width, height); - if (mFirstFrameRendered && mVideoSizeUpdateListener != null) { - mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); - } - } - - @Override - public void onRenderedFirstFrame() { - if (!mFirstFrameRendered && mVideoWidthHeight != null && mVideoSizeUpdateListener != null) { - mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); - } - mFirstFrameRendered = true; - } - - // endregion - private MediaSource buildMediaSource(@NonNull Uri uri, String overrideExtension, DataSource.Factory factory) { try { if (uri.getScheme() == null) { @@ -405,7 +394,7 @@ private MediaSource buildMediaSource(@NonNull Uri uri, String overrideExtension, case C.TYPE_HLS: return new HlsMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); case C.TYPE_OTHER: - return new ExtractorMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); + return new ProgressiveMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); default: { throw new IllegalStateException("Content of this type is unsupported at the moment. Unsupported type: " + type); } diff --git a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java deleted file mode 100644 index 3f52a35b786e5..0000000000000 --- a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -package abi45_0_0.expo.modules.av.player.datasource; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource; -import com.google.android.exoplayer2.upstream.DataSource; -import com.google.android.exoplayer2.upstream.HttpDataSource; -import com.google.android.exoplayer2.upstream.TransferListener; - -import java.util.Map; - -import okhttp3.CacheControl; -import okhttp3.Call; - -// Mainly a copy of com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory, -// because it's declared as final :( -public class CustomHeadersOkHttpDataSourceFactory extends HttpDataSource.BaseFactory { - @NonNull - private final Call.Factory mCallFactory; - @Nullable - private final String mUserAgent; - @Nullable - private final CacheControl mCacheControl; - - public CustomHeadersOkHttpDataSourceFactory(@NonNull Call.Factory callFactory, @Nullable String userAgent, @Nullable Map requestHeaders) { - super(); - mCallFactory = callFactory; - mUserAgent = userAgent; - mCacheControl = null; - updateRequestProperties(getDefaultRequestProperties(), requestHeaders); - } - - protected void updateRequestProperties(HttpDataSource.RequestProperties requestProperties, @Nullable Map requestHeaders) { - if (requestHeaders != null) { - for (Map.Entry headerEntry : requestHeaders.entrySet()) { - if (headerEntry.getValue() instanceof String) { - requestProperties.set(headerEntry.getKey(), (String) headerEntry.getValue()); - } - } - } - } - - protected OkHttpDataSource createDataSourceInternal(HttpDataSource.RequestProperties defaultRequestProperties) { - return new OkHttpDataSource(mCallFactory, mUserAgent, mCacheControl, defaultRequestProperties); - } -} diff --git a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt similarity index 76% rename from android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt rename to android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt index 0dd7f1f832c1e..14f12787e6c2d 100644 --- a/android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt +++ b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt @@ -1,5 +1,6 @@ -package versioned.host.exp.exponent.modules.universal.av +package abi45_0_0.expo.modules.av.player.datasource +import androidx.collection.ArrayMap import com.google.android.exoplayer2.upstream.HttpDataSource.BaseFactory import com.google.android.exoplayer2.upstream.HttpDataSource.RequestProperties import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource @@ -15,16 +16,15 @@ class CustomHeadersOkHttpDataSourceFactory( ) : BaseFactory() { private val cacheControl: CacheControl? = null - private fun updateRequestProperties( - requestProperties: RequestProperties, - requestHeaders: Map? - ) { + private fun updateRequestProperties(requestHeaders: Map?) { if (requestHeaders != null) { + val requestProperties = ArrayMap() for ((key, value) in requestHeaders) { if (value is String) { requestProperties[key] = value } } + setDefaultRequestProperties(requestProperties) } } @@ -33,6 +33,6 @@ class CustomHeadersOkHttpDataSourceFactory( } init { - updateRequestProperties(defaultRequestProperties, requestHeaders) + updateRequestProperties(requestHeaders) } } diff --git a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt index 3a43d09af8a4a..8bda76d3eb61f 100644 --- a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt +++ b/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt @@ -2,6 +2,7 @@ package abi45_0_0.host.exp.exponent.modules.universal.av import abi45_0_0.com.facebook.react.bridge.ReactContext import abi45_0_0.com.facebook.react.modules.network.NetworkingModule +import abi45_0_0.expo.modules.av.player.datasource.CustomHeadersOkHttpDataSourceFactory import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.upstream.TransferListener diff --git a/android/versioned-abis/expoview-abi46_0_0/build.gradle b/android/versioned-abis/expoview-abi46_0_0/build.gradle index 4d796643851bb..c4ca05e8342c1 100644 --- a/android/versioned-abis/expoview-abi46_0_0/build.gradle +++ b/android/versioned-abis/expoview-abi46_0_0/build.gradle @@ -181,7 +181,7 @@ dependencies { // expo-av // See explanation in expo-av/build.gradle - api 'com.google.android.exoplayer:extension-okhttp:2.13.3' + api 'com.google.android.exoplayer:extension-okhttp:2.18.1' // expo-application api 'com.android.installreferrer:installreferrer:1.0' diff --git a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/SimpleExoPlayerData.java b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/SimpleExoPlayerData.java index 4beafc5b3b193..05b3fe64a5d6c 100644 --- a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/SimpleExoPlayerData.java +++ b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/SimpleExoPlayerData.java @@ -13,16 +13,16 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.LoadEventInfo; import com.google.android.exoplayer2.source.MediaLoadData; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSourceEventListener; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.source.dash.DashMediaSource; import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource; import com.google.android.exoplayer2.source.hls.HlsMediaSource; @@ -37,7 +37,7 @@ import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.RawResourceDataSource; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.VideoListener; +import com.google.android.exoplayer2.video.VideoSize; import java.io.IOException; import java.util.Map; @@ -47,7 +47,7 @@ import abi46_0_0.expo.modules.av.player.datasource.DataSourceFactoryProvider; class SimpleExoPlayerData extends PlayerData - implements Player.EventListener, MediaSourceEventListener, VideoListener { + implements Player.Listener, MediaSourceEventListener { private static final String IMPLEMENTATION_NAME = "SimpleExoPlayer"; private static final String TAG = SimpleExoPlayerData.class.getSimpleName(); @@ -92,7 +92,6 @@ public void load(final Bundle status, final LoadCompletionListener loadCompletio .build(); mSimpleExoPlayer.addListener(this); - mSimpleExoPlayer.addVideoListener(this); // Produces DataSource instances through which media data is loaded. final DataSource.Factory dataSourceFactory = mAVModule.getModuleRegistry() @@ -263,7 +262,7 @@ public void updateVolumeMuteAndDuck() { // endregion - // region ExoPlayer.EventListener + // region Player.Listener @Override public void onLoadingChanged(final boolean isLoading) { @@ -275,11 +274,6 @@ public void onLoadingChanged(final boolean isLoading) { public void onPlaybackParametersChanged(PlaybackParameters parameters) { } - @Override - public void onSeekProcessed() { - - } - @Override public void onRepeatModeChanged(int repeatMode) { } @@ -312,7 +306,7 @@ public void onPlayerStateChanged(final boolean playWhenReady, final int playback } @Override - public void onPlayerError(final ExoPlaybackException error) { + public void onPlayerError(PlaybackException error) { onFatalError(error.getCause()); } @@ -325,11 +319,27 @@ public void onPositionDiscontinuity(int reason) { // Source: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Timeline.Period.html // So I guess it's safe to say that when a period transition happens, // media file transition happens, so we just finished playing one. - if (reason == Player.DISCONTINUITY_REASON_PERIOD_TRANSITION) { + if (reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION) { callStatusUpdateListenerWithDidJustFinish(); } } + @Override + public void onVideoSizeChanged(VideoSize videoSize) { + mVideoWidthHeight = new Pair<>(videoSize.width, videoSize.height); + if (mFirstFrameRendered && mVideoSizeUpdateListener != null) { + mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); + } + } + + @Override + public void onRenderedFirstFrame() { + if (!mFirstFrameRendered && mVideoWidthHeight != null && mVideoSizeUpdateListener != null) { + mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); + } + mFirstFrameRendered = true; + } + // endregion // region MediaSourceEventListener @@ -363,27 +373,6 @@ private void onFatalError(final Throwable error) { // endregion - // region VideoListener - - @Override - public void onVideoSizeChanged(final int width, final int height, final int unAppliedRotationDegrees, final float pixelWidthHeightRatio) { - // TODO other params? - mVideoWidthHeight = new Pair<>(width, height); - if (mFirstFrameRendered && mVideoSizeUpdateListener != null) { - mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); - } - } - - @Override - public void onRenderedFirstFrame() { - if (!mFirstFrameRendered && mVideoWidthHeight != null && mVideoSizeUpdateListener != null) { - mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); - } - mFirstFrameRendered = true; - } - - // endregion - private MediaSource buildMediaSource(@NonNull Uri uri, String overrideExtension, DataSource.Factory factory) { try { if (uri.getScheme() == null) { @@ -405,7 +394,7 @@ private MediaSource buildMediaSource(@NonNull Uri uri, String overrideExtension, case C.TYPE_HLS: return new HlsMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); case C.TYPE_OTHER: - return new ExtractorMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); + return new ProgressiveMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); default: { throw new IllegalStateException("Content of this type is unsupported at the moment. Unsupported type: " + type); } diff --git a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java deleted file mode 100644 index f9aaae73860f0..0000000000000 --- a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -package abi46_0_0.expo.modules.av.player.datasource; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource; -import com.google.android.exoplayer2.upstream.DataSource; -import com.google.android.exoplayer2.upstream.HttpDataSource; -import com.google.android.exoplayer2.upstream.TransferListener; - -import java.util.Map; - -import okhttp3.CacheControl; -import okhttp3.Call; - -// Mainly a copy of com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory, -// because it's declared as final :( -public class CustomHeadersOkHttpDataSourceFactory extends HttpDataSource.BaseFactory { - @NonNull - private final Call.Factory mCallFactory; - @Nullable - private final String mUserAgent; - @Nullable - private final CacheControl mCacheControl; - - public CustomHeadersOkHttpDataSourceFactory(@NonNull Call.Factory callFactory, @Nullable String userAgent, @Nullable Map requestHeaders) { - super(); - mCallFactory = callFactory; - mUserAgent = userAgent; - mCacheControl = null; - updateRequestProperties(getDefaultRequestProperties(), requestHeaders); - } - - protected void updateRequestProperties(HttpDataSource.RequestProperties requestProperties, @Nullable Map requestHeaders) { - if (requestHeaders != null) { - for (Map.Entry headerEntry : requestHeaders.entrySet()) { - if (headerEntry.getValue() instanceof String) { - requestProperties.set(headerEntry.getKey(), (String) headerEntry.getValue()); - } - } - } - } - - protected OkHttpDataSource createDataSourceInternal(HttpDataSource.RequestProperties defaultRequestProperties) { - return new OkHttpDataSource(mCallFactory, mUserAgent, mCacheControl, defaultRequestProperties); - } -} diff --git a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt similarity index 76% rename from android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt rename to android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt index a492a170d06ea..aa078928889fb 100644 --- a/android/versioned-abis/expoview-abi45_0_0/src/main/java/abi45_0_0/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt +++ b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt @@ -1,5 +1,6 @@ -package abi45_0_0.host.exp.exponent.modules.universal.av +package abi46_0_0.expo.modules.av.player.datasource +import androidx.collection.ArrayMap import com.google.android.exoplayer2.upstream.HttpDataSource.BaseFactory import com.google.android.exoplayer2.upstream.HttpDataSource.RequestProperties import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource @@ -15,16 +16,15 @@ class CustomHeadersOkHttpDataSourceFactory( ) : BaseFactory() { private val cacheControl: CacheControl? = null - private fun updateRequestProperties( - requestProperties: RequestProperties, - requestHeaders: Map? - ) { + private fun updateRequestProperties(requestHeaders: Map?) { if (requestHeaders != null) { + val requestProperties = ArrayMap() for ((key, value) in requestHeaders) { if (value is String) { requestProperties[key] = value } } + setDefaultRequestProperties(requestProperties) } } @@ -33,6 +33,6 @@ class CustomHeadersOkHttpDataSourceFactory( } init { - updateRequestProperties(defaultRequestProperties, requestHeaders) + updateRequestProperties(requestHeaders) } } diff --git a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt index 584bb452f0bb9..1fb365a7365a1 100644 --- a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt +++ b/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/SharedCookiesDataSourceFactory.kt @@ -2,6 +2,7 @@ package abi46_0_0.host.exp.exponent.modules.universal.av import abi46_0_0.com.facebook.react.bridge.ReactContext import abi46_0_0.com.facebook.react.modules.network.NetworkingModule +import abi46_0_0.expo.modules.av.player.datasource.CustomHeadersOkHttpDataSourceFactory import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.upstream.TransferListener diff --git a/apps/bare-expo/ios/Podfile.lock b/apps/bare-expo/ios/Podfile.lock index f724aeab14dc0..dd95c364818b2 100644 --- a/apps/bare-expo/ios/Podfile.lock +++ b/apps/bare-expo/ios/Podfile.lock @@ -229,14 +229,14 @@ PODS: - EXUpdatesInterface (0.7.0) - EXVideoThumbnails (6.4.0): - ExpoModulesCore - - FBLazyVector (0.70.1) - - FBReactNativeSpec (0.70.1): + - FBLazyVector (0.70.2) + - FBReactNativeSpec (0.70.2): - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.70.1) - - RCTTypeSafety (= 0.70.1) - - React-Core (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) + - RCTRequired (= 0.70.2) + - RCTTypeSafety (= 0.70.2) + - React-Core (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) - Firebase/Core (9.5.0): - Firebase/CoreOnly - FirebaseAnalytics (~> 9.5.0) @@ -356,7 +356,7 @@ PODS: - GoogleUtilitiesComponents (1.1.0): - GoogleUtilities/Logger - GTMSessionFetcher/Core (1.7.2) - - hermes-engine (0.70.1) + - hermes-engine (0.70.2) - libevent (2.1.12) - libwebp (1.2.3): - libwebp/demux (= 1.2.3) @@ -394,7 +394,7 @@ PODS: - nanopb/encode (2.30909.0) - Nimble (9.2.1) - PromisesObjC (2.1.1) - - Protobuf (3.21.6) + - Protobuf (3.21.7) - Quick (5.0.1) - RCT-Folly (2021.07.22.00): - boost @@ -413,214 +413,214 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.70.1) - - RCTTypeSafety (0.70.1): - - FBLazyVector (= 0.70.1) - - RCTRequired (= 0.70.1) - - React-Core (= 0.70.1) - - React (0.70.1): - - React-Core (= 0.70.1) - - React-Core/DevSupport (= 0.70.1) - - React-Core/RCTWebSocket (= 0.70.1) - - React-RCTActionSheet (= 0.70.1) - - React-RCTAnimation (= 0.70.1) - - React-RCTBlob (= 0.70.1) - - React-RCTImage (= 0.70.1) - - React-RCTLinking (= 0.70.1) - - React-RCTNetwork (= 0.70.1) - - React-RCTSettings (= 0.70.1) - - React-RCTText (= 0.70.1) - - React-RCTVibration (= 0.70.1) - - React-bridging (0.70.1): + - RCTRequired (0.70.2) + - RCTTypeSafety (0.70.2): + - FBLazyVector (= 0.70.2) + - RCTRequired (= 0.70.2) + - React-Core (= 0.70.2) + - React (0.70.2): + - React-Core (= 0.70.2) + - React-Core/DevSupport (= 0.70.2) + - React-Core/RCTWebSocket (= 0.70.2) + - React-RCTActionSheet (= 0.70.2) + - React-RCTAnimation (= 0.70.2) + - React-RCTBlob (= 0.70.2) + - React-RCTImage (= 0.70.2) + - React-RCTLinking (= 0.70.2) + - React-RCTNetwork (= 0.70.2) + - React-RCTSettings (= 0.70.2) + - React-RCTText (= 0.70.2) + - React-RCTVibration (= 0.70.2) + - React-bridging (0.70.2): - RCT-Folly (= 2021.07.22.00) - - React-jsi (= 0.70.1) - - React-callinvoker (0.70.1) - - React-Codegen (0.70.1): - - FBReactNativeSpec (= 0.70.1) + - React-jsi (= 0.70.2) + - React-callinvoker (0.70.2) + - React-Codegen (0.70.2): + - FBReactNativeSpec (= 0.70.2) - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.70.1) - - RCTTypeSafety (= 0.70.1) - - React-Core (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-Core (0.70.1): + - RCTRequired (= 0.70.2) + - RCTTypeSafety (= 0.70.2) + - React-Core (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-Core (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-Core/Default (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/CoreModulesHeaders (0.70.1): + - React-Core/CoreModulesHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/Default (0.70.1): + - React-Core/Default (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/DevSupport (0.70.1): + - React-Core/DevSupport (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.70.1) - - React-Core/RCTWebSocket (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-jsinspector (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-Core/Default (= 0.70.2) + - React-Core/RCTWebSocket (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-jsinspector (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTActionSheetHeaders (0.70.1): + - React-Core/RCTActionSheetHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTAnimationHeaders (0.70.1): + - React-Core/RCTAnimationHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTBlobHeaders (0.70.1): + - React-Core/RCTBlobHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTImageHeaders (0.70.1): + - React-Core/RCTImageHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTLinkingHeaders (0.70.1): + - React-Core/RCTLinkingHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTNetworkHeaders (0.70.1): + - React-Core/RCTNetworkHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTSettingsHeaders (0.70.1): + - React-Core/RCTSettingsHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTTextHeaders (0.70.1): + - React-Core/RCTTextHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTVibrationHeaders (0.70.1): + - React-Core/RCTVibrationHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTWebSocket (0.70.1): + - React-Core/RCTWebSocket (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-Core/Default (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-CoreModules (0.70.1): + - React-CoreModules (0.70.2): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/CoreModulesHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - React-RCTImage (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-cxxreact (0.70.1): + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/CoreModulesHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - React-RCTImage (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-cxxreact (0.70.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsinspector (= 0.70.1) - - React-logger (= 0.70.1) - - React-perflogger (= 0.70.1) - - React-runtimeexecutor (= 0.70.1) - - React-hermes (0.70.1): + - React-callinvoker (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsinspector (= 0.70.2) + - React-logger (= 0.70.2) + - React-perflogger (= 0.70.2) + - React-runtimeexecutor (= 0.70.2) + - React-hermes (0.70.2): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-jsinspector (= 0.70.1) - - React-perflogger (= 0.70.1) - - React-jsi (0.70.1): + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-jsinspector (= 0.70.2) + - React-perflogger (= 0.70.2) + - React-jsi (0.70.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-jsi/Default (= 0.70.1) - - React-jsi/Default (0.70.1): + - React-jsi/Default (= 0.70.2) + - React-jsi/Default (0.70.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.70.1): + - React-jsiexecutor (0.70.2): - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-perflogger (= 0.70.1) - - React-jsinspector (0.70.1) - - React-logger (0.70.1): + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-perflogger (= 0.70.2) + - React-jsinspector (0.70.2) + - React-logger (0.70.2): - glog - react-native-netinfo (9.3.0): - React-Core @@ -640,72 +640,72 @@ PODS: - React-Core - react-native-webview (11.23.1): - React-Core - - React-perflogger (0.70.1) - - React-RCTActionSheet (0.70.1): - - React-Core/RCTActionSheetHeaders (= 0.70.1) - - React-RCTAnimation (0.70.1): + - React-perflogger (0.70.2) + - React-RCTActionSheet (0.70.2): + - React-Core/RCTActionSheetHeaders (= 0.70.2) + - React-RCTAnimation (0.70.2): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTAnimationHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTBlob (0.70.1): + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTAnimationHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTBlob (0.70.2): - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.70.1) - - React-Core/RCTBlobHeaders (= 0.70.1) - - React-Core/RCTWebSocket (= 0.70.1) - - React-jsi (= 0.70.1) - - React-RCTNetwork (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTImage (0.70.1): + - React-Codegen (= 0.70.2) + - React-Core/RCTBlobHeaders (= 0.70.2) + - React-Core/RCTWebSocket (= 0.70.2) + - React-jsi (= 0.70.2) + - React-RCTNetwork (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTImage (0.70.2): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTImageHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - React-RCTNetwork (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTLinking (0.70.1): - - React-Codegen (= 0.70.1) - - React-Core/RCTLinkingHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTNetwork (0.70.1): + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTImageHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - React-RCTNetwork (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTLinking (0.70.2): + - React-Codegen (= 0.70.2) + - React-Core/RCTLinkingHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTNetwork (0.70.2): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTNetworkHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTSettings (0.70.1): + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTNetworkHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTSettings (0.70.2): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTSettingsHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTText (0.70.1): - - React-Core/RCTTextHeaders (= 0.70.1) - - React-RCTVibration (0.70.1): + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTSettingsHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTText (0.70.2): + - React-Core/RCTTextHeaders (= 0.70.2) + - React-RCTVibration (0.70.2): - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.70.1) - - React-Core/RCTVibrationHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-runtimeexecutor (0.70.1): - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (0.70.1): + - React-Codegen (= 0.70.2) + - React-Core/RCTVibrationHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-runtimeexecutor (0.70.2): + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (0.70.2): - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-bridging (= 0.70.1) - - React-callinvoker (= 0.70.1) - - React-Core (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-logger (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-bridging (= 0.70.2) + - React-callinvoker (= 0.70.2) + - React-Core (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-logger (= 0.70.2) + - React-perflogger (= 0.70.2) - RNCAsyncStorage (1.17.6): - React-Core - RNCMaskedView (0.2.6): @@ -714,7 +714,7 @@ PODS: - React-Core - RNDateTimePicker (6.2.0): - React-Core - - RNGestureHandler (2.5.0): + - RNGestureHandler (2.7.0): - React-Core - RNReanimated (2.10.0): - DoubleConversion @@ -750,9 +750,9 @@ PODS: - React-Core - RNSVG (12.3.0): - React-Core - - SDWebImage (5.13.3): - - SDWebImage/Core (= 5.13.3) - - SDWebImage/Core (5.13.3) + - SDWebImage (5.13.4): + - SDWebImage/Core (= 5.13.4) + - SDWebImage/Core (5.13.4) - SDWebImageSVGKitPlugin (1.3.0): - SDWebImage/Core (~> 5.10) - SVGKit (>= 2.1) @@ -1274,7 +1274,7 @@ SPEC CHECKSUMS: Expo: f35ce9004f13fe930476bd8e667eeb170166ca4e expo-dev-client: 4aea43e3e4495cd676c7954c33bd3bd604cfab3a expo-dev-launcher: 54354885ddd62fd30d2a47b642368ed6609e5dfe - expo-dev-menu: 4b6c7bcd6cb6c8ece9c3003bd8484b0a98c35d08 + expo-dev-menu: 595d84922710a16839da9d9b5d681e885a5233c8 expo-dev-menu-interface: 3629393147ac495c03ef22bdcef66e6fa42b78c3 ExpoCellular: 5cd085987f010055ab92c81d60e948ce0c4b5a89 ExpoClipboard: 596aa4a0f894fbdddc985dc3d2e0e7efeb8ca973 @@ -1306,8 +1306,8 @@ SPEC CHECKSUMS: EXTaskManager: 83b22ad160f6b230f35d3762cb245665cd83289c EXUpdatesInterface: 61d6a5c6e54fc446f3da7d9be8961cd9448ae3ef EXVideoThumbnails: cbdaf4120d09b3bdf4bb011031897e14038803aa - FBLazyVector: d3cdc05875c89782840d2f38e1d6174fab24e4d2 - FBReactNativeSpec: ed1306781afa5274f5916ff732f249fbe6f3adea + FBLazyVector: 0507edc21c06f1650c591f0981c846445469373b + FBReactNativeSpec: f7e87d34d29f7326227310a192cb008704ce809f Firebase: 800f16f07af493d98d017446a315c27af0552f41 FirebaseAnalytics: 1b60984a408320dda637306f3f733699ef8473d7 FirebaseCore: 25c0400b670fd1e2f2104349cd3b5dcce8d9418f @@ -1323,7 +1323,7 @@ SPEC CHECKSUMS: GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7 GoogleUtilitiesComponents: 679b2c881db3b615a2777504623df6122dd20afe GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - hermes-engine: 9cd393f741bfa14d1d0cd90cc373e3619c0bc7ea + hermes-engine: f9312a2ea8036d03b63568ebf392314f4fa8b474 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c MLImage: a454f9f8ecfd537783a12f9488f5be1a68820829 @@ -1333,23 +1333,23 @@ SPEC CHECKSUMS: nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 Nimble: d954d0accfd082f2225e62d71008440493e318f4 PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb - Protobuf: e7846f61e8542750cf311385fc633c1d00928f9f + Protobuf: f4128517d7a42302e106cc3afe614ee3a7513e94 Quick: 749aa754fd1e7d984f2000fe051e18a3a9809179 RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda - RCTRequired: 1b4e0388c8ad776b2d23f8135926fa4e7ddacdf4 - RCTTypeSafety: 23dc09d6e9ed210fabab031a568bb0194d492385 - React: 8ca78b2619353c251478892f087d007365af8170 - React-bridging: e98ade701d1e8e8e764a5e7a66f1725135a0a8ce - React-callinvoker: d32c4a1e448799506e9c45ef25ae8ff3c5f77246 - React-Codegen: 642c7cc5e5bd43ef07f275da308d86ff05c0069c - React-Core: 59487b5839f3ff353bbc847df22fc7f8a42ff421 - React-CoreModules: 62df56334be6c6ef93e1b637284abb782a731318 - React-cxxreact: 5a641acd449213f420ec01f0c912c8433a91c4ba - React-hermes: 909477fce9db1d83e854489d5f3c360dd40cf8b9 - React-jsi: 28343c93479aa1380251c450a76a9d6eabacf3cd - React-jsiexecutor: 47201924064085223b63ec7e3ee9fd40ad8508e8 - React-jsinspector: 1363be638eccfe1aea1b10dd42e632b0397e5ec8 - React-logger: 7bd569e3857d74ed412ce0a5c51f421ff7d4ca7f + RCTRequired: d4033a367d0bfd1f23f67b501f8cdabf9afe617e + RCTTypeSafety: b112b2ccc59309a65284280c0a53baf1ce4b5860 + React: 04474547a4729eef1fb378ca42f302f4b3219eb8 + React-bridging: 1c8695b292b4a9baaca3960f6166d9766e20492d + React-callinvoker: 4d91e2db7773ee3fcea2d3a5c6beb52a5bfd4d71 + React-Codegen: 33356335c6f3b0869cb4434055fdec219139f635 + React-Core: 634b8aa20e1dad445425ee9581f4719bcfd1b19b + React-CoreModules: 746825283de4b54dcb4fd88703ff516297a5f60d + React-cxxreact: f8d2686d98b5ffed1b1de3aa62e1f81db4903153 + React-hermes: 4e9f5f9cfff42a23e7d6d8083e6c8a3f6f4926ee + React-jsi: 198b9b3e0a85e68cb6898265400fd8bf34cacda4 + React-jsiexecutor: 53bd208e5c27939c6e6365528393445a596a9a2b + React-jsinspector: 26c42646ab0bb69e29e837e23754fe7121eeaf94 + React-logger: 1bfd109a0ffa4c0989bbfac0c2d8c4abe4637faa react-native-netinfo: 129bd99f607a2dc5bb096168f3e5c150fd1f1c95 react-native-safe-area-context: 6c12e3859b6f27b25de4fee8201cfb858432d8de react-native-segmented-control: 06607462630512ff8eef652ec560e6235a30cc3e @@ -1357,33 +1357,33 @@ SPEC CHECKSUMS: react-native-view-shot: da768466e1cd371de50a3a5c722d1e95456b5b2c react-native-viewpager: b99b53127d830885917ef84809c5065edd614a78 react-native-webview: d33e2db8925d090871ffeb232dfa50cb3a727581 - React-perflogger: 48c6b363e867d64b682e84f80ca45636bd65e19c - React-RCTActionSheet: 33c74fe5c754835e3715c300618da9aa2f7203fa - React-RCTAnimation: 2dbf0120d4d1ab7716079b4180f2ca89c465e46b - React-RCTBlob: ccf17363f809c5030746fdb56641527e6bf9adb7 - React-RCTImage: 88a61b23cd5a6feb8d4436f1e306d9f2ecee3462 - React-RCTLinking: c63a07ce60a6cb7642acebc80a447fb3f1872eba - React-RCTNetwork: f79b6e7c64e7317d34dec7dcfabd1279a6c1d2e7 - React-RCTSettings: 1ff0f34d41646c7942adea36ab5706320e693756 - React-RCTText: 7cb05abb91cae0ab7841d551e811ccefa3714dbd - React-RCTVibration: e9164827303fb6a5cf79e4c4af4846a09956b11f - React-runtimeexecutor: a11d0c2e14140baf1e449264ca9168ae9ae6bbd0 - ReactCommon: 7f86326b92009925c6dcf93f8e825060171c379f + React-perflogger: 6009895616a455781293950bbd63d53cfc7ffbc5 + React-RCTActionSheet: 5e90aa5712af18bfc86c2c6d97d4dbe0e5451c1d + React-RCTAnimation: 50c44d6501f8bfb2fe885e544501f8798b4ff3d6 + React-RCTBlob: 3cc08e7112dd7b77faf3fa481ba22ca2bba5f20a + React-RCTImage: ca8335860b5f64c383ad27f52a28d85089d49b7a + React-RCTLinking: 297cd91bdbf427efc861fc7943e6d683e61860fa + React-RCTNetwork: 8a197bff6f1dc5353484507a4cdcd47e9356316f + React-RCTSettings: d3db1f1e61a5ad8deb50f44f5cb6c7c3ef32b3ac + React-RCTText: c2c05ab3dbfb1cf5855b14802f392148970e48da + React-RCTVibration: 89e2cbea456ac5ec623943661d00e4dc45fe74b9 + React-runtimeexecutor: 80065f60af4f4b05603661070c8622bb3740bf16 + ReactCommon: 1209130f460e4aa9d255ddc75fa0a827ebf93dfb RNCAsyncStorage: 466b9df1a14bccda91da86e0b7d9a345d78e1673 RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd RNCPicker: 2f71e09c52ab6327e2c393213368ea0e5bfbcb65 RNDateTimePicker: 30e6733efc179d1e49d6008ea5fce42cdc9aeeca - RNGestureHandler: bad495418bcbd3ab47017a38d93d290ebd406f50 + RNGestureHandler: 7673697e7c0e9391adefae4faa087442bc04af33 RNReanimated: 60e291d42c77752a0f6d6f358387bdf225a87c6e RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 RNSharedElement: eb7d506733952d58634f34c82ec17e82f557e377 RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8 - SDWebImage: af5bbffef2cde09f148d826f9733dcde1a9414cd + SDWebImage: e5cc87bf736e60f49592f307bdf9e157189298a3 SDWebImageSVGKitPlugin: 8797e1c9b9baf80bd50d28e673e16a12359af1c9 SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d SVGKit: 652cdf7bef8bec8564d04a8511d3ab50c7595fac UMAppLoader: 90a8e7f4b09b576588e7c2939321860fba47343e - Yoga: 6c8252e38d65aa387daee699eacf027e055e0b31 + Yoga: 043f8eb97345d0171f27fead4d1849cacf0472a5 ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb PODFILE CHECKSUM: 41606ed9e3f0ee491d786c833b92124d85867cc3 diff --git a/apps/bare-expo/package.json b/apps/bare-expo/package.json index db89abf81a585..20deacf07e098 100644 --- a/apps/bare-expo/package.json +++ b/apps/bare-expo/package.json @@ -111,8 +111,8 @@ "native-component-list": "*", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1", - "react-native-gesture-handler": "~2.5.0", + "react-native": "0.70.2", + "react-native-gesture-handler": "~2.7.0", "react-native-reanimated": "~2.10.0", "react-native-safe-area-context": "4.3.1", "react-native-screens": "~3.15.0", diff --git a/apps/bare-sandbox/package.json b/apps/bare-sandbox/package.json index b15f6be67ae62..d618fdbabc878 100644 --- a/apps/bare-sandbox/package.json +++ b/apps/bare-sandbox/package.json @@ -17,8 +17,8 @@ "expo-system-ui": "1.3.0", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1", - "react-native-gesture-handler": "~2.5.0", + "react-native": "0.70.2", + "react-native-gesture-handler": "~2.7.0", "react-native-reanimated": "~2.10.0", "react-native-screens": "~3.15.0", "react-native-web": "~0.18.9" diff --git a/apps/eas-expo-go/eas.json b/apps/eas-expo-go/eas.json index 7350aa2026b5a..7a94791e8e886 100644 --- a/apps/eas-expo-go/eas.json +++ b/apps/eas-expo-go/eas.json @@ -21,7 +21,7 @@ }, "ios": { "cache": { - "key": "sdk47", + "key": "sdk47-0.70.2", "customPaths": [ "../../ios/Pods" ] diff --git a/apps/fabric-tester b/apps/fabric-tester index b812892ea1ecf..a6aeadab330b4 160000 --- a/apps/fabric-tester +++ b/apps/fabric-tester @@ -1 +1 @@ -Subproject commit b812892ea1ecf199efbf18ccdc04bfcf0a90bb0f +Subproject commit a6aeadab330b445d1f557605e4097f75f4e22792 diff --git a/apps/jest-expo-mock-generator/package.json b/apps/jest-expo-mock-generator/package.json index 4c1449ae26f99..16a57629b3dde 100644 --- a/apps/jest-expo-mock-generator/package.json +++ b/apps/jest-expo-mock-generator/package.json @@ -11,7 +11,7 @@ "@expo/mux": "^1.0.7", "expo": "~46.0.0-alpha.0", "react": "18.1.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "uuid": "^3.4.0" } } diff --git a/apps/native-component-list/package.json b/apps/native-component-list/package.json index bfa3f1a97bd4a..15aaa7e10c8c0 100644 --- a/apps/native-component-list/package.json +++ b/apps/native-component-list/package.json @@ -143,8 +143,8 @@ "processing-js": "^1.6.6", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1", - "react-native-gesture-handler": "~2.5.0", + "react-native": "0.70.2", + "react-native-gesture-handler": "~2.7.0", "react-native-iphone-x-helper": "^1.3.0", "react-native-maps": "0.31.1", "react-native-pager-view": "5.4.24", diff --git a/apps/native-tests/package.json b/apps/native-tests/package.json index d1f003e0989f7..bd83c10cf244e 100644 --- a/apps/native-tests/package.json +++ b/apps/native-tests/package.json @@ -22,7 +22,7 @@ "native-component-list": "*", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1" + "react-native": "0.70.2" }, "devDependencies": { "@babel/core": "^7.12.9" diff --git a/apps/sandbox/package.json b/apps/sandbox/package.json index aeb442ae0ce0e..a69bb163bbab9 100644 --- a/apps/sandbox/package.json +++ b/apps/sandbox/package.json @@ -12,7 +12,7 @@ "dependencies": { "expo": "~46.0.0-alpha.0", "react": "18.1.0", - "react-native": "0.70.1" + "react-native": "0.70.2" }, "devDependencies": { "babel-preset-expo": "~9.2.0", diff --git a/apps/test-suite/package.json b/apps/test-suite/package.json index 234dbaff10e08..bc6102fd9ef0e 100644 --- a/apps/test-suite/package.json +++ b/apps/test-suite/package.json @@ -50,8 +50,8 @@ "jasmine-core": "^2.4.1", "lodash": "^4.17.19", "react": "18.1.0", - "react-native": "0.70.1", - "react-native-gesture-handler": "~2.5.0", + "react-native": "0.70.2", + "react-native-gesture-handler": "~2.7.0", "react-native-safe-area-view": "^0.14.8", "sinon": "^7.1.1" }, diff --git a/docs/pages/build-reference/npm-hooks.mdx b/docs/pages/build-reference/npm-hooks.mdx index 4b37ca379e337..b9b011e49e493 100644 --- a/docs/pages/build-reference/npm-hooks.mdx +++ b/docs/pages/build-reference/npm-hooks.mdx @@ -34,7 +34,7 @@ This is an example of how your **package.json** might look like: ## Platform-specific hook behavior -If you would like to run a script (or some part of a script) only for iOS builds or only for Android builds, you can fork the behavior depending on the platform within the script; iOS builds run on macOS (Darwin) and Android builds run on Ubuntu (Linux). See examples for common ways to do this through a shell script or a Node script below. +If you would like to run a script (or some part of a script) only for iOS builds or only for Android builds, you can fork the behavior depending on the platform within the script. See examples for common ways to do this through a shell script or a Node script below. ## Examples @@ -56,13 +56,13 @@ If you would like to run a script (or some part of a script) only for iOS builds ```bash pre-install #!/bin/bash + # This is a file called "pre-install" in the root of the project -unamestr=$(uname) -if [[ "$unamestr" == 'Linux' ]]; then - echo "Linux detected, run commands for Android builds here" -elif [[ "$unamestr" == 'Darwin' ]]; then - echo "macOS detected, run commands for iOS builds here" +if [[ "$EAS_BUILD_PLATFORM" == "android" ]]; then + echo "Run commands for Android builds here" +elif [[ "$EAS_BUILD_PLATFORM" == "ios" ]]; then + echo "Run commands for iOS builds here" fi ``` @@ -84,9 +84,10 @@ fi ```js pre-install.js // This is a file called "pre-install.js" in the root of the project -if (process.platform === 'linux') { - console.log('Linux detected, run commands for Android builds here'); -} else if (process.platform === 'darwin') { - console.log('macOS detected, run commands for iOS builds here'); + +if (process.env.EAS_BUILD_PLATFORM === 'android') { + console.log('Run commands for Android builds here'); +} else if (process.env.EAS_BUILD_PLATFORM === 'ios') { + console.log('Run commands for iOS builds here'); } ``` diff --git a/docs/pages/build-reference/variables.mdx b/docs/pages/build-reference/variables.mdx index 17189e26bfaa2..c96caa2a71abb 100644 --- a/docs/pages/build-reference/variables.mdx +++ b/docs/pages/build-reference/variables.mdx @@ -3,6 +3,7 @@ title: Environment variables and secrets --- import { Collapsible } from '~/ui/components/Collapsible'; +import { Terminal } from '~/ui/components/Snippet'; The ["Environment variables in Expo"](/guides/environment-variables.mdx) guide presents several options for how you can access system environment variables to your app JavaScript code. This can be a useful way to inject values in your code, but [these values should not be secrets](/guides/environment-variables.mdx#security-considerations), and so the value it provides can be summarized as a convenience for accommodating certain development workflows. @@ -14,7 +15,7 @@ Plaintext environment variables are strings that you are comfortable with commit You can specify environment variables for specific build jobs using **eas.json**: -```json +```json eas.json { "build": { "production": { @@ -28,7 +29,7 @@ You can specify environment variables for specific build jobs using **eas.json** You can access these variables in your application using the techniques described in the ["Environment variables in Expo"](/guides/environment-variables.mdx) guide. You can also share common configurations between different build profiles using the `"extends"` property, if both profiles have an `env` object defined, content will be merged. -```json +```json eas.json { "build": { "production": { @@ -73,6 +74,8 @@ To provide your build jobs with access to values that are too sensitive to inclu A secret is made up of a name and a value. The name can only contain alphanumeric characters and underscores. The value is limited to 32 KiB. +The value can be either a file or a string value. For a file, its contents are saved to a temporary file on EAS Build servers. The file path is available via the environment variable. For example, if you created a file secret named `SECRET_FILE`, EAS Build will create a file at `/Users/expo/workingdir/environment-secrets/__UNIQUE_RANDOM_UUID__`, and `SECRET_FILE` will be set to that path. + The secret values are encrypted at rest and in transit, and are only decrypted in a secure environment by EAS servers. You can create up to 100 account-wide secrets for each Expo account and 100 app-specific secrets for each app. Account-wide secrets will be exposed to every build environment across all of your apps. App-specific secrets only apply to the app they're defined for, and will override any account-wide secrets with the same name. @@ -94,29 +97,32 @@ To create **app-specific secrets**, navigate to [the "Secrets" tab in your proje To create a new secret, run `eas secret:create` -``` -> eas secret:create --scope project --name SECRET_NAME --value secretvalue -✔ Linked to project @fiberjw/goodweebs -✔ You're inside the project directory. Would you like to use fiberjw account? … yes -✔ ️Created a new secret SECRET_NAME on project @fiberjw/goodweebs. -``` + To view any existing secrets for this project, run `eas secret:list`: -``` -> eas secret:list -✔ Linked to project @fiberjw/goodweebs -Secrets for this account and project: -┌─────────────────┬─────────┬─────────────────┬──────────────────────────────────────┐ -│ Name │ Target │ Updated at │ ID │ -├─────────────────┼─────────┼─────────────────┼──────────────────────────────────────┤ -│ NPM_TOKEN │ project │ Mar 11 17:51:36 │ e6625438-d1ed-463b-a143-dd3c2d8f57d6 │ -├─────────────────┼─────────┼─────────────────┼──────────────────────────────────────┤ -│ sentryApiKey │ project │ Mar 14 20:57:31 │ f093af84-cc8e-45c0-b969-0e86c724369d │ -├─────────────────┼─────────┼─────────────────┼──────────────────────────────────────┤ -│ APP_UPLOAD_KEY │ account │ Mar 14 20:10:52 │ aa08a553-289e-4a6a-9063-8607a4358df5 │ -└─────────────────┴─────────┴─────────────────┴──────────────────────────────────────┘ -``` + ### Accessing secrets in EAS Build @@ -130,7 +136,7 @@ Environment variables can be tricky to use if you don't have the correct mental When you define environment variables on build profiles in **eas.json**, they will not be available for local development when you run `npx expo start`. A concern that developers often raise about this is that they now have to duplicate their configuration in multiple places, leading to additional maintenance effort and possible bugs when values go out of sync. If you find yourself in this situation, one possible solution is to move your configuration out of environment variables and into JavaScript. For example, imagine we had the following **eas.json**: -```json +```json eas.json { "build": { "production": { @@ -153,7 +159,7 @@ When you define environment variables on build profiles in **eas.json**, they wi In **app.config.js**, we may be using the API URL like this: -```js +```js app.config.js export default { // ... extra: { diff --git a/docs/ui/components/Snippet/blocks/Terminal.tsx b/docs/ui/components/Snippet/blocks/Terminal.tsx index 1388668285578..a484903bbf0e0 100644 --- a/docs/ui/components/Snippet/blocks/Terminal.tsx +++ b/docs/ui/components/Snippet/blocks/Terminal.tsx @@ -109,6 +109,7 @@ const unselectableStyle = css` `; const codeStyle = css` + white-space: pre; display: inline-block; line-height: 140%; background-color: transparent; diff --git a/home/package.json b/home/package.json index e0b729141556f..c5cfd11667a5e 100644 --- a/home/package.json +++ b/home/package.json @@ -53,9 +53,9 @@ "prop-types": "^15.7.2", "querystring": "^0.2.0", "react": "18.1.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "react-native-fade-in-image": "^1.6.1", - "react-native-gesture-handler": "~2.5.0", + "react-native-gesture-handler": "~2.7.0", "react-native-infinite-scroll-view": "^0.4.5", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-maps": "0.31.1", diff --git a/ios/Podfile.lock b/ios/Podfile.lock index de7fddedcbf76..8f45fdfc8a706 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1472,14 +1472,14 @@ PODS: - FacebookSDK/CoreKit - FBAudienceNetwork (6.5.0): - FBSDKCoreKit/Basics (>= 7.0.1) - - FBLazyVector (0.70.1) - - FBReactNativeSpec (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.70.1) - - RCTTypeSafety (= 0.70.1) - - React-Core (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) + - FBLazyVector (0.70.2) + - FBReactNativeSpec (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.70.2) + - RCTTypeSafety (= 0.70.2) + - React-Core (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) - FBSDKCoreKit (9.2.0): - FBSDKCoreKit/Basics (= 9.2.0) - FBSDKCoreKit/Core (= 9.2.0) @@ -1637,7 +1637,7 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - GTMSessionFetcher/Core (1.7.2) - - hermes-engine (0.70.1) + - hermes-engine (0.70.2) - JKBigInteger (0.0.6) - libevent (2.1.12) - lottie-ios (3.2.3) @@ -1675,7 +1675,7 @@ PODS: - OCMockito (6.0.0): - OCHamcrest (~> 8.0) - PromisesObjC (2.1.1) - - Protobuf (3.21.6) + - Protobuf (3.21.7) - Quick (5.0.1) - RCT-Folly (2021.07.22.00): - boost @@ -1694,214 +1694,214 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.70.1) - - RCTTypeSafety (0.70.1): - - FBLazyVector (= 0.70.1) - - RCTRequired (= 0.70.1) - - React-Core (= 0.70.1) - - React (0.70.1): - - React-Core (= 0.70.1) - - React-Core/DevSupport (= 0.70.1) - - React-Core/RCTWebSocket (= 0.70.1) - - React-RCTActionSheet (= 0.70.1) - - React-RCTAnimation (= 0.70.1) - - React-RCTBlob (= 0.70.1) - - React-RCTImage (= 0.70.1) - - React-RCTLinking (= 0.70.1) - - React-RCTNetwork (= 0.70.1) - - React-RCTSettings (= 0.70.1) - - React-RCTText (= 0.70.1) - - React-RCTVibration (= 0.70.1) - - React-bridging (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - React-jsi (= 0.70.1) - - React-callinvoker (0.70.1) - - React-Codegen (0.70.1): - - FBReactNativeSpec (= 0.70.1) - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.70.1) - - RCTTypeSafety (= 0.70.1) - - React-Core (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-Core (0.70.1): - - glog - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - RCTRequired (0.70.2) + - RCTTypeSafety (0.70.2): + - FBLazyVector (= 0.70.2) + - RCTRequired (= 0.70.2) + - React-Core (= 0.70.2) + - React (0.70.2): + - React-Core (= 0.70.2) + - React-Core/DevSupport (= 0.70.2) + - React-Core/RCTWebSocket (= 0.70.2) + - React-RCTActionSheet (= 0.70.2) + - React-RCTAnimation (= 0.70.2) + - React-RCTBlob (= 0.70.2) + - React-RCTImage (= 0.70.2) + - React-RCTLinking (= 0.70.2) + - React-RCTNetwork (= 0.70.2) + - React-RCTSettings (= 0.70.2) + - React-RCTText (= 0.70.2) + - React-RCTVibration (= 0.70.2) + - React-bridging (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - React-jsi (= 0.70.2) + - React-callinvoker (0.70.2) + - React-Codegen (0.70.2): + - FBReactNativeSpec (= 0.70.2) + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.70.2) + - RCTTypeSafety (= 0.70.2) + - React-Core (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-Core (0.70.2): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/CoreModulesHeaders (0.70.1): + - React-Core/CoreModulesHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/Default (0.70.1): + - React-Core/Default (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/DevSupport (0.70.1): + - React-Core/DevSupport (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.70.1) - - React-Core/RCTWebSocket (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-jsinspector (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-Core/Default (= 0.70.2) + - React-Core/RCTWebSocket (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-jsinspector (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTActionSheetHeaders (0.70.1): + - React-Core/RCTActionSheetHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTAnimationHeaders (0.70.1): + - React-Core/RCTAnimationHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTBlobHeaders (0.70.1): + - React-Core/RCTBlobHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTImageHeaders (0.70.1): + - React-Core/RCTImageHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTLinkingHeaders (0.70.1): + - React-Core/RCTLinkingHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTNetworkHeaders (0.70.1): + - React-Core/RCTNetworkHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTSettingsHeaders (0.70.1): + - React-Core/RCTSettingsHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTTextHeaders (0.70.1): + - React-Core/RCTTextHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTVibrationHeaders (0.70.1): + - React-Core/RCTVibrationHeaders (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-Core/RCTWebSocket (0.70.1): + - React-Core/RCTWebSocket (0.70.2): - glog - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-Core/Default (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-perflogger (= 0.70.2) - Yoga - - React-CoreModules (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/CoreModulesHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - React-RCTImage (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-cxxreact (0.70.1): + - React-CoreModules (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/CoreModulesHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - React-RCTImage (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-cxxreact (0.70.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsinspector (= 0.70.1) - - React-logger (= 0.70.1) - - React-perflogger (= 0.70.1) - - React-runtimeexecutor (= 0.70.1) - - React-hermes (0.70.1): + - React-callinvoker (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsinspector (= 0.70.2) + - React-logger (= 0.70.2) + - React-perflogger (= 0.70.2) + - React-runtimeexecutor (= 0.70.2) + - React-hermes (0.70.2): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-jsiexecutor (= 0.70.1) - - React-jsinspector (= 0.70.1) - - React-perflogger (= 0.70.1) - - React-jsi (0.70.1): + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-jsiexecutor (= 0.70.2) + - React-jsinspector (= 0.70.2) + - React-perflogger (= 0.70.2) + - React-jsi (0.70.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-jsi/Default (= 0.70.1) - - React-jsi/Default (0.70.1): + - React-jsi/Default (= 0.70.2) + - React-jsi/Default (0.70.2): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.70.1): + - React-jsiexecutor (0.70.2): - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-perflogger (= 0.70.1) - - React-jsinspector (0.70.1) - - React-logger (0.70.1): + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-perflogger (= 0.70.2) + - React-jsinspector (0.70.2) + - React-logger (0.70.2): - glog - react-native-netinfo (9.3.0): - React-Core @@ -1946,75 +1946,75 @@ PODS: - React-Core - react-native-webview (11.23.1): - React-Core - - React-perflogger (0.70.1) - - React-RCTActionSheet (0.70.1): - - React-Core/RCTActionSheetHeaders (= 0.70.1) - - React-RCTAnimation (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTAnimationHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTBlob (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.70.1) - - React-Core/RCTBlobHeaders (= 0.70.1) - - React-Core/RCTWebSocket (= 0.70.1) - - React-jsi (= 0.70.1) - - React-RCTNetwork (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTImage (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTImageHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - React-RCTNetwork (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTLinking (0.70.1): - - React-Codegen (= 0.70.1) - - React-Core/RCTLinkingHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTNetwork (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTNetworkHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTSettings (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.70.1) - - React-Codegen (= 0.70.1) - - React-Core/RCTSettingsHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-RCTText (0.70.1): - - React-Core/RCTTextHeaders (= 0.70.1) - - React-RCTVibration (0.70.1): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.70.1) - - React-Core/RCTVibrationHeaders (= 0.70.1) - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (= 0.70.1) - - React-runtimeexecutor (0.70.1): - - React-jsi (= 0.70.1) - - ReactCommon/turbomodule/core (0.70.1): + - React-perflogger (0.70.2) + - React-RCTActionSheet (0.70.2): + - React-Core/RCTActionSheetHeaders (= 0.70.2) + - React-RCTAnimation (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTAnimationHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTBlob (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.70.2) + - React-Core/RCTBlobHeaders (= 0.70.2) + - React-Core/RCTWebSocket (= 0.70.2) + - React-jsi (= 0.70.2) + - React-RCTNetwork (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTImage (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTImageHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - React-RCTNetwork (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTLinking (0.70.2): + - React-Codegen (= 0.70.2) + - React-Core/RCTLinkingHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTNetwork (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTNetworkHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTSettings (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.2) + - React-Codegen (= 0.70.2) + - React-Core/RCTSettingsHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-RCTText (0.70.2): + - React-Core/RCTTextHeaders (= 0.70.2) + - React-RCTVibration (0.70.2): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.70.2) + - React-Core/RCTVibrationHeaders (= 0.70.2) + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (= 0.70.2) + - React-runtimeexecutor (0.70.2): + - React-jsi (= 0.70.2) + - ReactCommon/turbomodule/core (0.70.2): - DoubleConversion - glog - RCT-Folly (= 2021.07.22.00) - - React-bridging (= 0.70.1) - - React-callinvoker (= 0.70.1) - - React-Core (= 0.70.1) - - React-cxxreact (= 0.70.1) - - React-jsi (= 0.70.1) - - React-logger (= 0.70.1) - - React-perflogger (= 0.70.1) + - React-bridging (= 0.70.2) + - React-callinvoker (= 0.70.2) + - React-Core (= 0.70.2) + - React-cxxreact (= 0.70.2) + - React-jsi (= 0.70.2) + - React-logger (= 0.70.2) + - React-perflogger (= 0.70.2) - RNFlashList (1.3.0): - React-Core - - RNGestureHandler (2.5.0): + - RNGestureHandler (2.7.0): - React-Core - RNReanimated (2.9.1): - DoubleConversion @@ -3434,8 +3434,8 @@ SPEC CHECKSUMS: EXVideoThumbnails: cbdaf4120d09b3bdf4bb011031897e14038803aa FacebookSDK: 4b9bb8e2824898b47f18c666dc145c09b40609e6 FBAudienceNetwork: cfe55330dcc4e9a1df083c34a346ca7f8e32951e - FBLazyVector: d3cdc05875c89782840d2f38e1d6174fab24e4d2 - FBReactNativeSpec: 41f223dc17488d15546747057e86d6ea5c086793 + FBLazyVector: 0507edc21c06f1650c591f0981c846445469373b + FBReactNativeSpec: b209a701e374ac2ed4ba00458135526bdca97fdf FBSDKCoreKit: dace5abafc2fd9272733e6d027bcf18102712117 Firebase: 800f16f07af493d98d017446a315c27af0552f41 FirebaseAnalytics: 1b60984a408320dda637306f3f733699ef8473d7 @@ -3458,7 +3458,7 @@ SPEC CHECKSUMS: GoogleUtilitiesComponents: 679b2c881db3b615a2777504623df6122dd20afe GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - hermes-engine: 9cd393f741bfa14d1d0cd90cc373e3619c0bc7ea + hermes-engine: f9312a2ea8036d03b63568ebf392314f4fa8b474 JKBigInteger: 5c72131974815e969c0782c41e3452f1bbe5619f libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 lottie-ios: c058aeafa76daa4cf64d773554bccc8385d0150e @@ -3473,43 +3473,43 @@ SPEC CHECKSUMS: OCHamcrest: a613690381f1dac7637c18962c10dbe8feca4bb5 OCMockito: 780f04370226f81a9d972c97d1203864ef609f5b PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb - Protobuf: e7846f61e8542750cf311385fc633c1d00928f9f + Protobuf: f4128517d7a42302e106cc3afe614ee3a7513e94 Quick: 749aa754fd1e7d984f2000fe051e18a3a9809179 RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda - RCTRequired: 1b4e0388c8ad776b2d23f8135926fa4e7ddacdf4 - RCTTypeSafety: 23dc09d6e9ed210fabab031a568bb0194d492385 - React: 8ca78b2619353c251478892f087d007365af8170 - React-bridging: e98ade701d1e8e8e764a5e7a66f1725135a0a8ce - React-callinvoker: d32c4a1e448799506e9c45ef25ae8ff3c5f77246 - React-Codegen: 642c7cc5e5bd43ef07f275da308d86ff05c0069c - React-Core: 59487b5839f3ff353bbc847df22fc7f8a42ff421 - React-CoreModules: 62df56334be6c6ef93e1b637284abb782a731318 - React-cxxreact: 5a641acd449213f420ec01f0c912c8433a91c4ba - React-hermes: 909477fce9db1d83e854489d5f3c360dd40cf8b9 - React-jsi: 28343c93479aa1380251c450a76a9d6eabacf3cd - React-jsiexecutor: 47201924064085223b63ec7e3ee9fd40ad8508e8 - React-jsinspector: 1363be638eccfe1aea1b10dd42e632b0397e5ec8 - React-logger: 7bd569e3857d74ed412ce0a5c51f421ff7d4ca7f + RCTRequired: d4033a367d0bfd1f23f67b501f8cdabf9afe617e + RCTTypeSafety: b112b2ccc59309a65284280c0a53baf1ce4b5860 + React: 04474547a4729eef1fb378ca42f302f4b3219eb8 + React-bridging: 1c8695b292b4a9baaca3960f6166d9766e20492d + React-callinvoker: 4d91e2db7773ee3fcea2d3a5c6beb52a5bfd4d71 + React-Codegen: 33356335c6f3b0869cb4434055fdec219139f635 + React-Core: 634b8aa20e1dad445425ee9581f4719bcfd1b19b + React-CoreModules: 746825283de4b54dcb4fd88703ff516297a5f60d + React-cxxreact: f8d2686d98b5ffed1b1de3aa62e1f81db4903153 + React-hermes: 4e9f5f9cfff42a23e7d6d8083e6c8a3f6f4926ee + React-jsi: 198b9b3e0a85e68cb6898265400fd8bf34cacda4 + React-jsiexecutor: 53bd208e5c27939c6e6365528393445a596a9a2b + React-jsinspector: 26c42646ab0bb69e29e837e23754fe7121eeaf94 + React-logger: 1bfd109a0ffa4c0989bbfac0c2d8c4abe4637faa react-native-netinfo: 129bd99f607a2dc5bb096168f3e5c150fd1f1c95 react-native-pager-view: 95d0418c3c74279840abec6926653d32447bafb6 react-native-safe-area-context: 6c12e3859b6f27b25de4fee8201cfb858432d8de react-native-segmented-control: 06607462630512ff8eef652ec560e6235a30cc3e react-native-skia: faacd6a970a757d67c4f4a44a31d347651abbb8e react-native-webview: d33e2db8925d090871ffeb232dfa50cb3a727581 - React-perflogger: 48c6b363e867d64b682e84f80ca45636bd65e19c - React-RCTActionSheet: 33c74fe5c754835e3715c300618da9aa2f7203fa - React-RCTAnimation: 2dbf0120d4d1ab7716079b4180f2ca89c465e46b - React-RCTBlob: ccf17363f809c5030746fdb56641527e6bf9adb7 - React-RCTImage: 88a61b23cd5a6feb8d4436f1e306d9f2ecee3462 - React-RCTLinking: c63a07ce60a6cb7642acebc80a447fb3f1872eba - React-RCTNetwork: f79b6e7c64e7317d34dec7dcfabd1279a6c1d2e7 - React-RCTSettings: 1ff0f34d41646c7942adea36ab5706320e693756 - React-RCTText: 7cb05abb91cae0ab7841d551e811ccefa3714dbd - React-RCTVibration: e9164827303fb6a5cf79e4c4af4846a09956b11f - React-runtimeexecutor: a11d0c2e14140baf1e449264ca9168ae9ae6bbd0 - ReactCommon: 7f86326b92009925c6dcf93f8e825060171c379f + React-perflogger: 6009895616a455781293950bbd63d53cfc7ffbc5 + React-RCTActionSheet: 5e90aa5712af18bfc86c2c6d97d4dbe0e5451c1d + React-RCTAnimation: 50c44d6501f8bfb2fe885e544501f8798b4ff3d6 + React-RCTBlob: 3cc08e7112dd7b77faf3fa481ba22ca2bba5f20a + React-RCTImage: ca8335860b5f64c383ad27f52a28d85089d49b7a + React-RCTLinking: 297cd91bdbf427efc861fc7943e6d683e61860fa + React-RCTNetwork: 8a197bff6f1dc5353484507a4cdcd47e9356316f + React-RCTSettings: d3db1f1e61a5ad8deb50f44f5cb6c7c3ef32b3ac + React-RCTText: c2c05ab3dbfb1cf5855b14802f392148970e48da + React-RCTVibration: 89e2cbea456ac5ec623943661d00e4dc45fe74b9 + React-runtimeexecutor: 80065f60af4f4b05603661070c8622bb3740bf16 + ReactCommon: 1209130f460e4aa9d255ddc75fa0a827ebf93dfb RNFlashList: 5116f2de2f543f01bfc30b22d5942d5af84b43df - RNGestureHandler: bad495418bcbd3ab47017a38d93d290ebd406f50 + RNGestureHandler: 7673697e7c0e9391adefae4faa087442bc04af33 RNReanimated: 5c8c17e26787fd8984cd5accdc70fef2ca70aafd RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 Stripe: fb29a476e4866fec4ef22fb76207363dd32795aa @@ -3519,7 +3519,7 @@ SPEC CHECKSUMS: StripeFinancialConnections: 0e1d638388572d52ce829416fbc7b0af2bde3865 StripeUICore: eed17e95a4517fc02482e250a6422c2a81a14ce8 UMAppLoader: 90a8e7f4b09b576588e7c2939321860fba47343e - Yoga: 6c8252e38d65aa387daee699eacf027e055e0b31 + Yoga: 043f8eb97345d0171f27fead4d1849cacf0472a5 ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb PODFILE CHECKSUM: 28c4f8c13981ced803a02a1c9a3fad0365f4da31 diff --git a/ios/vendored/unversioned/react-native-gesture-handler/RNGestureHandler.podspec.json b/ios/vendored/unversioned/react-native-gesture-handler/RNGestureHandler.podspec.json index da8cd3f5865dd..86e5b94d10d18 100644 --- a/ios/vendored/unversioned/react-native-gesture-handler/RNGestureHandler.podspec.json +++ b/ios/vendored/unversioned/react-native-gesture-handler/RNGestureHandler.podspec.json @@ -1,6 +1,6 @@ { "name": "RNGestureHandler", - "version": "2.5.0", + "version": "2.7.0", "summary": "Experimental implementation of a new declarative API for gesture handling in react-native", "homepage": "https://github.com/software-mansion/react-native-gesture-handler", "license": "MIT", @@ -9,7 +9,7 @@ }, "source": { "git": "https://github.com/software-mansion/react-native-gesture-handler", - "tag": "2.5.0" + "tag": "2.7.0" }, "source_files": "ios/**/*.{h,m,mm}", "requires_arc": true, diff --git a/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerButtonComponentView.mm b/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerButtonComponentView.mm index af99949db4899..0688a780495db 100644 --- a/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerButtonComponentView.mm +++ b/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerButtonComponentView.mm @@ -3,13 +3,13 @@ #import "RNGestureHandlerButtonComponentView.h" #import +#import -#import -#import -#import -#import +#import +#import +#import +#import -#import "RCTFabricComponentsPlugins.h" #import "RNGestureHandlerButton.h" using namespace facebook::react; diff --git a/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerManager.mm b/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerManager.mm index 83b3d9bbc5f8e..8b99316d79f1b 100644 --- a/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerManager.mm +++ b/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerManager.mm @@ -6,12 +6,7 @@ #import #import #import - -#if __has_include() #import -#else -#import "RCTRootContentView.h" -#endif #import "RNGestureHandlerActionType.h" #import "RNGestureHandlerState.h" diff --git a/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerRootViewComponentView.mm b/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerRootViewComponentView.mm index 8423fdec12fcf..af3976c83ea1b 100644 --- a/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerRootViewComponentView.mm +++ b/ios/vendored/unversioned/react-native-gesture-handler/ios/RNGestureHandlerRootViewComponentView.mm @@ -1,6 +1,6 @@ #ifdef RN_FABRIC_ENABLED -#import "RCTFabricComponentsPlugins.h" +#import Class RNGestureHandlerRootViewCls(void) { diff --git a/package.json b/package.json index 265c8da0fec08..b8ce7fec86b50 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ ] }, "resolutions": { - "react-native": "0.70.1", + "react-native": "0.70.2", "**/util": "~0.12.4" }, "dependencies": { diff --git a/packages/babel-preset-expo/package.json b/packages/babel-preset-expo/package.json index 20bd849f2d6cb..8f2d489763445 100644 --- a/packages/babel-preset-expo/package.json +++ b/packages/babel-preset-expo/package.json @@ -50,7 +50,7 @@ "@babel/preset-env": "^7.12.9", "babel-plugin-module-resolver": "^4.1.0", "babel-plugin-react-native-web": "~0.18.2", - "metro-react-native-babel-preset": "~0.72.1" + "metro-react-native-babel-preset": "0.72.3" }, "devDependencies": { "@babel/core": "^7.12.9", diff --git a/packages/expo-av/CHANGELOG.md b/packages/expo-av/CHANGELOG.md index 2fea019fff112..a4a7f9eb6b597 100644 --- a/packages/expo-av/CHANGELOG.md +++ b/packages/expo-av/CHANGELOG.md @@ -22,6 +22,10 @@ - Drop `@expo/config-plugins` dependency in favor of peer dependency on `expo`. ([#18595](https://github.com/expo/expo/pull/18595) by [@EvanBacon](https://github.com/EvanBacon)) - Remove unnecessary CocoaPods dependency on `ReactCommon` and `React-runtimeexecutor`. ([#19067](https://github.com/expo/expo/pull/19067) by [@tsapeta](https://github.com/tsapeta)) +### 📚 3rd party library updates + +- Upgraded ExoPlayer dependencies to 2.18.1 on Android. ([#19332](https://github.com/expo/expo/pull/19332) by [@kudo](https://github.com/kudo)) + ## 12.0.2 — 2022-07-18 ### 🐛 Bug fixes diff --git a/packages/expo-av/android/build.gradle b/packages/expo-av/android/build.gradle index b78d285aa0183..359df90643773 100644 --- a/packages/expo-av/android/build.gradle +++ b/packages/expo-av/android/build.gradle @@ -151,8 +151,8 @@ dependencies { extractHeaders 'com.facebook.fbjni:fbjni:0.2.2:headers' extractJNI 'com.facebook.fbjni:fbjni:0.2.2' - api 'com.google.android.exoplayer:exoplayer:2.13.3' - api 'com.google.android.exoplayer:extension-okhttp:2.13.3' + api 'com.google.android.exoplayer:exoplayer:2.18.1' + api 'com.google.android.exoplayer:extension-okhttp:2.18.1' api "com.squareup.okhttp3:okhttp:3.14.9" api "com.squareup.okhttp3:okhttp-urlconnection:3.14.9" diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java index 8f1b9ed478f6e..672871d458693 100644 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/SimpleExoPlayerData.java @@ -13,16 +13,16 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.LoadEventInfo; import com.google.android.exoplayer2.source.MediaLoadData; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSourceEventListener; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.source.dash.DashMediaSource; import com.google.android.exoplayer2.source.dash.DefaultDashChunkSource; import com.google.android.exoplayer2.source.hls.HlsMediaSource; @@ -37,7 +37,7 @@ import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.RawResourceDataSource; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.VideoListener; +import com.google.android.exoplayer2.video.VideoSize; import java.io.IOException; import java.util.Map; @@ -47,7 +47,7 @@ import expo.modules.av.player.datasource.DataSourceFactoryProvider; class SimpleExoPlayerData extends PlayerData - implements Player.EventListener, MediaSourceEventListener, VideoListener { + implements Player.Listener, MediaSourceEventListener { private static final String IMPLEMENTATION_NAME = "SimpleExoPlayer"; private static final String TAG = SimpleExoPlayerData.class.getSimpleName(); @@ -92,7 +92,6 @@ public void load(final Bundle status, final LoadCompletionListener loadCompletio .build(); mSimpleExoPlayer.addListener(this); - mSimpleExoPlayer.addVideoListener(this); // Produces DataSource instances through which media data is loaded. final DataSource.Factory dataSourceFactory = mAVModule.getModuleRegistry() @@ -263,7 +262,7 @@ public void updateVolumeMuteAndDuck() { // endregion - // region ExoPlayer.EventListener + // region Player.Listener @Override public void onLoadingChanged(final boolean isLoading) { @@ -275,11 +274,6 @@ public void onLoadingChanged(final boolean isLoading) { public void onPlaybackParametersChanged(PlaybackParameters parameters) { } - @Override - public void onSeekProcessed() { - - } - @Override public void onRepeatModeChanged(int repeatMode) { } @@ -312,7 +306,7 @@ public void onPlayerStateChanged(final boolean playWhenReady, final int playback } @Override - public void onPlayerError(final ExoPlaybackException error) { + public void onPlayerError(PlaybackException error) { onFatalError(error.getCause()); } @@ -325,11 +319,27 @@ public void onPositionDiscontinuity(int reason) { // Source: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Timeline.Period.html // So I guess it's safe to say that when a period transition happens, // media file transition happens, so we just finished playing one. - if (reason == Player.DISCONTINUITY_REASON_PERIOD_TRANSITION) { + if (reason == Player.DISCONTINUITY_REASON_AUTO_TRANSITION) { callStatusUpdateListenerWithDidJustFinish(); } } + @Override + public void onVideoSizeChanged(VideoSize videoSize) { + mVideoWidthHeight = new Pair<>(videoSize.width, videoSize.height); + if (mFirstFrameRendered && mVideoSizeUpdateListener != null) { + mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); + } + } + + @Override + public void onRenderedFirstFrame() { + if (!mFirstFrameRendered && mVideoWidthHeight != null && mVideoSizeUpdateListener != null) { + mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); + } + mFirstFrameRendered = true; + } + // endregion // region MediaSourceEventListener @@ -363,27 +373,6 @@ private void onFatalError(final Throwable error) { // endregion - // region VideoListener - - @Override - public void onVideoSizeChanged(final int width, final int height, final int unAppliedRotationDegrees, final float pixelWidthHeightRatio) { - // TODO other params? - mVideoWidthHeight = new Pair<>(width, height); - if (mFirstFrameRendered && mVideoSizeUpdateListener != null) { - mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); - } - } - - @Override - public void onRenderedFirstFrame() { - if (!mFirstFrameRendered && mVideoWidthHeight != null && mVideoSizeUpdateListener != null) { - mVideoSizeUpdateListener.onVideoSizeUpdate(mVideoWidthHeight); - } - mFirstFrameRendered = true; - } - - // endregion - private MediaSource buildMediaSource(@NonNull Uri uri, String overrideExtension, DataSource.Factory factory) { try { if (uri.getScheme() == null) { @@ -405,7 +394,7 @@ private MediaSource buildMediaSource(@NonNull Uri uri, String overrideExtension, case C.TYPE_HLS: return new HlsMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); case C.TYPE_OTHER: - return new ExtractorMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); + return new ProgressiveMediaSource.Factory(factory).createMediaSource(MediaItem.fromUri(uri)); default: { throw new IllegalStateException("Content of this type is unsupported at the moment. Unsupported type: " + type); } diff --git a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java deleted file mode 100644 index d127b7fd543d2..0000000000000 --- a/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -package expo.modules.av.player.datasource; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource; -import com.google.android.exoplayer2.upstream.DataSource; -import com.google.android.exoplayer2.upstream.HttpDataSource; -import com.google.android.exoplayer2.upstream.TransferListener; - -import java.util.Map; - -import okhttp3.CacheControl; -import okhttp3.Call; - -// Mainly a copy of com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory, -// because it's declared as final :( -public class CustomHeadersOkHttpDataSourceFactory extends HttpDataSource.BaseFactory { - @NonNull - private final Call.Factory mCallFactory; - @Nullable - private final String mUserAgent; - @Nullable - private final CacheControl mCacheControl; - - public CustomHeadersOkHttpDataSourceFactory(@NonNull Call.Factory callFactory, @Nullable String userAgent, @Nullable Map requestHeaders) { - super(); - mCallFactory = callFactory; - mUserAgent = userAgent; - mCacheControl = null; - updateRequestProperties(getDefaultRequestProperties(), requestHeaders); - } - - protected void updateRequestProperties(HttpDataSource.RequestProperties requestProperties, @Nullable Map requestHeaders) { - if (requestHeaders != null) { - for (Map.Entry headerEntry : requestHeaders.entrySet()) { - if (headerEntry.getValue() instanceof String) { - requestProperties.set(headerEntry.getKey(), (String) headerEntry.getValue()); - } - } - } - } - - protected OkHttpDataSource createDataSourceInternal(HttpDataSource.RequestProperties defaultRequestProperties) { - return new OkHttpDataSource(mCallFactory, mUserAgent, mCacheControl, defaultRequestProperties); - } -} diff --git a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt similarity index 76% rename from android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt rename to packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt index d1481b565a191..f6045994473f3 100644 --- a/android/versioned-abis/expoview-abi46_0_0/src/main/java/abi46_0_0/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt +++ b/packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.kt @@ -1,5 +1,6 @@ -package abi46_0_0.host.exp.exponent.modules.universal.av +package expo.modules.av.player.datasource +import androidx.collection.ArrayMap import com.google.android.exoplayer2.upstream.HttpDataSource.BaseFactory import com.google.android.exoplayer2.upstream.HttpDataSource.RequestProperties import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource @@ -15,16 +16,15 @@ class CustomHeadersOkHttpDataSourceFactory( ) : BaseFactory() { private val cacheControl: CacheControl? = null - private fun updateRequestProperties( - requestProperties: RequestProperties, - requestHeaders: Map? - ) { + private fun updateRequestProperties(requestHeaders: Map?) { if (requestHeaders != null) { + val requestProperties = ArrayMap() for ((key, value) in requestHeaders) { if (value is String) { requestProperties[key] = value } } + setDefaultRequestProperties(requestProperties) } } @@ -33,6 +33,6 @@ class CustomHeadersOkHttpDataSourceFactory( } init { - updateRequestProperties(defaultRequestProperties, requestHeaders) + updateRequestProperties(requestHeaders) } } diff --git a/packages/expo-dev-launcher/package.json b/packages/expo-dev-launcher/package.json index 8ed062c1d822b..974d4e916963b 100644 --- a/packages/expo-dev-launcher/package.json +++ b/packages/expo-dev-launcher/package.json @@ -49,7 +49,7 @@ "graphql": "^16.0.1", "graphql-request": "^3.6.1", "react": "18.1.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "react-query": "^3.34.16", "url": "^0.11.0" }, diff --git a/packages/expo-dev-menu/package.json b/packages/expo-dev-menu/package.json index 9eb0f93070e84..11b2c534f8eb0 100644 --- a/packages/expo-dev-menu/package.json +++ b/packages/expo-dev-menu/package.json @@ -65,7 +65,7 @@ "graphql": "^15.3.0", "graphql-tag": "^2.10.1", "react": "18.1.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "use-subscription": "^1.8.0", "url": "^0.11.0" }, diff --git a/packages/expo-gl/CHANGELOG.md b/packages/expo-gl/CHANGELOG.md index f012e0ec31c20..c9a17aaa7885a 100644 --- a/packages/expo-gl/CHANGELOG.md +++ b/packages/expo-gl/CHANGELOG.md @@ -10,6 +10,8 @@ ### 🐛 Bug fixes +- Use shared C++ runtime to reduce library size on Android. ([#19372](https://github.com/expo/expo/pull/19372) by [@kudo](https://github.com/kudo)) + ### 💡 Others - Merge `GLViewProps` and `BaseGLViewProps` into one type - `GLViewProps`. ([#18322](https://github.com/expo/expo/pull/18322) by [@Simek](https://github.com/Simek)) diff --git a/packages/expo-gl/android/CMakeLists.txt b/packages/expo-gl/android/CMakeLists.txt index 593c6a76c8a74..65f4f9c1d6ac9 100644 --- a/packages/expo-gl/android/CMakeLists.txt +++ b/packages/expo-gl/android/CMakeLists.txt @@ -1,7 +1,6 @@ cmake_minimum_required(VERSION 3.4.1) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_ANDROID_STL_TYPE c++_shared) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_CXX_STANDARD 17) diff --git a/packages/expo-gl/android/build.gradle b/packages/expo-gl/android/build.gradle index 173aec6943459..563c913e143a6 100644 --- a/packages/expo-gl/android/build.gradle +++ b/packages/expo-gl/android/build.gradle @@ -92,7 +92,9 @@ android { externalNativeBuild { cmake { abiFilters (*reactNativeArchitectures()) - arguments "-DREACT_NATIVE_DIR=${REACT_NATIVE_DIR}", "-DRN_SO_DIR=${RN_SO_DIR}" + arguments "-DANDROID_STL=c++_shared", + "-DREACT_NATIVE_DIR=${REACT_NATIVE_DIR}", + "-DRN_SO_DIR=${RN_SO_DIR}" } } } diff --git a/packages/expo-modules-core/CHANGELOG.md b/packages/expo-modules-core/CHANGELOG.md index 1639076d08e89..37acc476a2cfb 100644 --- a/packages/expo-modules-core/CHANGELOG.md +++ b/packages/expo-modules-core/CHANGELOG.md @@ -44,6 +44,9 @@ - Update gradle excludes to fix detox tests. ([#19254](https://github.com/expo/expo/pull/19254) by [@esamelson](https://github.com/esamelson)) - Fixed event listeners do not work when running with remote debugging mode on iOS. ([#19211](https://github.com/expo/expo/pull/19211) by [@kudo](https://github.com/kudo)) - Give precedence to `UIBackgroundFetchResult.newData` over `.failed` in proxied `ExpoAppDelegate.swift` completion handlers. ([#19311](https://github.com/expo/expo/pull/19311) by [@ferologics](https://github.com/ferologics)) +- Ensure that AppDelegate callbacks are invoked. ([#19393](https://github.com/expo/expo/pull/19393) by [@ferologics](https://github.com/ferologics)) +- Fixed Android crash when Activity is destroyed before `AppContext.onHostDestroy` call. ([#19406](https://github.com/expo/expo/pull/19406) by [@kudo](https://github.com/kudo)) +- Use shared C++ runtime to reduce library size on Android. ([#19372](https://github.com/expo/expo/pull/19372) by [@kudo](https://github.com/kudo)) ### 💡 Others diff --git a/packages/expo-modules-core/android/CMakeLists.txt b/packages/expo-modules-core/android/CMakeLists.txt index 66e566b6bd27f..8e6cafd5d5db7 100644 --- a/packages/expo-modules-core/android/CMakeLists.txt +++ b/packages/expo-modules-core/android/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.4.1) project(expo-modules-core) set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_ANDROID_STL_TYPE c++_shared) set(CMAKE_CXX_STANDARD 17) set(PACKAGE_NAME "expo-modules-core") set(BUILD_DIR ${CMAKE_SOURCE_DIR}/build) diff --git a/packages/expo-modules-core/android/build.gradle b/packages/expo-modules-core/android/build.gradle index f076c68bee68f..7806805927c7b 100644 --- a/packages/expo-modules-core/android/build.gradle +++ b/packages/expo-modules-core/android/build.gradle @@ -182,7 +182,8 @@ android { externalNativeBuild { cmake { abiFilters (*reactNativeArchitectures()) - arguments "-DREACT_NATIVE_DIR=${REACT_NATIVE_DIR}", + arguments "-DANDROID_STL=c++_shared", + "-DREACT_NATIVE_DIR=${REACT_NATIVE_DIR}", "-DREACT_NATIVE_SO_DIR=${REACT_NATIVE_SO_DIR}", "-DREACT_NATIVE_TARGET_VERSION=${REACT_NATIVE_TARGET_VERSION}", "-DBOOST_VERSION=${BOOST_VERSION}", diff --git a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/AppContext.kt b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/AppContext.kt index b6237e13350d7..aaf13b0f3f826 100644 --- a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/AppContext.kt +++ b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/AppContext.kt @@ -253,11 +253,9 @@ class AppContext( } internal fun onHostDestroy() { - activityResultsManager.onHostDestroy( - requireNotNull(currentActivity) { - "Current Activity is not available at this moment. This is an invalid state and this should never happen" - } - ) + currentActivity?.let { + activityResultsManager.onHostDestroy(it) + } registry.post(EventName.ACTIVITY_DESTROYS) } diff --git a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt index 7b09150a804ad..81ef695e42779 100644 --- a/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt +++ b/packages/expo-modules-core/android/src/main/java/expo/modules/kotlin/jni/ExpectedType.kt @@ -16,16 +16,19 @@ class SingleType( /** * The representation of the type. */ + @DoNotStrip fun getCppType() = expectedCppType.value /** * A convenient property to return the type of the first parameter. */ + @DoNotStrip fun getFirstParameterType() = parameterTypes?.get(0) /** * A convenient property to return the type of the second parameter. */ + @DoNotStrip fun getSecondParameterType() = parameterTypes?.get(1) } @@ -46,15 +49,16 @@ class ExpectedType( val innerCombinedTypes: Int = innerPossibleTypes.fold(0) { acc, current -> acc or current.getCppType() } // Needed by JNI + @DoNotStrip fun getCombinedTypes() = innerCombinedTypes // Needed by JNI + @DoNotStrip fun getPossibleTypes() = innerPossibleTypes - /** - * A convenient property to return the first of possible types. - */ - val firstType = innerPossibleTypes.first() + // Needed by JNI + @DoNotStrip + fun getFirstType() = innerPossibleTypes.first() operator fun plus(other: ExpectedType): ExpectedType { return ExpectedType( diff --git a/packages/expo-modules-core/ios/AppDelegates/EXLegacyAppDelegateWrapper.m b/packages/expo-modules-core/ios/AppDelegates/EXLegacyAppDelegateWrapper.m index 61b19ec6a07eb..18b8ef9a9a3ca 100644 --- a/packages/expo-modules-core/ios/AppDelegates/EXLegacyAppDelegateWrapper.m +++ b/packages/expo-modules-core/ios/AppDelegates/EXLegacyAppDelegateWrapper.m @@ -90,9 +90,13 @@ - (void)application:(UIApplication *)application performFetchWithCompletionHandl } } }; - - for (id subcontractor in subcontractorsArray) { - [subcontractor application:application performFetchWithCompletionHandler:handler]; + + if (subcontractorsLeft == 0) { + completionHandler(fetchResult); + } else { + for (id subcontractor in subcontractorsArray) { + [subcontractor application:application performFetchWithCompletionHandler:handler]; + } } } @@ -201,9 +205,13 @@ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(N } } }; - - for (id subcontractor in subcontractorsArray) { - [subcontractor application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler]; + + if (subcontractorsLeft == 0) { + completionHandler(fetchResult); + } else { + for (id subcontractor in subcontractorsArray) { + [subcontractor application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler]; + } } } diff --git a/packages/expo-modules-core/ios/AppDelegates/ExpoAppDelegate.swift b/packages/expo-modules-core/ios/AppDelegates/ExpoAppDelegate.swift index 4972e992972e2..77c69b2d3b716 100644 --- a/packages/expo-modules-core/ios/AppDelegates/ExpoAppDelegate.swift +++ b/packages/expo-modules-core/ios/AppDelegates/ExpoAppDelegate.swift @@ -92,8 +92,12 @@ open class ExpoAppDelegate: UIResponder, UIApplicationDelegate { } } - subs.forEach { - $0.application?(application, handleEventsForBackgroundURLSession: identifier, completionHandler: handler) + if subs.isEmpty { + completionHandler() + } else { + subs.forEach { + $0.application?(application, handleEventsForBackgroundURLSession: identifier, completionHandler: handler) + } } } @@ -141,8 +145,12 @@ open class ExpoAppDelegate: UIResponder, UIApplicationDelegate { } } - subs.forEach { subscriber in - subscriber.application?(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: handler) + if subs.isEmpty { + completionHandler(.noData) + } else { + subs.forEach { subscriber in + subscriber.application?(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: handler) + } } } @@ -212,8 +220,12 @@ open class ExpoAppDelegate: UIResponder, UIApplicationDelegate { } } - subs.forEach { subscriber in - subscriber.application?(application, performActionFor: shortcutItem, completionHandler: handler) + if subs.isEmpty { + completionHandler(result) + } else { + subs.forEach { subscriber in + subscriber.application?(application, performActionFor: shortcutItem, completionHandler: handler) + } } } @@ -249,8 +261,12 @@ open class ExpoAppDelegate: UIResponder, UIApplicationDelegate { } } - subs.forEach { subscriber in - subscriber.application?(application, performFetchWithCompletionHandler: handler) + if subs.isEmpty { + completionHandler(.noData) + } else { + subs.forEach { subscriber in + subscriber.application?(application, performFetchWithCompletionHandler: handler) + } } } diff --git a/packages/expo-stories/package.json b/packages/expo-stories/package.json index 0516f6ec35a3a..7796b72d5a03b 100644 --- a/packages/expo-stories/package.json +++ b/packages/expo-stories/package.json @@ -30,7 +30,7 @@ "esbuild": "^0.12.15", "fs-extra": "^9.1.0", "glob": "^7.1.7", - "react-native-gesture-handler": "~2.5.0", + "react-native-gesture-handler": "~2.7.0", "react-native-safe-area-context": "4.3.1", "react-native-screens": "~3.15.0", "react-native-svg": "12.3.0", diff --git a/packages/expo/build/Expo.fx.js b/packages/expo/build/Expo.fx.js index 474e635994c06..af7d73b71ff3a 100644 --- a/packages/expo/build/Expo.fx.js +++ b/packages/expo/build/Expo.fx.js @@ -18,18 +18,7 @@ const isManagedEnvironment = Constants.executionEnvironment === ExecutionEnviron Constants.executionEnvironment === ExecutionEnvironment.StoreClient; // If expo-font is installed and the style preprocessor is available, use it to parse fonts. if (StyleSheet.setStyleAttributePreprocessor) { - if (__DEV__) { - // Temporarily disable console.warn() in dev mode, - // because the experimented `StyleSheet.setStyleAttributePreprocessor` will show a warning about - // `Overwriting fontFamily style attribute preprocessor`. - const originalConsoleWarn = global.console.warn; - global.console.warn = () => { }; - StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily); - global.console.warn = originalConsoleWarn; - } - else { - StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily); - } + StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily); } // Asserts if bare workflow isn't setup correctly. if (NativeModulesProxy.ExpoUpdates?.isMissingRuntimeVersion) { diff --git a/packages/expo/build/Expo.fx.js.map b/packages/expo/build/Expo.fx.js.map index 3fc37dfe21123..030ee27ea4c3c 100644 --- a/packages/expo/build/Expo.fx.js.map +++ b/packages/expo/build/Expo.fx.js.map @@ -1 +1 @@ -{"version":3,"file":"Expo.fx.js","sourceRoot":"","sources":["../src/Expo.fx.tsx"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,wEAAwE;AACxE,OAAO,0BAA0B,CAAC;AAClC,mFAAmF;AACnF,OAAO,YAAY,CAAC;AAEpB,OAAO,SAAS,EAAE,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,EAAE,EAAE,WAAW,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtE,sGAAsG;AACtG,gGAAgG;AAChG,6EAA6E;AAC7E,MAAM,oBAAoB,GACxB,SAAS,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,UAAU;IAClE,SAAS,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,WAAW,CAAC;AAEtE,4FAA4F;AAC5F,IAAI,UAAU,CAAC,6BAA6B,EAAE;IAC5C,IAAI,OAAO,EAAE;QACX,kDAAkD;QAClD,gGAAgG;QAChG,yDAAyD;QACzD,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QAC/B,UAAU,CAAC,6BAA6B,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/E,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;KAC3C;SAAM;QACL,UAAU,CAAC,6BAA6B,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAChF;CACF;AAED,kDAAkD;AAClD,IAAI,kBAAkB,CAAC,WAAW,EAAE,uBAAuB,EAAE;IAC3D,MAAM,OAAO,GACX,+EAA+E;QAC/E,0DAA0D;QAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QACtE,yCAAyC,CAAC;IAC5C,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;KAC1B;CACF;AAED,IAAI,SAAS,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,WAAW,EAAE;IACvE,wFAAwF;IACxF,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IACpD,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;CAChE;AAED,0EAA0E;AAC1E,IAAI,OAAO,EAAE;IACX,2EAA2E;IAC3E,IAAI,oBAAoB,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE;QACjD,qDAAqD;QACrD,aAAa;QACb,WAAW,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAE/D,aAAa;QACb,MAAM,mCAAmC,GAAG,WAAW,CAAC,2BAA2B,CAAC;QAEpF,aAAa;QACb,WAAW,CAAC,2BAA2B,GAAG,CAAC,QAAQ,EAAE,EAAE;YACrD,SAAS,wBAAwB,CAAC,KAAU;gBAC1C,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC;gBAErC,OAAO,CACL,oBAAC,eAAe;oBACd,oBAAC,iBAAiB,OAAK,KAAK,GAAI,CAChB,CACnB,CAAC;YACJ,CAAC;YAED,mCAAmC,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;QACtE,CAAC,CAAC;KACH;IAED,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpF,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE;QAClD,GAAG;YACD,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;CACJ","sourcesContent":["import './environment/validate.fx';\n// load remote logging for compatibility with custom development clients\nimport './environment/logging.fx';\n// load expo-asset immediately to set a custom `source` transformer in React Native\nimport 'expo-asset';\n\nimport Constants, { ExecutionEnvironment } from 'expo-constants';\nimport * as Font from 'expo-font';\nimport { NativeModulesProxy, Platform } from 'expo-modules-core';\nimport React from 'react';\nimport ReactNative, { AppRegistry, ErrorUtils, StyleSheet } from 'react-native';\n\nimport DevAppContainer from './environment/DevAppContainer';\nimport { createErrorHandler } from './errors/ExpoErrorManager';\nimport { createProxyForNativeModules } from './proxies/NativeModules';\n\n// Represents an app running in the store client or an app built with the legacy `expo build` command.\n// `false` when running in bare workflow, custom dev clients, or `eas build`s (managed or bare).\n// This should be used to ensure code that _should_ exist is treated as such.\nconst isManagedEnvironment =\n Constants.executionEnvironment === ExecutionEnvironment.Standalone ||\n Constants.executionEnvironment === ExecutionEnvironment.StoreClient;\n\n// If expo-font is installed and the style preprocessor is available, use it to parse fonts.\nif (StyleSheet.setStyleAttributePreprocessor) {\n if (__DEV__) {\n // Temporarily disable console.warn() in dev mode,\n // because the experimented `StyleSheet.setStyleAttributePreprocessor` will show a warning about\n // `Overwriting fontFamily style attribute preprocessor`.\n const originalConsoleWarn = global.console.warn;\n global.console.warn = () => {};\n StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily);\n global.console.warn = originalConsoleWarn;\n } else {\n StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily);\n }\n}\n\n// Asserts if bare workflow isn't setup correctly.\nif (NativeModulesProxy.ExpoUpdates?.isMissingRuntimeVersion) {\n const message =\n 'expo-updates is installed but there is no runtime or SDK version configured. ' +\n \"You'll need to configure one of these two properties in \" +\n Platform.select({ ios: 'Expo.plist', android: 'AndroidManifest.xml' }) +\n ' before OTA updates will work properly.';\n if (__DEV__) {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n}\n\nif (Constants.executionEnvironment === ExecutionEnvironment.StoreClient) {\n // set up some improvements to commonly logged error messages stemming from react-native\n const globalHandler = ErrorUtils.getGlobalHandler();\n ErrorUtils.setGlobalHandler(createErrorHandler(globalHandler));\n}\n\n// Having two if statements will enable terser to remove the entire block.\nif (__DEV__) {\n // Only enable the fast refresh indicator for managed iOS apps in dev mode.\n if (isManagedEnvironment && Platform.OS === 'ios') {\n // add the dev app container wrapper component on ios\n // @ts-ignore\n AppRegistry.setWrapperComponentProvider(() => DevAppContainer);\n\n // @ts-ignore\n const originalSetWrapperComponentProvider = AppRegistry.setWrapperComponentProvider;\n\n // @ts-ignore\n AppRegistry.setWrapperComponentProvider = (provider) => {\n function PatchedProviderComponent(props: any) {\n const ProviderComponent = provider();\n\n return (\n \n \n \n );\n }\n\n originalSetWrapperComponentProvider(() => PatchedProviderComponent);\n };\n }\n\n const proxiedNativeModules = createProxyForNativeModules(ReactNative.NativeModules);\n Object.defineProperty(ReactNative, 'NativeModules', {\n get() {\n return proxiedNativeModules;\n },\n configurable: true,\n enumerable: true,\n });\n}\n"]} \ No newline at end of file +{"version":3,"file":"Expo.fx.js","sourceRoot":"","sources":["../src/Expo.fx.tsx"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,wEAAwE;AACxE,OAAO,0BAA0B,CAAC;AAClC,mFAAmF;AACnF,OAAO,YAAY,CAAC;AAEpB,OAAO,SAAS,EAAE,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,EAAE,EAAE,WAAW,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtE,sGAAsG;AACtG,gGAAgG;AAChG,6EAA6E;AAC7E,MAAM,oBAAoB,GACxB,SAAS,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,UAAU;IAClE,SAAS,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,WAAW,CAAC;AAEtE,4FAA4F;AAC5F,IAAI,UAAU,CAAC,6BAA6B,EAAE;IAC5C,UAAU,CAAC,6BAA6B,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;CAChF;AAED,kDAAkD;AAClD,IAAI,kBAAkB,CAAC,WAAW,EAAE,uBAAuB,EAAE;IAC3D,MAAM,OAAO,GACX,+EAA+E;QAC/E,0DAA0D;QAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QACtE,yCAAyC,CAAC;IAC5C,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;KAC1B;CACF;AAED,IAAI,SAAS,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,WAAW,EAAE;IACvE,wFAAwF;IACxF,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IACpD,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;CAChE;AAED,0EAA0E;AAC1E,IAAI,OAAO,EAAE;IACX,2EAA2E;IAC3E,IAAI,oBAAoB,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE;QACjD,qDAAqD;QACrD,aAAa;QACb,WAAW,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAE/D,aAAa;QACb,MAAM,mCAAmC,GAAG,WAAW,CAAC,2BAA2B,CAAC;QAEpF,aAAa;QACb,WAAW,CAAC,2BAA2B,GAAG,CAAC,QAAQ,EAAE,EAAE;YACrD,SAAS,wBAAwB,CAAC,KAAU;gBAC1C,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC;gBAErC,OAAO,CACL,oBAAC,eAAe;oBACd,oBAAC,iBAAiB,OAAK,KAAK,GAAI,CAChB,CACnB,CAAC;YACJ,CAAC;YAED,mCAAmC,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;QACtE,CAAC,CAAC;KACH;IAED,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpF,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE;QAClD,GAAG;YACD,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QACD,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;CACJ","sourcesContent":["import './environment/validate.fx';\n// load remote logging for compatibility with custom development clients\nimport './environment/logging.fx';\n// load expo-asset immediately to set a custom `source` transformer in React Native\nimport 'expo-asset';\n\nimport Constants, { ExecutionEnvironment } from 'expo-constants';\nimport * as Font from 'expo-font';\nimport { NativeModulesProxy, Platform } from 'expo-modules-core';\nimport React from 'react';\nimport ReactNative, { AppRegistry, ErrorUtils, StyleSheet } from 'react-native';\n\nimport DevAppContainer from './environment/DevAppContainer';\nimport { createErrorHandler } from './errors/ExpoErrorManager';\nimport { createProxyForNativeModules } from './proxies/NativeModules';\n\n// Represents an app running in the store client or an app built with the legacy `expo build` command.\n// `false` when running in bare workflow, custom dev clients, or `eas build`s (managed or bare).\n// This should be used to ensure code that _should_ exist is treated as such.\nconst isManagedEnvironment =\n Constants.executionEnvironment === ExecutionEnvironment.Standalone ||\n Constants.executionEnvironment === ExecutionEnvironment.StoreClient;\n\n// If expo-font is installed and the style preprocessor is available, use it to parse fonts.\nif (StyleSheet.setStyleAttributePreprocessor) {\n StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily);\n}\n\n// Asserts if bare workflow isn't setup correctly.\nif (NativeModulesProxy.ExpoUpdates?.isMissingRuntimeVersion) {\n const message =\n 'expo-updates is installed but there is no runtime or SDK version configured. ' +\n \"You'll need to configure one of these two properties in \" +\n Platform.select({ ios: 'Expo.plist', android: 'AndroidManifest.xml' }) +\n ' before OTA updates will work properly.';\n if (__DEV__) {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n}\n\nif (Constants.executionEnvironment === ExecutionEnvironment.StoreClient) {\n // set up some improvements to commonly logged error messages stemming from react-native\n const globalHandler = ErrorUtils.getGlobalHandler();\n ErrorUtils.setGlobalHandler(createErrorHandler(globalHandler));\n}\n\n// Having two if statements will enable terser to remove the entire block.\nif (__DEV__) {\n // Only enable the fast refresh indicator for managed iOS apps in dev mode.\n if (isManagedEnvironment && Platform.OS === 'ios') {\n // add the dev app container wrapper component on ios\n // @ts-ignore\n AppRegistry.setWrapperComponentProvider(() => DevAppContainer);\n\n // @ts-ignore\n const originalSetWrapperComponentProvider = AppRegistry.setWrapperComponentProvider;\n\n // @ts-ignore\n AppRegistry.setWrapperComponentProvider = (provider) => {\n function PatchedProviderComponent(props: any) {\n const ProviderComponent = provider();\n\n return (\n \n \n \n );\n }\n\n originalSetWrapperComponentProvider(() => PatchedProviderComponent);\n };\n }\n\n const proxiedNativeModules = createProxyForNativeModules(ReactNative.NativeModules);\n Object.defineProperty(ReactNative, 'NativeModules', {\n get() {\n return proxiedNativeModules;\n },\n configurable: true,\n enumerable: true,\n });\n}\n"]} \ No newline at end of file diff --git a/packages/expo/bundledNativeModules.json b/packages/expo/bundledNativeModules.json index ff71824f9bf2f..961f630c4163d 100644 --- a/packages/expo/bundledNativeModules.json +++ b/packages/expo/bundledNativeModules.json @@ -87,10 +87,10 @@ "lottie-react-native": "5.1.3", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "react-native-web": "~0.18.9", "react-native-branch": "^5.4.0", - "react-native-gesture-handler": "~2.5.0", + "react-native-gesture-handler": "~2.7.0", "react-native-get-random-values": "~1.8.0", "react-native-maps": "0.31.1", "react-native-pager-view": "5.4.24", diff --git a/packages/expo/package.json b/packages/expo/package.json index c5932378ee93e..0ffeb1da175b9 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -91,6 +91,6 @@ "expo-module-scripts": "^2.1.0", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1" + "react-native": "0.70.2" } } diff --git a/packages/expo/src/Expo.fx.tsx b/packages/expo/src/Expo.fx.tsx index 2cfce1c9da588..73b0c32abc6c9 100644 --- a/packages/expo/src/Expo.fx.tsx +++ b/packages/expo/src/Expo.fx.tsx @@ -23,17 +23,7 @@ const isManagedEnvironment = // If expo-font is installed and the style preprocessor is available, use it to parse fonts. if (StyleSheet.setStyleAttributePreprocessor) { - if (__DEV__) { - // Temporarily disable console.warn() in dev mode, - // because the experimented `StyleSheet.setStyleAttributePreprocessor` will show a warning about - // `Overwriting fontFamily style attribute preprocessor`. - const originalConsoleWarn = global.console.warn; - global.console.warn = () => {}; - StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily); - global.console.warn = originalConsoleWarn; - } else { - StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily); - } + StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily); } // Asserts if bare workflow isn't setup correctly. diff --git a/react-native-lab/react-native b/react-native-lab/react-native index ab29e8327a43c..813e4ac5956ca 160000 --- a/react-native-lab/react-native +++ b/react-native-lab/react-native @@ -1 +1 @@ -Subproject commit ab29e8327a43c19b88b223e9299168d45b0ac44c +Subproject commit 813e4ac5956ca5d383c5e11c769cd2ab14024cca diff --git a/templates/expo-template-bare-minimum/package.json b/templates/expo-template-bare-minimum/package.json index 8671eee778958..0eb923492b1ec 100644 --- a/templates/expo-template-bare-minimum/package.json +++ b/templates/expo-template-bare-minimum/package.json @@ -13,7 +13,7 @@ "expo-splash-screen": "~0.16.1", "expo-status-bar": "~1.4.0", "react": "18.1.0", - "react-native": "0.70.1" + "react-native": "0.70.2" }, "devDependencies": { "@babel/core": "^7.12.9" diff --git a/templates/expo-template-blank-typescript/package.json b/templates/expo-template-blank-typescript/package.json index d88743c4955b7..db53a9e55783a 100644 --- a/templates/expo-template-blank-typescript/package.json +++ b/templates/expo-template-blank-typescript/package.json @@ -14,7 +14,7 @@ "expo-status-bar": "~1.4.0", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "react-native-web": "~0.18.9" }, "devDependencies": { diff --git a/templates/expo-template-blank/package.json b/templates/expo-template-blank/package.json index c2341d0570624..42907daa44d11 100644 --- a/templates/expo-template-blank/package.json +++ b/templates/expo-template-blank/package.json @@ -13,7 +13,7 @@ "expo": "~46.0.1", "expo-status-bar": "~1.4.0", "react": "18.1.0", - "react-native": "0.70.1" + "react-native": "0.70.2" }, "devDependencies": { "@babel/core": "^7.12.9" diff --git a/templates/expo-template-tabs/package.json b/templates/expo-template-tabs/package.json index 9d2b5379c6991..8d1784d065c1c 100644 --- a/templates/expo-template-tabs/package.json +++ b/templates/expo-template-tabs/package.json @@ -29,7 +29,7 @@ "expo-web-browser": "~11.0.0", "react": "18.1.0", "react-dom": "18.0.0", - "react-native": "0.70.1", + "react-native": "0.70.2", "react-native-safe-area-context": "4.3.1", "react-native-screens": "~3.15.0", "react-native-web": "~0.18.9" diff --git a/tools/src/vendoring/config/expoGoConfig.ts b/tools/src/vendoring/config/expoGoConfig.ts index 7bc326f022f8b..ac06e4239e4e3 100644 --- a/tools/src/vendoring/config/expoGoConfig.ts +++ b/tools/src/vendoring/config/expoGoConfig.ts @@ -58,6 +58,7 @@ const config: VendoringTargetConfig = { source: 'https://github.com/software-mansion/react-native-gesture-handler.git', semverPrefix: '~', ios: {}, + android: {}, }, 'react-native-reanimated': { source: 'https://github.com/software-mansion/react-native-reanimated.git', diff --git a/yarn.lock b/yarn.lock index 8c9b27f496b05..fdd882d95dcc9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3169,13 +3169,13 @@ dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-9.1.1.tgz#1d5a92c325f27bc0691a57d569d5c6b7346e01e5" - integrity sha512-Sve8b3qmpvHEd0WbABoDXCgdN2OIgaTyBbM5rV+7ynAhn5ieWvS7IMwbBJ9xCoRerf5g8hJSycTyX2bfwCZpWw== +"@react-native-community/cli-doctor@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-9.1.2.tgz#b82e5b709e2829d0fd3bbdd8f9d531b2886a0afe" + integrity sha512-BmacbikyaxR4s54kq17LE0bBK7g8bcjc679ee36DqkX+Xij2VHHynLzTpuDJ8y6iHI2v13vauEMjnh4j612u5w== dependencies: "@react-native-community/cli-config" "^9.1.0" - "@react-native-community/cli-platform-ios" "^9.1.0" + "@react-native-community/cli-platform-ios" "^9.1.2" "@react-native-community/cli-tools" "^9.1.0" chalk "^4.1.2" command-exists "^1.2.8" @@ -3202,7 +3202,7 @@ hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-platform-android@^9.0.0", "@react-native-community/cli-platform-android@^9.1.0": +"@react-native-community/cli-platform-android@9.1.0", "@react-native-community/cli-platform-android@^9.1.0": version "9.1.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-9.1.0.tgz#3f80c202196c3874b86395b7f3f5fc13093d2d9e" integrity sha512-OZ/Krq0wH6T7LuAvwFdJYe47RrHG8IOcoab47H4QQdYGTmJgTS3SlVkr6gn79pZyBGyp7xVizD30QJrIIyDjnw== @@ -3215,10 +3215,10 @@ logkitty "^0.7.1" slash "^3.0.0" -"@react-native-community/cli-platform-ios@^9.0.0", "@react-native-community/cli-platform-ios@^9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.1.0.tgz#ddd780a9a2eadbaf2d251b3a737ea7e087aae6aa" - integrity sha512-NtZ9j+VXLj8pxsk/trxbS779uXp/ge4fSwDWNwOM9APRoTcClJ/Xp8cp1koXwfULSn152Czo0u5b291DG2WRfQ== +"@react-native-community/cli-platform-ios@9.1.2", "@react-native-community/cli-platform-ios@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.1.2.tgz#fd59b2aadee8d54317f204b3c640767dca5e6225" + integrity sha512-XpgA9ymm76yjvtYPByqFF1LP7eM/lH5K3zpkZkV9MJLStOIo3mrzN2ywRDZ/xVOheh5LafS4YMmrjIajf11oIQ== dependencies: "@react-native-community/cli-tools" "^9.1.0" chalk "^4.1.2" @@ -3226,20 +3226,20 @@ glob "^7.1.3" ora "^5.4.1" -"@react-native-community/cli-plugin-metro@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.1.1.tgz#b23cb36204706ea9e69bec929f69cb4957e75853" - integrity sha512-8CBwEZrbYIeQw69Exg/oW20pV9C6mbYlDz0pxZJ0AYmC20Q+wFFs6sUh5zm28ZUh1L0LxNGmhle/YvMPqA+fMQ== +"@react-native-community/cli-plugin-metro@^9.1.3": + version "9.1.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.1.3.tgz#3c701110dadded44cc2dcbd7067dcbf35a669779" + integrity sha512-eLZiGIMybNwkbfKRd8wfNP1u5pnsGYLD3YHlNQyRlfS7AMG7NCQN8bk2uWWJJmWAv632KFLConwJGcLhk6ZNMQ== dependencies: "@react-native-community/cli-server-api" "^9.1.0" "@react-native-community/cli-tools" "^9.1.0" chalk "^4.1.2" - metro "^0.72.1" - metro-config "^0.72.1" - metro-core "^0.72.1" - metro-react-native-babel-transformer "^0.72.1" - metro-resolver "^0.72.1" - metro-runtime "^0.72.1" + metro "0.72.3" + metro-config "0.72.3" + metro-core "0.72.3" + metro-react-native-babel-transformer "0.72.3" + metro-resolver "0.72.3" + metro-runtime "0.72.3" readline "^1.3.0" "@react-native-community/cli-server-api@^9.1.0": @@ -3279,17 +3279,17 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-9.1.1.tgz#999034df7708f05ac7773593d67b3f8c9bcb05bd" - integrity sha512-LjXcYahjFzM7TlsGzQLH9bCx3yvBsHEj/5Ytdnk0stdDET329JdXWEh6JiSRjVWPVAoDAV5pRAFmEOEGDNIiAw== +"@react-native-community/cli@9.1.3": + version "9.1.3" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-9.1.3.tgz#abe5e406214edb2ca828c51fbdaed7baf776298c" + integrity sha512-dfiBxNvqSwxkMduH0eAEJNS+LBbwxm1rOlTO7bN+FZvUwZNCCgIYrixfRo+ifqDUv8N5AbpQB5umnLbs0AjPaA== dependencies: "@react-native-community/cli-clean" "^9.1.0" "@react-native-community/cli-config" "^9.1.0" "@react-native-community/cli-debugger-ui" "^9.0.0" - "@react-native-community/cli-doctor" "^9.1.1" + "@react-native-community/cli-doctor" "^9.1.2" "@react-native-community/cli-hermes" "^9.1.0" - "@react-native-community/cli-plugin-metro" "^9.1.1" + "@react-native-community/cli-plugin-metro" "^9.1.3" "@react-native-community/cli-server-api" "^9.1.0" "@react-native-community/cli-tools" "^9.1.0" "@react-native-community/cli-types" "^9.1.0" @@ -14311,16 +14311,6 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -metro-babel-transformer@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.72.1.tgz#53129a496f7309cd434cfc9f8d978317e928cae1" - integrity sha512-VK7A9gepnhrKC0DMoxtPjYYHjkkfNwzLMYJgeL6Il6IaX/K/VHTILSEqgpxfNDos2jrXazuR5+rXDLE/RCzqmw== - dependencies: - "@babel/core" "^7.14.0" - hermes-parser "0.8.0" - metro-source-map "0.72.1" - nullthrows "^1.1.1" - metro-babel-transformer@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.72.3.tgz#2c60493a4eb7a8d20cc059f05e0e505dc1684d01" @@ -14344,7 +14334,7 @@ metro-cache@0.72.3: metro-core "0.72.3" rimraf "^2.5.4" -metro-config@0.72.3, metro-config@^0.72.1: +metro-config@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.72.3.tgz#c2f1a89537c79cec516b1229aa0550dfa769e2ee" integrity sha512-VEsAIVDkrIhgCByq8HKTWMBjJG6RlYwWSu1Gnv3PpHa0IyTjKJtB7wC02rbTjSaemcr82scldf2R+h6ygMEvsw== @@ -14356,7 +14346,7 @@ metro-config@0.72.3, metro-config@^0.72.1: metro-core "0.72.3" metro-runtime "0.72.3" -metro-core@0.72.3, metro-core@^0.72.1: +metro-core@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.72.3.tgz#e3a276d54ecc8fe667127347a1bfd3f8c0009ccb" integrity sha512-KuYWBMmLB4+LxSMcZ1dmWabVExNCjZe3KysgoECAIV+wyIc2r4xANq15GhS94xYvX1+RqZrxU1pa0jQ5OK+/6A== @@ -14406,52 +14396,7 @@ metro-minify-uglify@0.72.3: dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.1.tgz#6da276375f20312306c1545c47c439e445b9c628" - integrity sha512-DlvMw2tFrCqD9OXBoN11fPM09kHC22FZpnkTmG4Pr4kecV+aDmEGxwakjUcjELrX1JCXz2MLPvqeJkbiP1f5CA== - dependencies: - "@babel/core" "^7.14.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.0.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.2.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - react-refresh "^0.4.0" - -metro-react-native-babel-preset@0.72.3, metro-react-native-babel-preset@~0.72.1: +metro-react-native-babel-preset@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz#e549199fa310fef34364fdf19bd210afd0c89432" integrity sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw== @@ -14496,20 +14441,7 @@ metro-react-native-babel-preset@0.72.3, metro-react-native-babel-preset@~0.72.1: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.1.tgz#e2611c2c1afde1eaaa127d72fe92d94a2d8d9058" - integrity sha512-hMnN0MOgVloAk94YuXN7sLeDaZ51Y6xIcJXxIU1s/KaygAGXk6o7VAdwf2MY/IV1SIct5lkW4Gn71u/9/EvfXA== - dependencies: - "@babel/core" "^7.14.0" - babel-preset-fbjs "^3.4.0" - hermes-parser "0.8.0" - metro-babel-transformer "0.72.1" - metro-react-native-babel-preset "0.72.1" - metro-source-map "0.72.1" - nullthrows "^1.1.1" - -metro-react-native-babel-transformer@^0.72.1: +metro-react-native-babel-transformer@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.3.tgz#f8eda8c07c0082cbdbef47a3293edc41587c6b5a" integrity sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA== @@ -14522,22 +14454,14 @@ metro-react-native-babel-transformer@^0.72.1: metro-source-map "0.72.3" nullthrows "^1.1.1" -metro-resolver@0.72.3, metro-resolver@^0.72.1: +metro-resolver@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.72.3.tgz#c64ce160454ac850a15431509f54a587cb006540" integrity sha512-wu9zSMGdxpKmfECE7FtCdpfC+vrWGTdVr57lDA0piKhZV6VN6acZIvqQ1yZKtS2WfKsngncv5VbB8Y5eHRQP3w== dependencies: absolute-path "^0.0.0" -metro-runtime@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.72.1.tgz#155d7042b68215f688d56d5d0d709b0f15d5978c" - integrity sha512-CO+fvJKYHKuR2vo7kjsegQ2oF3FMwa4YhnUInQ+xPVxWoy8DbOpmruKBoTsQVgHwyIziXzvJa+mze/6CFvT+3A== - dependencies: - "@babel/runtime" "^7.0.0" - react-refresh "^0.4.0" - -metro-runtime@0.72.3, metro-runtime@^0.72.1: +metro-runtime@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.72.3.tgz#1485ed7b5f06d09ebb40c83efcf8accc8d30b8b9" integrity sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA== @@ -14545,20 +14469,6 @@ metro-runtime@0.72.3, metro-runtime@^0.72.1: "@babel/runtime" "^7.0.0" react-refresh "^0.4.0" -metro-source-map@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.72.1.tgz#2869058e3ef4cf9161b7b53dc6ba94980f26dd93" - integrity sha512-77TZuf10Ru+USo97HwDT8UceSzOGBZB8EYTObOsR0n1sjQHjvKsMflLA9Pco13o9NsIYAG6c6P/0vIpiHKqaKA== - dependencies: - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.0.0" - invariant "^2.2.4" - metro-symbolicate "0.72.1" - nullthrows "^1.1.1" - ob1 "0.72.1" - source-map "^0.5.6" - vlq "^1.0.0" - metro-source-map@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.72.3.tgz#5efcf354413804a62ff97864e797f60ef3cc689e" @@ -14573,18 +14483,6 @@ metro-source-map@0.72.3: source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.72.1.tgz#8ae41085e888a3bbe49c89904e7c482e1f6bda9b" - integrity sha512-ScC3dVd2XrfZSd6kubOw7EJNp2oHdjrqOjGpFohtcXGjhqkzDosp7Fg84VgwQGN8g720xvUyEBfSMmUCXcicOQ== - dependencies: - invariant "^2.2.4" - metro-source-map "0.72.1" - nullthrows "^1.1.1" - source-map "^0.5.6" - through2 "^2.0.1" - vlq "^1.0.0" - metro-symbolicate@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.72.3.tgz#093d4f8c7957bcad9ca2ab2047caa90b1ee1b0c1" @@ -14627,7 +14525,7 @@ metro-transform-worker@0.72.3: metro-transform-plugins "0.72.3" nullthrows "^1.1.1" -metro@0.72.3, metro@^0.72.1: +metro@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/metro/-/metro-0.72.3.tgz#eb587037d62f48a0c33c8d88f26666b4083bb61e" integrity sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg== @@ -15405,11 +15303,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -ob1@0.72.1: - version "0.72.1" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.72.1.tgz#043943baf35a3fff1c1a436ad29410cfada8b912" - integrity sha512-TyQX2gO08klGTMuzD+xm3iVrzXiIygCB7t+NWeicOR05hkzgeWOiAZ8q40uMfIDRfEAc6hd66sJdIEhU/yUZZA== - ob1@0.72.3: version "0.72.3" resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.72.3.tgz#fc1efcfe156f12ed23615f2465a796faad8b91e4" @@ -17294,10 +17187,10 @@ react-native-fade-in-image@^1.6.1: react-mixin "^3.0.5" react-timer-mixin "^0.13.3" -react-native-gesture-handler@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.5.0.tgz#61385583570ed0a45a9ed142425e35f8fe8274fb" - integrity sha512-djZdcprFf08PZC332D+AeG5wcGeAPhzfCJtB3otUgOgTlvjVXmg/SLFdPJSpzLBqkRAmrC77tM79QgKbuLxkfw== +react-native-gesture-handler@~2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.7.0.tgz#53ad828add926c8e025f68ea581758c0f8893054" + integrity sha512-0jr3FNm2R3gv/v6XTtENgjv0fewD6LEct8EWmXw/oHw36M3YiIIpxnW57thL+0YiKwyLBXN0QHL4JZbs/heW2Q== dependencies: "@egjs/hammerjs" "^2.0.17" hoist-non-react-statics "^3.3.0" @@ -17438,15 +17331,15 @@ react-native-webview@11.23.1: escape-string-regexp "2.0.0" invariant "2.2.4" -react-native@0.70.1: - version "0.70.1" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.70.1.tgz#ce5ffb9a167a77321de1a7fbb492352e92c9399e" - integrity sha512-AUh4NZLFdvyjSiYWCtTROCrC7loxeeZ/TzBnkZwp3kb9XmMu7/kzvWn2c5sEMnzW7X/0JSul8jXexGVdpnCoSA== +react-native@0.70.2: + version "0.70.2" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.70.2.tgz#d16c2b961c05d55439e8fc999825899257b18509" + integrity sha512-c0Usl1Lc4pApDI66wpHwX8SGBUqXouQ8Z8Q9gX4jBjnmO5E8Vmlv6IM0CWDqbX/tn+aKNHCBLqV5phnCqusGbw== dependencies: "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^9.0.0" - "@react-native-community/cli-platform-android" "^9.0.0" - "@react-native-community/cli-platform-ios" "^9.0.0" + "@react-native-community/cli" "9.1.3" + "@react-native-community/cli-platform-android" "9.1.0" + "@react-native-community/cli-platform-ios" "9.1.2" "@react-native/assets" "1.0.0" "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" @@ -17457,9 +17350,9 @@ react-native@0.70.1: invariant "^2.2.4" jsc-android "^250230.2.1" memoize-one "^5.0.0" - metro-react-native-babel-transformer "0.72.1" - metro-runtime "0.72.1" - metro-source-map "0.72.1" + metro-react-native-babel-transformer "0.72.3" + metro-runtime "0.72.3" + metro-source-map "0.72.3" mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2"