package upgrades
This commit is contained in:
@@ -88,7 +88,7 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||||
def GLIDE_VERSION = "4.13.2"
|
def GLIDE_VERSION = "4.16.0"
|
||||||
|
|
||||||
implementation project(':expo-modules-core')
|
implementation project(':expo-modules-core')
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
|
||||||
|
|||||||
+61
-61
@@ -5,6 +5,7 @@ import android.graphics.Color
|
|||||||
import android.graphics.drawable.Animatable
|
import android.graphics.drawable.Animatable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
|
import com.bumptech.glide.load.DataSource
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import com.bumptech.glide.load.engine.GlideException
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
import com.bumptech.glide.request.RequestListener
|
import com.bumptech.glide.request.RequestListener
|
||||||
@@ -15,8 +16,8 @@ import expo.modules.kotlin.viewevent.EventDispatcher
|
|||||||
import expo.modules.kotlin.views.ExpoView
|
import expo.modules.kotlin.views.ExpoView
|
||||||
|
|
||||||
class GifView(
|
class GifView(
|
||||||
context: Context,
|
context: Context,
|
||||||
appContext: AppContext,
|
appContext: AppContext,
|
||||||
) : ExpoView(context, appContext) {
|
) : ExpoView(context, appContext) {
|
||||||
// Events
|
// Events
|
||||||
private val onPlayerStateChange by EventDispatcher()
|
private val onPlayerStateChange by EventDispatcher()
|
||||||
@@ -81,66 +82,65 @@ class GifView(
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.webpRequest =
|
this.webpRequest =
|
||||||
glide
|
glide.load(source)
|
||||||
.load(source)
|
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
.skipMemoryCache(false)
|
||||||
.skipMemoryCache(false)
|
.listener(
|
||||||
.listener(
|
object : RequestListener<Drawable> {
|
||||||
object : RequestListener<Drawable> {
|
override fun onResourceReady(
|
||||||
override fun onResourceReady(
|
resource: Drawable,
|
||||||
resource: Drawable?,
|
model: Any,
|
||||||
model: Any?,
|
target: Target<Drawable>?,
|
||||||
target: Target<Drawable>?,
|
dataSource: DataSource,
|
||||||
dataSource: com.bumptech.glide.load.DataSource?,
|
isFirstResource: Boolean
|
||||||
isFirstResource: Boolean,
|
): Boolean {
|
||||||
): Boolean {
|
placeholderRequest?.let { glide.clear(it) }
|
||||||
if (placeholderRequest != null) {
|
return false
|
||||||
glide.clear(placeholderRequest)
|
}
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean,
|
isFirstResource: Boolean
|
||||||
): Boolean = true
|
): Boolean = true
|
||||||
},
|
}
|
||||||
).into(this.imageView)
|
)
|
||||||
|
.into(this.imageView)
|
||||||
|
|
||||||
if (this.imageView.drawable == null || this.imageView.drawable !is Animatable) {
|
if (this.imageView.drawable == null || this.imageView.drawable !is Animatable) {
|
||||||
this.placeholderRequest =
|
this.placeholderRequest =
|
||||||
glide
|
glide.load(placeholderSource)
|
||||||
.load(placeholderSource)
|
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
// Let's not bloat the memory cache with placeholders
|
||||||
// Let's not bloat the memory cache with placeholders
|
.skipMemoryCache(true)
|
||||||
.skipMemoryCache(true)
|
.listener(
|
||||||
.listener(
|
object : RequestListener<Drawable> {
|
||||||
object : RequestListener<Drawable> {
|
override fun onResourceReady(
|
||||||
override fun onResourceReady(
|
resource: Drawable,
|
||||||
resource: Drawable?,
|
model: Any,
|
||||||
model: Any?,
|
target: Target<Drawable>?,
|
||||||
target: Target<Drawable>?,
|
dataSource: DataSource,
|
||||||
dataSource: com.bumptech.glide.load.DataSource?,
|
isFirstResource: Boolean
|
||||||
isFirstResource: Boolean,
|
): Boolean {
|
||||||
): Boolean {
|
// Incase this request finishes after the webp, let's just not set
|
||||||
// Incase this request finishes after the webp, let's just not set
|
// the drawable. This shouldn't happen because the request should
|
||||||
// the drawable. This shouldn't happen because the request should get cancelled
|
// get cancelled
|
||||||
if (imageView.drawable == null) {
|
if (imageView.drawable == null) {
|
||||||
imageView.setImageDrawable(resource)
|
imageView.setImageDrawable(resource)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoadFailed(
|
override fun onLoadFailed(
|
||||||
e: GlideException?,
|
e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
target: Target<Drawable>?,
|
target: Target<Drawable>,
|
||||||
isFirstResource: Boolean,
|
isFirstResource: Boolean
|
||||||
): Boolean = true
|
): Boolean = true
|
||||||
},
|
},
|
||||||
).submit()
|
)
|
||||||
|
.submit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,10 +174,10 @@ class GifView(
|
|||||||
|
|
||||||
fun firePlayerStateChange() {
|
fun firePlayerStateChange() {
|
||||||
onPlayerStateChange(
|
onPlayerStateChange(
|
||||||
mapOf(
|
mapOf(
|
||||||
"isPlaying" to this.isPlaying,
|
"isPlaying" to this.isPlaying,
|
||||||
"isLoaded" to this.isLoaded,
|
"isLoaded" to this.isLoaded,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+57
-57
@@ -119,34 +119,33 @@
|
|||||||
"emoji-mart": "^5.5.2",
|
"emoji-mart": "^5.5.2",
|
||||||
"emoji-regex": "^10.4.0",
|
"emoji-regex": "^10.4.0",
|
||||||
"eventemitter3": "^5.0.1",
|
"eventemitter3": "^5.0.1",
|
||||||
"expo": "^51.0.8",
|
"expo": "^52.0.0",
|
||||||
"expo-application": "^5.9.1",
|
"expo-application": "^6.0.0",
|
||||||
"expo-blur": "^13.0.2",
|
"expo-blur": "^14.0.0",
|
||||||
"expo-build-properties": "^0.12.1",
|
"expo-build-properties": "^0.13.0",
|
||||||
"expo-camera": "~15.0.9",
|
"expo-camera": "~16.0.2",
|
||||||
"expo-clipboard": "^6.0.3",
|
"expo-clipboard": "^7.0.0",
|
||||||
"expo-dev-client": "^4.0.14",
|
"expo-dev-client": "^5.0.0-preview.9",
|
||||||
"expo-device": "~6.0.2",
|
"expo-device": "~7.0.0",
|
||||||
"expo-file-system": "^17.0.1",
|
"expo-file-system": "^18.0.0",
|
||||||
"expo-font": "~12.0.10",
|
"expo-font": "~13.0.0",
|
||||||
"expo-haptics": "^13.0.1",
|
"expo-haptics": "^14.0.0",
|
||||||
"expo-image": "~1.12.9",
|
"expo-image": "~2.0.0-preview.1",
|
||||||
"expo-image-manipulator": "^12.0.5",
|
"expo-image-manipulator": "^13.0.4",
|
||||||
"expo-image-picker": "~15.0.5",
|
"expo-image-picker": "~16.0.0",
|
||||||
"expo-linear-gradient": "^13.0.2",
|
"expo-linear-gradient": "^14.0.0",
|
||||||
"expo-linking": "^6.3.1",
|
"expo-linking": "^7.0.1",
|
||||||
"expo-localization": "~15.0.3",
|
"expo-localization": "~16.0.0",
|
||||||
"expo-media-library": "~16.0.3",
|
"expo-media-library": "~17.0.1",
|
||||||
"expo-navigation-bar": "~3.0.4",
|
"expo-navigation-bar": "~4.0.1",
|
||||||
"expo-notifications": "~0.28.7",
|
"expo-notifications": "~0.29.5",
|
||||||
"expo-sharing": "^12.0.1",
|
"expo-sharing": "^13.0.0",
|
||||||
"expo-splash-screen": "~0.27.4",
|
"expo-splash-screen": "~0.27.6",
|
||||||
"expo-status-bar": "~1.12.1",
|
"expo-status-bar": "~2.0.0",
|
||||||
"expo-system-ui": "^3.0.4",
|
"expo-system-ui": "^3.0.4",
|
||||||
"expo-task-manager": "~11.8.1",
|
"expo-task-manager": "~12.0.1",
|
||||||
"expo-updates": "~0.25.14",
|
"expo-updates": "~0.26.4",
|
||||||
"expo-web-browser": "~13.0.3",
|
"expo-web-browser": "~14.0.0",
|
||||||
"fast-text-encoding": "^1.0.6",
|
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
"hls.js": "^1.5.11",
|
"hls.js": "^1.5.11",
|
||||||
"js-sha256": "^0.9.0",
|
"js-sha256": "^0.9.0",
|
||||||
@@ -168,32 +167,32 @@
|
|||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-image-crop": "^11.0.7",
|
"react-image-crop": "^11.0.7",
|
||||||
"react-keyed-flatten-children": "^3.0.0",
|
"react-keyed-flatten-children": "^3.0.0",
|
||||||
"react-native": "0.74.1",
|
"react-native": "0.76.1",
|
||||||
"react-native-compressor": "^1.8.24",
|
"react-native-compressor": "1.9.0",
|
||||||
"react-native-date-picker": "^4.4.2",
|
"react-native-date-picker": "^5.0.7",
|
||||||
"react-native-drawer-layout": "^4.0.1",
|
"react-native-drawer-layout": "^4.0.1",
|
||||||
"react-native-gesture-handler": "2.20.0",
|
"react-native-gesture-handler": "2.20.2",
|
||||||
"react-native-get-random-values": "~1.11.0",
|
"react-native-get-random-values": "~1.11.0",
|
||||||
"react-native-image-crop-picker": "0.41.2",
|
"react-native-image-crop-picker": "0.41.4",
|
||||||
"react-native-ios-context-menu": "^1.15.3",
|
"react-native-ios-context-menu": "^1.15.3",
|
||||||
"react-native-keyboard-controller": "^1.14.0",
|
"react-native-keyboard-controller": "^1.14.4",
|
||||||
"react-native-mmkv": "^2.12.2",
|
"react-native-mmkv": "^2.12.2",
|
||||||
"react-native-pager-view": "6.2.3",
|
"react-native-pager-view": "6.5.0",
|
||||||
"react-native-picker-select": "^9.1.3",
|
"react-native-picker-select": "^9.3.1",
|
||||||
"react-native-progress": "bluesky-social/react-native-progress",
|
"react-native-progress": "bluesky-social/react-native-progress",
|
||||||
"react-native-qrcode-styled": "^0.3.1",
|
"react-native-qrcode-styled": "^0.3.2",
|
||||||
"react-native-reanimated": "^3.16.1",
|
"react-native-reanimated": "^3.16.1",
|
||||||
"react-native-root-siblings": "^4.1.1",
|
"react-native-root-siblings": "^4.1.1",
|
||||||
"react-native-safe-area-context": "4.10.1",
|
"react-native-safe-area-context": "4.14.0",
|
||||||
"react-native-screens": "~3.31.1",
|
"react-native-screens": "~3.31.1",
|
||||||
"react-native-svg": "^15.3.0",
|
"react-native-svg": "^15.8.0",
|
||||||
"react-native-uitextview": "^1.3.0",
|
"react-native-uitextview": "^1.4.0",
|
||||||
"react-native-url-polyfill": "^1.3.0",
|
"react-native-url-polyfill": "^1.3.0",
|
||||||
"react-native-uuid": "^2.0.2",
|
"react-native-uuid": "^2.0.2",
|
||||||
"react-native-view-shot": "^3.8.0",
|
"react-native-view-shot": "^3.8.0",
|
||||||
"react-native-web": "~0.19.11",
|
"react-native-web": "~0.19.13",
|
||||||
"react-native-web-webview": "^1.0.2",
|
"react-native-web-webview": "^1.0.2",
|
||||||
"react-native-webview": "13.10.2",
|
"react-native-webview": "13.12.3",
|
||||||
"react-responsive": "^9.0.2",
|
"react-responsive": "^9.0.2",
|
||||||
"react-textarea-autosize": "^8.5.3",
|
"react-textarea-autosize": "^8.5.3",
|
||||||
"rn-fetch-blob": "^0.12.0",
|
"rn-fetch-blob": "^0.12.0",
|
||||||
@@ -206,19 +205,19 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@atproto/dev-env": "^0.3.64",
|
"@atproto/dev-env": "^0.3.64",
|
||||||
"@babel/core": "^7.23.2",
|
"@babel/core": "^7.26.0",
|
||||||
"@babel/preset-env": "^7.20.0",
|
"@babel/preset-env": "^7.26.0",
|
||||||
"@babel/runtime": "^7.20.0",
|
"@babel/runtime": "^7.26.0",
|
||||||
"@did-plc/server": "^0.0.1",
|
"@did-plc/server": "^0.0.1",
|
||||||
"@expo/config-plugins": "8.0.4",
|
"@expo/config-plugins": "8.0.10",
|
||||||
"@expo/prebuild-config": "6.7.0",
|
"@expo/prebuild-config": "8.0.10",
|
||||||
"@lingui/cli": "^4.5.0",
|
"@lingui/cli": "^4.5.0",
|
||||||
"@lingui/macro": "^4.5.0",
|
"@lingui/macro": "^4.5.0",
|
||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
|
||||||
"@react-native/eslint-config": "^0.76.2",
|
"@react-native/eslint-config": "^0.76.2",
|
||||||
"@react-native/typescript-config": "^0.74.1",
|
"@react-native/typescript-config": "^0.76.1",
|
||||||
"@testing-library/jest-native": "^5.4.1",
|
"@testing-library/jest-native": "^5.4.3",
|
||||||
"@testing-library/react-native": "^11.5.2",
|
"@testing-library/react-native": "^12.8.1",
|
||||||
"@types/jest": "^29.4.0",
|
"@types/jest": "^29.4.0",
|
||||||
"@types/lodash.chunk": "^4.2.7",
|
"@types/lodash.chunk": "^4.2.7",
|
||||||
"@types/lodash.debounce": "^4.0.7",
|
"@types/lodash.debounce": "^4.0.7",
|
||||||
@@ -232,9 +231,9 @@
|
|||||||
"@typescript-eslint/parser": "^7.18.0",
|
"@typescript-eslint/parser": "^7.18.0",
|
||||||
"babel-jest": "^29.7.0",
|
"babel-jest": "^29.7.0",
|
||||||
"babel-plugin-macros": "^3.1.0",
|
"babel-plugin-macros": "^3.1.0",
|
||||||
"babel-plugin-module-resolver": "^5.0.0",
|
"babel-plugin-module-resolver": "^5.0.2",
|
||||||
"babel-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110",
|
"babel-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110",
|
||||||
"babel-preset-expo": "^10.0.0",
|
"babel-preset-expo": "^11.0.15",
|
||||||
"eslint": "^8.19.0",
|
"eslint": "^8.19.0",
|
||||||
"eslint-plugin-bsky-internal": "link:./eslint",
|
"eslint-plugin-bsky-internal": "link:./eslint",
|
||||||
"eslint-plugin-ft-flow": "^2.0.3",
|
"eslint-plugin-ft-flow": "^2.0.3",
|
||||||
@@ -247,12 +246,12 @@
|
|||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
"is-ci": "^3.0.1",
|
"is-ci": "^3.0.1",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-expo": "^50.0.1",
|
"jest-expo": "^52.0.0-preview.4",
|
||||||
"jest-junit": "^15.0.0",
|
"jest-junit": "^16.0.0",
|
||||||
"lint-staged": "^13.2.3",
|
"lint-staged": "^13.2.3",
|
||||||
"metro-react-native-babel-preset": "^0.74.1",
|
"metro-react-native-babel-preset": "^0.76.9",
|
||||||
"prettier": "^2.8.3",
|
"prettier": "^2.8.3",
|
||||||
"react-native-dotenv": "^3.3.1",
|
"react-native-dotenv": "^3.4.11",
|
||||||
"react-refresh": "^0.14.0",
|
"react-refresh": "^0.14.0",
|
||||||
"react-test-renderer": "18.2.0",
|
"react-test-renderer": "18.2.0",
|
||||||
"svgo": "^3.3.2",
|
"svgo": "^3.3.2",
|
||||||
@@ -261,8 +260,9 @@
|
|||||||
"webpack-bundle-analyzer": "^4.10.1"
|
"webpack-bundle-analyzer": "^4.10.1"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
|
"@react-native/babel-preset": "0.76.1",
|
||||||
|
"@react-native/normalize-colors": "0.76.1",
|
||||||
"@radix-ui/react-focus-scope": "1.1.0",
|
"@radix-ui/react-focus-scope": "1.1.0",
|
||||||
"@react-native/babel-preset": "0.74.1",
|
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"**/expo-constants": "16.0.1",
|
"**/expo-constants": "16.0.1",
|
||||||
"**/expo-device": "6.0.2",
|
"**/expo-device": "6.0.2",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
|
import * as Clipboard from 'expo-clipboard'
|
||||||
import {Image as ExpoImage} from 'expo-image'
|
import {Image as ExpoImage} from 'expo-image'
|
||||||
import {
|
import {
|
||||||
ImagePickerOptions,
|
ImagePickerOptions,
|
||||||
@@ -9,6 +10,7 @@ import {
|
|||||||
import {msg, Trans} from '@lingui/macro'
|
import {msg, Trans} from '@lingui/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
|
|
||||||
|
import {uploadBlob} from '#/lib/api'
|
||||||
import {usePhotoLibraryPermission} from '#/lib/hooks/usePermissions'
|
import {usePhotoLibraryPermission} from '#/lib/hooks/usePermissions'
|
||||||
import {compressIfNeeded} from '#/lib/media/manip'
|
import {compressIfNeeded} from '#/lib/media/manip'
|
||||||
import {openCropper} from '#/lib/media/picker'
|
import {openCropper} from '#/lib/media/picker'
|
||||||
@@ -16,6 +18,7 @@ import {getDataUriSize} from '#/lib/media/util'
|
|||||||
import {useRequestNotificationsPermission} from '#/lib/notifications/notifications'
|
import {useRequestNotificationsPermission} from '#/lib/notifications/notifications'
|
||||||
import {logEvent, useGate} from '#/lib/statsig/statsig'
|
import {logEvent, useGate} from '#/lib/statsig/statsig'
|
||||||
import {isNative, isWeb} from '#/platform/detection'
|
import {isNative, isWeb} from '#/platform/detection'
|
||||||
|
import {useAgent} from '#/state/session'
|
||||||
import {
|
import {
|
||||||
DescriptionText,
|
DescriptionText,
|
||||||
OnboardingControls,
|
OnboardingControls,
|
||||||
@@ -156,7 +159,38 @@ export function StepProfile() {
|
|||||||
logEvent('onboarding:profile:nextPressed', {})
|
logEvent('onboarding:profile:nextPressed', {})
|
||||||
}, [avatar, dispatch])
|
}, [avatar, dispatch])
|
||||||
|
|
||||||
const onDoneCreating = React.useCallback(() => {
|
const agent = useAgent()
|
||||||
|
|
||||||
|
const onDoneCreating = React.useCallback(async () => {
|
||||||
|
const imageUri = await canvasRef.current?.capture()
|
||||||
|
console.log(imageUri)
|
||||||
|
// copy to clipbaord
|
||||||
|
await Clipboard.setStringAsync(imageUri ?? '')
|
||||||
|
|
||||||
|
const blobPromise = await uploadBlob(agent, imageUri ?? '', 'image/jpeg')
|
||||||
|
|
||||||
|
const blob = blobPromise.data.blob
|
||||||
|
|
||||||
|
const command = `go run ./cmd/doppel addDefaultAvi --did ${agent.did} --cid ${blob.ref}`
|
||||||
|
|
||||||
|
await agent.upsertProfile(async existing => {
|
||||||
|
existing = existing ?? {}
|
||||||
|
if (blobPromise) {
|
||||||
|
const res = await blobPromise
|
||||||
|
if (res.data.blob) {
|
||||||
|
existing.avatar = res.data.blob
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
existing.displayName = ''
|
||||||
|
return existing
|
||||||
|
})
|
||||||
|
|
||||||
|
await Clipboard.setStringAsync(command)
|
||||||
|
console.log(command)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
setAvatar(prev => ({
|
setAvatar(prev => ({
|
||||||
...prev,
|
...prev,
|
||||||
image: undefined,
|
image: undefined,
|
||||||
|
|||||||
Reference in New Issue
Block a user