From 6b6481f9ac430ffd3aa4e638616b27fac8c0533b Mon Sep 17 00:00:00 2001 From: xmflsct Date: Mon, 8 Aug 2022 22:32:51 +0200 Subject: [PATCH 1/5] Android builds --- android/app/build.gradle | 19 ++++--- .../com/xmflsct/app/tooot/MainActivity.java | 10 +++- android/build.gradle | 4 +- android/settings.gradle | 2 + package.json | 10 ++-- yarn.lock | 55 +++++++++++-------- 6 files changed, 60 insertions(+), 40 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 31495c9f..564a763a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,7 +1,6 @@ apply plugin: "com.android.application" import com.android.build.OutputFile -import org.apache.tools.ant.taskdefs.condition.Os /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets @@ -157,16 +156,12 @@ android { "PROJECT_BUILD_DIR=$buildDir", "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build" + "NODE_MODULES_DIR=$rootDir/../node_modules" cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" cppFlags "-std=c++17" // Make sure this target name is the same you specify inside the // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. targets "tooot_appmodules" - // Fix for windows limit on number of character in file paths and in command lines - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - arguments "NDK_OUT=${rootProject.projectDir.getParent()}\\.cxx", - "NDK_APP_SHORT_COMMANDS=true" - } } } if (!enableSeparateBuildPerCPUArchitecture) { @@ -311,8 +306,10 @@ dependencies { } if (enableHermes) { - debugImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute().text.trim(), "../android/hermes-debug.aar")) - releaseImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute().text.trim(), "../android/hermes-release.aar")) + //noinspection GradleDynamicVersion + implementation("com.facebook.react:hermes-engine:+") { // From node_modules + exclude group:'com.facebook.fbjni' + } } else { implementation jscFlavor } @@ -325,7 +322,11 @@ if (isNewArchitectureEnabled()) { configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("com.facebook.react:react-native")) - .using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source") + .using(project(":ReactAndroid")) + .because("On New Architecture we're building React Native from source") + substitute(module("com.facebook.react:hermes-engine")) + .using(project(":ReactAndroid:hermes-engine")) + .because("On New Architecture we're building Hermes from source") } } } diff --git a/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java b/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java index 69944bb8..ba646dfe 100644 --- a/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java +++ b/android/app/src/main/java/com/xmflsct/app/tooot/MainActivity.java @@ -24,7 +24,8 @@ public class MainActivity extends ReactActivity { /** * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and - * you can specify the rendered you wish to use (Fabric or the older renderer). + * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer + * (Paper). */ @Override protected ReactActivityDelegate createReactActivityDelegate() { @@ -41,5 +42,12 @@ public class MainActivity extends ReactActivity { reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); return reactRootView; } + + @Override + protected boolean isConcurrentRootEnabled() { + // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). + // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } } } diff --git a/android/build.gradle b/android/build.gradle index e3bef1df..ddb4bc57 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -28,9 +28,9 @@ buildscript { } dependencies { classpath 'com.google.gms:google-services:4.3.3' - classpath("com.android.tools.build:gradle:7.0.4") + classpath("com.android.tools.build:gradle:7.1.1") classpath("com.facebook.react:react-native-gradle-plugin") - classpath("de.undercouch:gradle-download-task:4.1.2") + classpath("de.undercouch:gradle-download-task:5.0.1") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/settings.gradle b/android/settings.gradle index 715df6f2..1e5efc0c 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -12,4 +12,6 @@ includeBuild('../node_modules/react-native-gradle-plugin') if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { include(":ReactAndroid") project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid') + include(":ReactAndroid:hermes-engine") + project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine') } diff --git a/package.json b/package.json index 376e8632..2b705bcf 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@formatjs/intl-relativetimeformat": "^11.0.3", "@mattermost/react-native-paste-input": "^0.5.0", "@neverdull-agency/expo-unlimited-secure-store": "^1.0.10", - "@react-native-async-storage/async-storage": "^1.17.7", + "@react-native-async-storage/async-storage": "^1.17.8", "@react-native-community/blur": "^4.2.0", "@react-native-community/cameraroll": "^4.1.2", "@react-native-community/netinfo": "^9.3.0", @@ -67,14 +67,14 @@ "expo-updates": "^0.14.3", "expo-video-thumbnails": "^6.4.0", "expo-web-browser": "^11.0.0", - "i18next": "^21.8.16", + "i18next": "^21.9.0", "li": "^1.3.0", "lodash": "^4.17.21", "react": "^18.2.0", "react-dom": "^18.2.0", "react-i18next": "^11.18.3", "react-intl": "^6.0.5", - "react-native": "^0.69.3", + "react-native": "^0.69.4", "react-native-animated-spinkit": "^1.5.2", "react-native-base64": "^0.2.1", "react-native-blurhash": "^1.1.10", @@ -84,7 +84,7 @@ "react-native-flash-message": "^0.3.1", "react-native-gesture-handler": "^2.5.0", "react-native-htmlview": "^0.16.0", - "react-native-image-picker": "^4.8.4", + "react-native-image-picker": "^4.8.5", "react-native-language-detection": "^0.1.0", "react-native-pager-view": "^5.4.25", "react-native-reanimated": "^2.9.1", @@ -109,7 +109,7 @@ "@babel/preset-typescript": "^7.18.6", "@expo/config": "^7.0.0", "@types/lodash": "^4.14.182", - "@types/react": "^18.0.15", + "@types/react": "^18.0.17", "@types/react-dom": "^18.0.6", "@types/react-native": "^0.69.5", "@types/react-native-base64": "^0.2.0", diff --git a/yarn.lock b/yarn.lock index 1fb1bdd1..98064f50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1703,10 +1703,10 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@react-native-async-storage/async-storage@^1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.17.7.tgz#f9213e8cc6202a8c29df5a4da1db588f3b0fa8a9" - integrity sha512-mDtWhCcpxzrZhA95f6zi0pnBsjBEZW1LKZWfxVXG0UfaWpPxDBCKowNk2xjRTytckZeVhjmPJPtBU+8QNQcR0A== +"@react-native-async-storage/async-storage@^1.17.8": + version "1.17.8" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.17.8.tgz#1ccff16dd02a85117b569f36eabaa2e49be40bbd" + integrity sha512-GoM/11oiSQrTcb6OycIPc6yv9HdWO12WbjsZX82v0xkAwefxJ0nPEHPhaeJiUnoOlCxj44+KoEPzlHG0Y8eRhA== dependencies: merge-options "^3.0.4" @@ -1781,7 +1781,7 @@ hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-platform-android@^8.0.2", "@react-native-community/cli-platform-android@^8.0.5": +"@react-native-community/cli-platform-android@^8.0.4", "@react-native-community/cli-platform-android@^8.0.5": version "8.0.5" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-8.0.5.tgz#da11d2678adeca98e83494d68de80e50571b4af4" integrity sha512-z1YNE4T1lG5o9acoQR1GBvf7mq6Tzayqo/za5sHVSOJAC9SZOuVN/gg/nkBa9a8n5U7qOMFXfwhTMNqA474gXA== @@ -1796,7 +1796,7 @@ logkitty "^0.7.1" slash "^3.0.0" -"@react-native-community/cli-platform-ios@^8.0.2", "@react-native-community/cli-platform-ios@^8.0.4": +"@react-native-community/cli-platform-ios@^8.0.4": version "8.0.4" resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-8.0.4.tgz#15225c09a1218a046f11165a54bf14b59dad7020" integrity sha512-7Jdptedfg/J0Xo2rQbJ4jmo+PMYOiIiRcNDCSI5dBcNkQfSq4MMYUnKQx5DdZHgrfxE0O1vE4iNmJdd4wePz8w== @@ -1864,7 +1864,7 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli@^8.0.3": +"@react-native-community/cli@^8.0.4": version "8.0.5" resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-8.0.5.tgz#902a13b5336508f7989fddf39e6bf85b63a66de9" integrity sha512-X0AMNK+sKDJQX8eQRkqgddJsZPWlHgLryX7O9usj78UFEK8VqVYtpv08piWecfAhC2mZU4/Lww4bKu9uJ1rdyQ== @@ -2330,7 +2330,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@^18.0.15": +"@types/react@*", "@types/react@16 || 17 || 18": version "18.0.15" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== @@ -2339,6 +2339,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^18.0.17": + version "18.0.17" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" + integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -4793,10 +4802,10 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -i18next@^21.8.16: - version "21.8.16" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.8.16.tgz#31fe4682e4e2077dbf229a88e5a58b7020e4ddc8" - integrity sha512-acJLCk38YMfEPjBR/1vS13SFY7rBQLs9E5m1tSRnWc9UW3f+SZszgH+NP1fZRA1+O+CdG2eLGGmuUMJW52EwzQ== +i18next@^21.9.0: + version "21.9.0" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.9.0.tgz#b63ebb0d4e1b23709951ca4774dc19d2ffac9553" + integrity sha512-B+6/yd7rCpJidyPuBaEApUECx7G8Ai6+tqYhrChsY4MmQqJhG7qJ4eT6Lm1OnRhieVelEtfxh4aAQktdNVZtDA== dependencies: "@babel/runtime" "^7.17.2" @@ -7056,10 +7065,10 @@ react-native-htmlview@^0.16.0: entities "^1.1.1" htmlparser2-without-node-native "^3.9.2" -react-native-image-picker@^4.8.4: - version "4.8.4" - resolved "https://registry.yarnpkg.com/react-native-image-picker/-/react-native-image-picker-4.8.4.tgz#ac52f1e265458e944664adf1dcd0a9ee408fe083" - integrity sha512-Mjh2j/sddyolb16EpmprWzbtyeFvW8Xgzr/8WNi9d6bR2FC/kL78cY/a+7Yzujg5ZDtT1MWys+eWw/qtfwgGiw== +react-native-image-picker@^4.8.5: + version "4.8.5" + resolved "https://registry.yarnpkg.com/react-native-image-picker/-/react-native-image-picker-4.8.5.tgz#5e5a0af56a13957cadfa1f8ce349d036d62e1499" + integrity sha512-+pQxkjO8cKv4RKTHOFS0fSHQ11HkWgb+imUPSOS8mwoChkR33aSuzV/6P4t9JCJgsus4qLAlB6BUosdIxw7GTA== react-native-iphone-x-helper@^1.3.1: version "1.3.1" @@ -7126,15 +7135,15 @@ react-native-tab-view@^3.1.1: resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-3.1.1.tgz#1f8d7a835ab4f5b1b1407ec8dddc1053b53fa3c6" integrity sha512-M5pRN6utQfytKWoKlKVzg5NbkYu308qNoW1khGTtEOTs1k14p2dHJ/BWOJoJYHKbPVUyZldbG9MFT7gUl4YHnw== -react-native@^0.69.3: - version "0.69.3" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.69.3.tgz#8fc7afe0a302294262a6b49ba2089483db734c05" - integrity sha512-SyGkcoEUa/BkO+wKVnv4OsnLSNfUM5zLNXS3iT/3eXjKX91/FKBH/nfR9BE1c60X5LQe/P5QYqr6WPX3TRSQkA== +react-native@^0.69.4: + version "0.69.4" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.69.4.tgz#d66f2a117442a9398b065876afdc568b209dc4da" + integrity sha512-rqNMialM/T4pHRKWqTIpOxA65B/9kUjtnepxwJqvsdCeMP9Q2YdSx4VASFR9RoEFYcPRU41yGf6EKrChNfns3g== dependencies: "@jest/create-cache-key-function" "^27.0.1" - "@react-native-community/cli" "^8.0.3" - "@react-native-community/cli-platform-android" "^8.0.2" - "@react-native-community/cli-platform-ios" "^8.0.2" + "@react-native-community/cli" "^8.0.4" + "@react-native-community/cli-platform-android" "^8.0.4" + "@react-native-community/cli-platform-ios" "^8.0.4" "@react-native/assets" "1.0.0" "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" From a68ed6ea1b87d56c79ec67256ee86079b00307dc Mon Sep 17 00:00:00 2001 From: xmflsct Date: Mon, 8 Aug 2022 23:00:46 +0200 Subject: [PATCH 2/5] Fix menu translations --- package.json | 2 +- src/components/ContextMenu/account.ts | 8 ++++---- src/components/Timeline/Shared/HeaderDefault.android.tsx | 5 ++--- .../Timeline/Shared/HeaderNotification.android.tsx | 8 ++++---- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 2b705bcf..c3b8f46f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "versions": { "native": "220806", "major": 4, - "minor": 3, + "minor": 2, "patch": 0, "expo": "46.0.0" }, diff --git a/src/components/ContextMenu/account.ts b/src/components/ContextMenu/account.ts index 9678912c..7460a36d 100644 --- a/src/components/ContextMenu/account.ts +++ b/src/components/ContextMenu/account.ts @@ -41,8 +41,8 @@ const contextMenuAccount = ({ type: 'success', message: t('common:message.success.message', { function: t(`account.${theParams.payload.property}.action`, { - ...(typeof theParams.payload.currentValue === 'boolean' && { - context: theParams.payload.currentValue.toString() + ...(theParams.payload.property !== 'reports' && { + context: (theParams.payload.currentValue || false).toString() }) }) }) @@ -55,8 +55,8 @@ const contextMenuAccount = ({ type: 'error', message: t('common:message.error.message', { function: t(`account.${theParams.payload.property}.action`, { - ...(typeof theParams.payload.currentValue === 'boolean' && { - context: theParams.payload.currentValue.toString() + ...(theParams.payload.property !== 'reports' && { + context: (theParams.payload.currentValue || false).toString() }) }) }), diff --git a/src/components/Timeline/Shared/HeaderDefault.android.tsx b/src/components/Timeline/Shared/HeaderDefault.android.tsx index fb224a1a..24051752 100644 --- a/src/components/Timeline/Shared/HeaderDefault.android.tsx +++ b/src/components/Timeline/Shared/HeaderDefault.android.tsx @@ -6,11 +6,10 @@ import Icon from '@components/Icon' import { QueryKeyTimeline } from '@utils/queryHooks/timeline' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' -import React, { useContext } from 'react' +import React from 'react' import { useTranslation } from 'react-i18next' -import { Platform, Pressable, View } from 'react-native' +import { Pressable, View } from 'react-native' import ContextMenu, { ContextMenuAction } from 'react-native-context-menu-view' -import { ContextMenuContext } from './ContextMenu' import HeaderSharedAccount from './HeaderShared/Account' import HeaderSharedApplication from './HeaderShared/Application' import HeaderSharedCreated from './HeaderShared/Created' diff --git a/src/components/Timeline/Shared/HeaderNotification.android.tsx b/src/components/Timeline/Shared/HeaderNotification.android.tsx index 2922f516..b2331dcd 100644 --- a/src/components/Timeline/Shared/HeaderNotification.android.tsx +++ b/src/components/Timeline/Shared/HeaderNotification.android.tsx @@ -20,7 +20,7 @@ import HeaderSharedMuted from './HeaderShared/Muted' import HeaderSharedVisibility from './HeaderShared/Visibility' export interface Props { - queryKey?: QueryKeyTimeline + queryKey: QueryKeyTimeline notification: Mastodon.Notification } @@ -39,18 +39,18 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => { : null const statusOnPress = contextMenuStatus({ actions: contextMenuActions, - status, + status: status!, queryKey }) const accountOnPress = contextMenuAccount({ actions: contextMenuActions, type: 'status', queryKey, - id: status?.account.id + id: status!.account.id }) const instanceOnPress = contextMenuInstance({ actions: contextMenuActions, - status, + status: status!, queryKey }) From 9f17f95a98a8a6f75c51997f3eeca3f0b70ad3b9 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Tue, 9 Aug 2022 00:44:56 +0200 Subject: [PATCH 3/5] Fixed #354 --- ios/Podfile.lock | 516 +++++++++--------- package.json | 1 + src/components/ContextMenu/share.ts | 26 +- src/components/Timeline/Default.tsx | 11 +- src/components/Timeline/Notifications.tsx | 11 +- src/components/Timeline/Shared/Content.tsx | 3 - .../Timeline/Shared/ContextMenu.tsx | 10 +- src/components/Timeline/Shared/Filtered.tsx | 11 + .../Timeline/Shared/HeaderDefault.ios.tsx | 4 +- src/components/Timeline/Shared/Translate.tsx | 8 +- src/i18n/en/components/contextMenu.json | 4 + yarn.lock | 5 + 12 files changed, 333 insertions(+), 277 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f12e7a14..623d74dc 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -71,14 +71,14 @@ PODS: - EXUpdatesInterface (0.7.0) - EXVideoThumbnails (6.4.0): - ExpoModulesCore - - FBLazyVector (0.69.3) - - FBReactNativeSpec (0.69.3): + - FBLazyVector (0.69.4) + - FBReactNativeSpec (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.69.3) - - RCTTypeSafety (= 0.69.3) - - React-Core (= 0.69.3) - - React-jsi (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) + - RCTRequired (= 0.69.4) + - RCTTypeSafety (= 0.69.4) + - React-Core (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) - Firebase/Core (8.14.0): - Firebase/CoreOnly - FirebaseAnalytics (~> 8.14.0) @@ -257,214 +257,214 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.69.3) - - RCTTypeSafety (0.69.3): - - FBLazyVector (= 0.69.3) - - RCTRequired (= 0.69.3) - - React-Core (= 0.69.3) - - React (0.69.3): - - React-Core (= 0.69.3) - - React-Core/DevSupport (= 0.69.3) - - React-Core/RCTWebSocket (= 0.69.3) - - React-RCTActionSheet (= 0.69.3) - - React-RCTAnimation (= 0.69.3) - - React-RCTBlob (= 0.69.3) - - React-RCTImage (= 0.69.3) - - React-RCTLinking (= 0.69.3) - - React-RCTNetwork (= 0.69.3) - - React-RCTSettings (= 0.69.3) - - React-RCTText (= 0.69.3) - - React-RCTVibration (= 0.69.3) - - React-bridging (0.69.3): + - RCTRequired (0.69.4) + - RCTTypeSafety (0.69.4): + - FBLazyVector (= 0.69.4) + - RCTRequired (= 0.69.4) + - React-Core (= 0.69.4) + - React (0.69.4): + - React-Core (= 0.69.4) + - React-Core/DevSupport (= 0.69.4) + - React-Core/RCTWebSocket (= 0.69.4) + - React-RCTActionSheet (= 0.69.4) + - React-RCTAnimation (= 0.69.4) + - React-RCTBlob (= 0.69.4) + - React-RCTImage (= 0.69.4) + - React-RCTLinking (= 0.69.4) + - React-RCTNetwork (= 0.69.4) + - React-RCTSettings (= 0.69.4) + - React-RCTText (= 0.69.4) + - React-RCTVibration (= 0.69.4) + - React-bridging (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi (= 0.69.3) - - React-callinvoker (0.69.3) - - React-Codegen (0.69.3): - - FBReactNativeSpec (= 0.69.3) + - React-jsi (= 0.69.4) + - React-callinvoker (0.69.4) + - React-Codegen (0.69.4): + - FBReactNativeSpec (= 0.69.4) - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.69.3) - - RCTTypeSafety (= 0.69.3) - - React-Core (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-Core (0.69.3): + - RCTRequired (= 0.69.4) + - RCTTypeSafety (= 0.69.4) + - React-Core (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-Core (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.69.3) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-Core/Default (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/CoreModulesHeaders (0.69.3): + - React-Core/CoreModulesHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/Default (0.69.3): + - React-Core/Default (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/DevSupport (0.69.3): + - React-Core/DevSupport (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.69.3) - - React-Core/RCTWebSocket (= 0.69.3) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-jsinspector (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-Core/Default (= 0.69.4) + - React-Core/RCTWebSocket (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-jsinspector (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTActionSheetHeaders (0.69.3): + - React-Core/RCTActionSheetHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTAnimationHeaders (0.69.3): + - React-Core/RCTAnimationHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTBlobHeaders (0.69.3): + - React-Core/RCTBlobHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTImageHeaders (0.69.3): + - React-Core/RCTImageHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTLinkingHeaders (0.69.3): + - React-Core/RCTLinkingHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTNetworkHeaders (0.69.3): + - React-Core/RCTNetworkHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTSettingsHeaders (0.69.3): + - React-Core/RCTSettingsHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTTextHeaders (0.69.3): + - React-Core/RCTTextHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTVibrationHeaders (0.69.3): + - React-Core/RCTVibrationHeaders (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-Core/RCTWebSocket (0.69.3): + - React-Core/RCTWebSocket (0.69.4): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.69.3) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-perflogger (= 0.69.3) + - React-Core/Default (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-perflogger (= 0.69.4) - Yoga - - React-CoreModules (0.69.3): + - React-CoreModules (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.3) - - React-Codegen (= 0.69.3) - - React-Core/CoreModulesHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - React-RCTImage (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-cxxreact (0.69.3): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/CoreModulesHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - React-RCTImage (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-cxxreact (0.69.4): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsinspector (= 0.69.3) - - React-logger (= 0.69.3) - - React-perflogger (= 0.69.3) - - React-runtimeexecutor (= 0.69.3) - - React-hermes (0.69.3): + - React-callinvoker (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsinspector (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - React-runtimeexecutor (= 0.69.4) + - React-hermes (0.69.4): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.06.28.00-v2) - RCT-Folly/Futures (= 2021.06.28.00-v2) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-jsiexecutor (= 0.69.3) - - React-jsinspector (= 0.69.3) - - React-perflogger (= 0.69.3) - - React-jsi (0.69.3): + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-jsiexecutor (= 0.69.4) + - React-jsinspector (= 0.69.4) + - React-perflogger (= 0.69.4) + - React-jsi (0.69.4): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.69.3) - - React-jsi/Default (0.69.3): + - React-jsi/Default (= 0.69.4) + - React-jsi/Default (0.69.4): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.69.3): + - React-jsiexecutor (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-perflogger (= 0.69.3) - - React-jsinspector (0.69.3) - - React-logger (0.69.3): + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-perflogger (= 0.69.4) + - React-jsinspector (0.69.4) + - React-logger (0.69.4): - glog - react-native-blur (4.2.0): - React-Core @@ -474,7 +474,7 @@ PODS: - React-Core - react-native-context-menu-view (1.5.4): - React - - react-native-image-picker (4.8.4): + - react-native-image-picker (4.8.5): - React-Core - react-native-language-detection (0.1.0): - React @@ -493,104 +493,106 @@ PODS: - ReactCommon/turbomodule/core - react-native-segmented-control (2.2.2): - React-Core - - React-perflogger (0.69.3) - - React-RCTActionSheet (0.69.3): - - React-Core/RCTActionSheetHeaders (= 0.69.3) - - React-RCTAnimation (0.69.3): + - React-perflogger (0.69.4) + - React-RCTActionSheet (0.69.4): + - React-Core/RCTActionSheetHeaders (= 0.69.4) + - React-RCTAnimation (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.3) - - React-Codegen (= 0.69.3) - - React-Core/RCTAnimationHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-RCTBlob (0.69.3): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTAnimationHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTBlob (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.69.3) - - React-Core/RCTBlobHeaders (= 0.69.3) - - React-Core/RCTWebSocket (= 0.69.3) - - React-jsi (= 0.69.3) - - React-RCTNetwork (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-RCTImage (0.69.3): + - React-Codegen (= 0.69.4) + - React-Core/RCTBlobHeaders (= 0.69.4) + - React-Core/RCTWebSocket (= 0.69.4) + - React-jsi (= 0.69.4) + - React-RCTNetwork (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTImage (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.3) - - React-Codegen (= 0.69.3) - - React-Core/RCTImageHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - React-RCTNetwork (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-RCTLinking (0.69.3): - - React-Codegen (= 0.69.3) - - React-Core/RCTLinkingHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-RCTNetwork (0.69.3): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTImageHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - React-RCTNetwork (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTLinking (0.69.4): + - React-Codegen (= 0.69.4) + - React-Core/RCTLinkingHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTNetwork (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.3) - - React-Codegen (= 0.69.3) - - React-Core/RCTNetworkHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-RCTSettings (0.69.3): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTNetworkHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTSettings (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.69.3) - - React-Codegen (= 0.69.3) - - React-Core/RCTSettingsHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-RCTText (0.69.3): - - React-Core/RCTTextHeaders (= 0.69.3) - - React-RCTVibration (0.69.3): + - RCTTypeSafety (= 0.69.4) + - React-Codegen (= 0.69.4) + - React-Core/RCTSettingsHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-RCTText (0.69.4): + - React-Core/RCTTextHeaders (= 0.69.4) + - React-RCTVibration (0.69.4): - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.69.3) - - React-Core/RCTVibrationHeaders (= 0.69.3) - - React-jsi (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - React-runtimeexecutor (0.69.3): - - React-jsi (= 0.69.3) - - ReactCommon (0.69.3): - - React-logger (= 0.69.3) - - ReactCommon/react_debug_core (= 0.69.3) - - ReactCommon/turbomodule (= 0.69.3) - - ReactCommon/react_debug_core (0.69.3): - - React-logger (= 0.69.3) - - ReactCommon/turbomodule (0.69.3): + - React-Codegen (= 0.69.4) + - React-Core/RCTVibrationHeaders (= 0.69.4) + - React-jsi (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - React-runtimeexecutor (0.69.4): + - React-jsi (= 0.69.4) + - ReactCommon (0.69.4): + - React-logger (= 0.69.4) + - ReactCommon/react_debug_core (= 0.69.4) + - ReactCommon/turbomodule (= 0.69.4) + - ReactCommon/react_debug_core (0.69.4): + - React-logger (= 0.69.4) + - ReactCommon/turbomodule (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-bridging (= 0.69.3) - - React-callinvoker (= 0.69.3) - - React-Core (= 0.69.3) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-logger (= 0.69.3) - - React-perflogger (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - ReactCommon/turbomodule/samples (= 0.69.3) - - ReactCommon/turbomodule/core (0.69.3): + - React-bridging (= 0.69.4) + - React-callinvoker (= 0.69.4) + - React-Core (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - ReactCommon/turbomodule/samples (= 0.69.4) + - ReactCommon/turbomodule/core (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-bridging (= 0.69.3) - - React-callinvoker (= 0.69.3) - - React-Core (= 0.69.3) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-logger (= 0.69.3) - - React-perflogger (= 0.69.3) - - ReactCommon/turbomodule/samples (0.69.3): + - React-bridging (= 0.69.4) + - React-callinvoker (= 0.69.4) + - React-Core (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - ReactCommon/turbomodule/samples (0.69.4): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-bridging (= 0.69.3) - - React-callinvoker (= 0.69.3) - - React-Core (= 0.69.3) - - React-cxxreact (= 0.69.3) - - React-jsi (= 0.69.3) - - React-logger (= 0.69.3) - - React-perflogger (= 0.69.3) - - ReactCommon/turbomodule/core (= 0.69.3) - - RNCAsyncStorage (1.17.7): + - React-bridging (= 0.69.4) + - React-callinvoker (= 0.69.4) + - React-Core (= 0.69.4) + - React-cxxreact (= 0.69.4) + - React-jsi (= 0.69.4) + - React-logger (= 0.69.4) + - React-perflogger (= 0.69.4) + - ReactCommon/turbomodule/core (= 0.69.4) + - RNCAsyncStorage (1.17.8): + - React-Core + - RNCClipboard (1.10.0): - React-Core - RNFastImage (8.5.11): - React-Core @@ -750,6 +752,7 @@ DEPENDENCIES: - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" + - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - RNFastImage (from `../node_modules/react-native-fast-image`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNReanimated (from `../node_modules/react-native-reanimated`) @@ -942,6 +945,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" RNCAsyncStorage: :path: "../node_modules/@react-native-async-storage/async-storage" + RNCClipboard: + :path: "../node_modules/@react-native-clipboard/clipboard" RNFastImage: :path: "../node_modules/react-native-fast-image" RNGestureHandler: @@ -993,8 +998,8 @@ SPEC CHECKSUMS: EXUpdates: 0d639074a69862e121706c0d4203a700ecfcc22d EXUpdatesInterface: 2bbc11815dfa2ec3fc02e5534c7592c6b42b5327 EXVideoThumbnails: 486533e1a66c9859f9b9e3b2e1f9f0b275515b48 - FBLazyVector: 1d83d91816fa605d16227a83f1b2e71c8df09d22 - FBReactNativeSpec: 626e35e73f83c637ff166f906d584f4c6750c251 + FBLazyVector: c71b8c429a8af2aff1013934a7152e9d9d0c937d + FBReactNativeSpec: cb0df4f0084281b394f76bb9b4d1d9540f35963f Firebase: 7e8fe528c161b9271d365217a74c16aaf834578e FirebaseAnalytics: 2fc3876e2eb347673ad2f35e249ae7b15d6c88f5 FirebaseCore: b84a44ee7ba999e0f9f76d198a9c7f60a797b848 @@ -1021,44 +1026,45 @@ SPEC CHECKSUMS: OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a - RCTRequired: 66822c147facf02f7774af99825e0a31e39df42e - RCTTypeSafety: 309306c4e711b14a83c55c2816a6cc490ec19827 - React: a779632422a918b26db4f1b57225a41c14d20525 - React-bridging: 96055aa45f0417898d7833e251f4ae79d28acef7 - React-callinvoker: 02df4d620df286381ff3f99180fb24feceaf01cc - React-Codegen: 06613a5e753c3af2dca0d6e7dd02944a3d77c3f6 - React-Core: 638d54d64048aa635e7c583fb0d8425206f446b4 - React-CoreModules: f706ec2a1939387517cadc6ce0d2ef0f20fccb53 - React-cxxreact: ec183b7f6fec01e7167f38c1c64a03f68dca7fb2 - React-hermes: a97962948f74aaefffd4fe00bdafafbc245b08af - React-jsi: ed7dc77f5193dca9c73cec90bfec409e7ddfe401 - React-jsiexecutor: 1842ca163b160aeb224d2c65b2a60c393b273c67 - React-jsinspector: bb2605f98aada5d81f3494690da3ef3b4ff3b716 - React-logger: 23a50ef4c18bf9adbb51e2c979318e6b3a2e44a1 + RCTRequired: bd9d2ab0fda10171fcbcf9ba61a7df4dc15a28f4 + RCTTypeSafety: e44e139bf6ec8042db396201834fc2372f6a21cd + React: 482cd1ba23c471be1aed3800180be2427418d7be + React-bridging: c2ea4fed6fe4ed27c12fd71e88b5d5d3da107fde + React-callinvoker: d4d1f98163fb5e35545e910415ef6c04796bb188 + React-Codegen: ff35fb9c7f6ec2ed34fb6de2e1099d88dfb25f2f + React-Core: 4d3443a45b67c71d74d7243ddde9569d1e4f4fad + React-CoreModules: 70be25399366b5632ab18ecf6fe444a8165a7bea + React-cxxreact: 822d3794fc0bf206f4691592f90e086dd4f92228 + React-hermes: 7f67b8363288258c3b0cd4aef5975cb7f0b9549a + React-jsi: ffa51cbc9a78cc156cf61f79ed52ecb76dc6013b + React-jsiexecutor: a27badbbdbc0ff781813370736a2d1c7261181d4 + React-jsinspector: 8a3d3f5dcd23a91e8c80b1bf0e96902cd1dca999 + React-logger: 1088859f145b8f6dd0d3ed051a647ef0e3e80fad react-native-blur: 3e9c8e8e9f7d17fa1b94e1a0ae9fd816675f5382 react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7 react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866 react-native-context-menu-view: b0beca02aad4bd9f9d7d932bf437e0a03baa69ef - react-native-image-picker: cffb727cf2f59bd5c0408e30b3dbe0b935f88835 + react-native-image-picker: cd420f97f6ed6ff74fc4686d27dbcfdbd051db91 react-native-language-detection: 0e43195ad014974f1b7a31b64820eff34a243f2d react-native-netinfo: 129bd99f607a2dc5bb096168f3e5c150fd1f1c95 react-native-pager-view: da490aa1f902c9a5aeecf0909cc975ad0e92e53e react-native-paste-input: 3037f113267c367e863790bcfd57cdb3ace3cad6 react-native-safe-area-context: 6c12e3859b6f27b25de4fee8201cfb858432d8de react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097 - React-perflogger: 39d2ba8cbcac54d1bb1d9a980dab348e96aef467 - React-RCTActionSheet: b1ad907a2c8f8e4d037148ca507b7f2d6ab1c66d - React-RCTAnimation: 914a9ba46fb6e7376f7709c7ce825d53b47ca2ee - React-RCTBlob: de62fd5edc5c36951f0b113bf252eb43b7131f79 - React-RCTImage: aa0749a8d748b34942c7e71ac5d9f42be8b70cf3 - React-RCTLinking: 595a9f8fbf4d6634bff28d1175b3523b61466612 - React-RCTNetwork: 0559fd0fccb01f89c638baa43c8d185dc8008626 - React-RCTSettings: 8e492a25a62f1ef6323f82ce652ae87fa59c82ca - React-RCTText: 17457cde6ef8832ba43c886baebb6627c5d7ed18 - React-RCTVibration: dd8099eb46e9cee4692934bc8cbe5e9a4f5e8d31 - React-runtimeexecutor: 607eb048e22a16388c908ee1f6644200e8d1e19b - ReactCommon: af7636436b382db7cde4583bbd642f0978e6e3ed - RNCAsyncStorage: d81ee5c3db1060afd49ea7045ad460eff82d2b7d + React-perflogger: cb386fd44c97ec7f8199c04c12b22066b0f2e1e0 + React-RCTActionSheet: f803a85e46cf5b4066c2ac5e122447f918e9c6e5 + React-RCTAnimation: 19c80fa950ccce7f4db76a2a7f2cf79baae07fc7 + React-RCTBlob: f36ab97e2d515c36df14a1571e50056be80413d5 + React-RCTImage: 2c8f0a329a116248e82f8972ffe806e47c6d1cfa + React-RCTLinking: 670f0223075aff33be3b89714f1da4f5343fc4af + React-RCTNetwork: 09385b73f4ff1f46bd5d749540fb33f69a7e5908 + React-RCTSettings: 33b12d3ac7a1f2eba069ec7bd1b84345263b3bbe + React-RCTText: a1a3ea902403bd9ae4cf6f7960551dc1d25711b5 + React-RCTVibration: 9adb4a3cbb598d1bbd46a05256f445e4b8c70603 + React-runtimeexecutor: 61ee22a8cdf8b6bb2a7fb7b4ba2cc763e5285196 + ReactCommon: 8f67bd7e0a6afade0f20718f859dc8c2275f2e83 + RNCAsyncStorage: 7cbd0d823dbb0e415d40a7e77fea2292483c8bdb + RNCClipboard: f1736c75ab85b627a4d57587edb4b60999c4dd80 RNFastImage: 8e9b5b9e6df94d2e359c0a75a4745ad1311506fd RNGestureHandler: bad495418bcbd3ab47017a38d93d290ebd406f50 RNReanimated: 2cf7451318bb9cc430abeec8d67693f9cf4e039c @@ -1071,7 +1077,7 @@ SPEC CHECKSUMS: Sentry: 30b51086ca9aac23337880152e95538f7e177f7f SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b - Yoga: 44c64131616253fa83366295acdbce3d14926041 + Yoga: ff994563b2fd98c982ca58e8cd9db2cdaf4dda74 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a PODFILE CHECKSUM: a2f2cbb9af4b081ba2a1ca88de325713cfa64ec5 diff --git a/package.json b/package.json index c3b8f46f..98983775 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@mattermost/react-native-paste-input": "^0.5.0", "@neverdull-agency/expo-unlimited-secure-store": "^1.0.10", "@react-native-async-storage/async-storage": "^1.17.8", + "@react-native-clipboard/clipboard": "^1.10.0", "@react-native-community/blur": "^4.2.0", "@react-native-community/cameraroll": "^4.1.2", "@react-native-community/netinfo": "^9.3.0", diff --git a/src/components/ContextMenu/share.ts b/src/components/ContextMenu/share.ts index 7d797847..58df0bbf 100644 --- a/src/components/ContextMenu/share.ts +++ b/src/components/ContextMenu/share.ts @@ -1,15 +1,23 @@ import analytics from '@components/analytics' +import { displayMessage } from '@components/Message' +import Clipboard from '@react-native-clipboard/clipboard' +import { useTheme } from '@utils/styles/ThemeManager' import { useTranslation } from 'react-i18next' import { Platform, Share } from 'react-native' import { ContextMenuAction } from 'react-native-context-menu-view' export interface Props { + copiableContent?: React.MutableRefObject<{ + content?: string | undefined + complete: boolean + }> actions: ContextMenuAction[] type: 'status' | 'account' url: string } -const contextMenuShare = ({ actions, type, url }: Props) => { +const contextMenuShare = ({ copiableContent, actions, type, url }: Props) => { + const { theme } = useTheme() const { t } = useTranslation('componentContextMenu') actions.push({ @@ -17,8 +25,24 @@ const contextMenuShare = ({ actions, type, url }: Props) => { title: t(`share.${type}.action`), systemIcon: 'square.and.arrow.up' }) + Platform.OS !== 'android' && + actions.push({ + id: 'copy', + title: t(`copy.action`), + systemIcon: 'doc.on.doc', + disabled: !copiableContent?.current.content?.length + }) return (index: number) => { + if (actions[index].id === 'copy') { + analytics('timeline_shared_headeractions_copy_press') + Clipboard.setString(copiableContent?.current.content || '') + displayMessage({ + theme, + type: 'success', + message: t(`copy.succeed`) + }) + } if (actions[index].id === 'share') { analytics('timeline_shared_headeractions_share_press') switch (Platform.OS) { diff --git a/src/components/Timeline/Default.tsx b/src/components/Timeline/Default.tsx index d72e427c..c2cd3427 100644 --- a/src/components/Timeline/Default.tsx +++ b/src/components/Timeline/Default.tsx @@ -15,7 +15,7 @@ import { getInstanceAccount } from '@utils/slices/instancesSlice' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import { uniqBy } from 'lodash' -import React, { useCallback } from 'react' +import React, { useCallback, useEffect, useRef } from 'react' import { Pressable, View } from 'react-native' import { useSelector } from 'react-redux' import TimelineContextMenu from './Shared/ContextMenu' @@ -53,10 +53,15 @@ const TimelineDefault: React.FC = ({ const ownAccount = actualStatus.account?.id === instanceAccount?.id + const copiableContent = useRef<{ content: string; complete: boolean }>({ + content: '', + complete: false + }) + if ( !highlighted && queryKey && - shouldFilter({ status: actualStatus, queryKey }) + shouldFilter({ copiableContent, status: actualStatus, queryKey }) ) { return } @@ -75,10 +80,10 @@ const TimelineDefault: React.FC = ({ return ( { + const copiableContent = useRef<{ content: string; complete: boolean }>({ + content: '', + complete: false + }) + if ( notification.status && - shouldFilter({ status: notification.status, queryKey }) + shouldFilter({ copiableContent, status: notification.status, queryKey }) ) { return } @@ -60,9 +65,9 @@ const TimelineNotifications = React.memo( return ( ) : ( @@ -66,7 +64,6 @@ const TimelineContent = React.memo( tags={status.tags} numberOfLines={highlighted ? 999 : numberOfLines} disableDetails={disableDetails} - selectable={highlighted} /> )} diff --git a/src/components/Timeline/Shared/ContextMenu.tsx b/src/components/Timeline/Shared/ContextMenu.tsx index c38272f1..911ad328 100644 --- a/src/components/Timeline/Shared/ContextMenu.tsx +++ b/src/components/Timeline/Shared/ContextMenu.tsx @@ -12,23 +12,26 @@ import ContextMenu, { } from 'react-native-context-menu-view' export interface Props { + copiableContent: React.MutableRefObject<{ + content: string + complete: boolean + }> status?: Mastodon.Status queryKey?: QueryKeyTimeline rootQueryKey?: QueryKeyTimeline - disabled?: boolean // Allowing toot to be copied when highlighted } export const ContextMenuContext = createContext([]) const TimelineContextMenu: React.FC = ({ children, + copiableContent, status, queryKey, rootQueryKey, - disabled, ...props }) => { - if (!status || !queryKey || disabled || Platform.OS === 'android') { + if (!status || !queryKey || Platform.OS === 'android') { return <>{children} } @@ -37,6 +40,7 @@ const TimelineContextMenu: React.FC = ({ const shareOnPress = status.visibility !== 'direct' ? contextMenuShare({ + copiableContent, actions, type: 'status', url: status.url || status.uri diff --git a/src/components/Timeline/Shared/Filtered.tsx b/src/components/Timeline/Shared/Filtered.tsx index f6e10994..1dd5f4ae 100644 --- a/src/components/Timeline/Shared/Filtered.tsx +++ b/src/components/Timeline/Shared/Filtered.tsx @@ -34,9 +34,14 @@ const TimelineFiltered = React.memo( ) export const shouldFilter = ({ + copiableContent, status, queryKey }: { + copiableContent: React.MutableRefObject<{ + content: string + complete: boolean + }> status: Mastodon.Status queryKey: QueryKeyTimeline }) => { @@ -48,6 +53,11 @@ export const shouldFilter = ({ if (!ownAccount) { const parser = new htmlparser2.Parser({ ontext: (text: string) => { + if (!copiableContent.current.complete) { + copiableContent.current.content = + copiableContent.current.content + text + } + const checkFilter = (filter: Mastodon.Filter) => { const escapedPhrase = filter.phrase.replace( /[.*+?^${}()|[\]\\]/g, @@ -103,6 +113,7 @@ export const shouldFilter = ({ status.spoiler_text && parser.write(status.spoiler_text) parser.write(status.content) parser.end() + copiableContent.current.complete = true } return shouldFilter diff --git a/src/components/Timeline/Shared/HeaderDefault.ios.tsx b/src/components/Timeline/Shared/HeaderDefault.ios.tsx index d18668d2..80a1c1bb 100644 --- a/src/components/Timeline/Shared/HeaderDefault.ios.tsx +++ b/src/components/Timeline/Shared/HeaderDefault.ios.tsx @@ -4,7 +4,7 @@ import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useContext } from 'react' import { useTranslation } from 'react-i18next' -import { Platform, Pressable, View } from 'react-native' +import { Pressable, View } from 'react-native' import ContextMenu from 'react-native-context-menu-view' import { ContextMenuContext } from './ContextMenu' import HeaderSharedAccount from './HeaderShared/Account' @@ -48,7 +48,7 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => { - {queryKey && !highlighted ? ( + {queryKey ? ( {data && data.error === undefined ? data.text.map((d, i) => ( - + )) : null} diff --git a/src/i18n/en/components/contextMenu.json b/src/i18n/en/components/contextMenu.json index cd410020..d7ba0c11 100644 --- a/src/i18n/en/components/contextMenu.json +++ b/src/i18n/en/components/contextMenu.json @@ -14,6 +14,10 @@ "action": "Report user" } }, + "copy": { + "action": "Copy toot", + "succeed": "Copied" + }, "instance": { "title": "Instance action", "block": { diff --git a/yarn.lock b/yarn.lock index 98064f50..d2d58568 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1710,6 +1710,11 @@ dependencies: merge-options "^3.0.4" +"@react-native-clipboard/clipboard@^1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@react-native-clipboard/clipboard/-/clipboard-1.10.0.tgz#605e784ed5435059c9b5db52b2d112f9fd09c409" + integrity sha512-1L+I0vmeUJgMi8MnNsqI00391/RFLkmmxj9qAuOS2madpvce/oNqJb8Pwk2Fc/uxIJSxOckTpq+dQwyPU6s+7w== + "@react-native-community/blur@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@react-native-community/blur/-/blur-4.2.0.tgz#f100d0ba220ecfed26be3c0ad2ceffa5eee17533" From dba43e248baa0a536f6b8364dd5db49eb15f3cfa Mon Sep 17 00:00:00 2001 From: xmflsct Date: Tue, 9 Aug 2022 00:49:50 +0200 Subject: [PATCH 4/5] Fixed #358 --- src/components/Timeline/Shared/HeaderDefault.android.tsx | 1 + src/components/Timeline/Shared/HeaderNotification.android.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/src/components/Timeline/Shared/HeaderDefault.android.tsx b/src/components/Timeline/Shared/HeaderDefault.android.tsx index 24051752..be6785a0 100644 --- a/src/components/Timeline/Shared/HeaderDefault.android.tsx +++ b/src/components/Timeline/Shared/HeaderDefault.android.tsx @@ -109,6 +109,7 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => { size={StyleConstants.Font.Size.L} /> } + style={{ width: '100%', height: '100%' }} /> ) : null} diff --git a/src/components/Timeline/Shared/HeaderNotification.android.tsx b/src/components/Timeline/Shared/HeaderNotification.android.tsx index b2331dcd..97fab6d8 100644 --- a/src/components/Timeline/Shared/HeaderNotification.android.tsx +++ b/src/components/Timeline/Shared/HeaderNotification.android.tsx @@ -91,6 +91,7 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => { size={StyleConstants.Font.Size.L} /> } + style={{ width: '100%', height: '100%' }} /> } /> From a2721d21c00fb3a4dcd501679f7b8f772000cf56 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Wed, 10 Aug 2022 00:46:43 +0200 Subject: [PATCH 5/5] Fixed #359 --- src/components/Parse/HTML.tsx | 63 +++++++++++++++-------- src/components/Timeline/Default.tsx | 1 + src/components/Timeline/Notifications.tsx | 1 + src/i18n/en/components/parse.json | 8 +-- src/i18n/en/components/timeline.json | 2 +- 5 files changed, 49 insertions(+), 26 deletions(-) diff --git a/src/components/Parse/HTML.tsx b/src/components/Parse/HTML.tsx index 51aab5c7..5a112634 100644 --- a/src/components/Parse/HTML.tsx +++ b/src/components/Parse/HTML.tsx @@ -249,37 +249,23 @@ const ParseHTML = React.memo( ({ children }: any) => { const { t } = useTranslation('componentParse') - const [expandAllow, setExpandAllow] = useState(false) + const [totalLines, setTotalLines] = useState() const [expanded, setExpanded] = useState(highlighted) return ( - { - if ( - numberOfLines === 1 || - nativeEvent.lines.length >= numberOfLines + 5 - ) { - setExpandAllow(true) - } - }} - numberOfLines={ - expandAllow ? (expanded ? 999 : numberOfLines) : undefined - } - selectable={selectable} - /> - {expandAllow ? ( + {typeof totalLines === 'number' ? ( { - analytics('status_readmore', { allow: expandAllow, expanded }) + analytics('status_readmore', { totalLines, expanded }) layoutAnimation() setExpanded(!expanded) }} style={{ + flexDirection: 'row', justifyContent: 'center', - marginTop: expanded ? 0 : -adaptedLineheight, + alignItems: 'center', minHeight: 44, backgroundColor: colors.backgroundDefault }} @@ -288,14 +274,47 @@ const ParseHTML = React.memo( style={{ textAlign: 'center', ...StyleConstants.FontStyle.S, - color: colors.primaryDefault + color: colors.primaryDefault, + marginRight: StyleConstants.Spacing.S }} children={t(`HTML.expanded.${expanded.toString()}`, { - hint: expandHint + hint: expandHint, + totalLines: + numberOfLines > 1 && typeof totalLines === 'number' + ? t('HTML.totalLines', { count: totalLines }) + : '' })} /> + ) : null} + { + if ( + numberOfLines === 1 || + nativeEvent.lines.length >= numberOfLines + 5 + ) { + setTotalLines(nativeEvent.lines.length) + } + }} + style={{ + height: numberOfLines === 1 && !expanded ? 0 : undefined + }} + numberOfLines={ + typeof totalLines === 'number' + ? expanded + ? 999 + : numberOfLines + : undefined + } + selectable={selectable} + /> ) }, diff --git a/src/components/Timeline/Default.tsx b/src/components/Timeline/Default.tsx index c2cd3427..ed3a344f 100644 --- a/src/components/Timeline/Default.tsx +++ b/src/components/Timeline/Default.tsx @@ -5,6 +5,7 @@ import TimelineAttachment from '@components/Timeline/Shared/Attachment' import TimelineAvatar from '@components/Timeline/Shared/Avatar' import TimelineCard from '@components/Timeline/Shared/Card' import TimelineContent from '@components/Timeline/Shared/Content' +// @ts-ignore import TimelineHeaderDefault from '@components/Timeline/Shared/HeaderDefault' import TimelinePoll from '@components/Timeline/Shared/Poll' import { useNavigation } from '@react-navigation/native' diff --git a/src/components/Timeline/Notifications.tsx b/src/components/Timeline/Notifications.tsx index dfa1ab96..4559eee7 100644 --- a/src/components/Timeline/Notifications.tsx +++ b/src/components/Timeline/Notifications.tsx @@ -5,6 +5,7 @@ import TimelineAttachment from '@components/Timeline/Shared/Attachment' import TimelineAvatar from '@components/Timeline/Shared/Avatar' import TimelineCard from '@components/Timeline/Shared/Card' import TimelineContent from '@components/Timeline/Shared/Content' +// @ts-ignore import TimelineHeaderNotification from '@components/Timeline/Shared/HeaderNotification' import TimelinePoll from '@components/Timeline/Shared/Poll' import { useNavigation } from '@react-navigation/native' diff --git a/src/i18n/en/components/parse.json b/src/i18n/en/components/parse.json index 9932ccc2..7d27c1d0 100644 --- a/src/i18n/en/components/parse.json +++ b/src/i18n/en/components/parse.json @@ -1,9 +1,11 @@ { "HTML": { + "accessibilityHint": "Tap to expand or collapse content", "expanded": { - "true": "Fold {{hint}}", - "false": "Expand {{hint}}" + "true": "{{hint}}{{totalLines}}", + "false": "{{hint}}{{totalLines}}" }, - "defaultHint": "article" + "totalLines": " ({{count}} lines)", + "defaultHint": "Long toot" } } \ No newline at end of file diff --git a/src/i18n/en/components/timeline.json b/src/i18n/en/components/timeline.json index f622a093..066eade6 100644 --- a/src/i18n/en/components/timeline.json +++ b/src/i18n/en/components/timeline.json @@ -81,7 +81,7 @@ "accessibilityHint": "Tap to go to {{name}}'s page" }, "content": { - "expandHint": "hidden content" + "expandHint": "Hidden content" }, "filtered": "Filtered", "fullConversation": "Read conversations",