7
7
8
8
package com.facebook.fbreact.specs
9
9
10
+ import android.net.Uri
10
11
import android.os.Build
11
12
import android.util.DisplayMetrics
12
13
import android.widget.Toast
14
+ import androidx.activity.ComponentActivity
15
+ import androidx.activity.result.contract.ActivityResultContracts
13
16
import com.facebook.proguard.annotations.DoNotStrip
14
17
import com.facebook.react.bridge.Arguments
15
18
import com.facebook.react.bridge.Callback
@@ -24,6 +27,7 @@ import com.facebook.react.bridge.WritableNativeMap
24
27
import com.facebook.react.module.annotations.ReactModule
25
28
import com.facebook.react.turbomodule.core.interfaces.BindingsInstallerHolder
26
29
import com.facebook.react.turbomodule.core.interfaces.TurboModuleWithJSIBindings
30
+ import java.util.UUID
27
31
28
32
@DoNotStrip
29
33
@ReactModule(name = SampleTurboModule .NAME )
@@ -172,7 +176,7 @@ public class SampleTurboModule(private val context: ReactApplicationContext) :
172
176
173
177
@DoNotStrip
174
178
@Suppress(" unused" )
175
- override fun getValueWithPromise (error : Boolean , promise : Promise ? ) {
179
+ override fun getValueWithPromise (error : Boolean , promise : Promise ) {
176
180
if (error) {
177
181
promise?.reject(
178
182
" code 1" , " intentional promise rejection" , Throwable (" promise intentionally rejected" ))
@@ -189,13 +193,13 @@ public class SampleTurboModule(private val context: ReactApplicationContext) :
189
193
190
194
@DoNotStrip
191
195
@Suppress(" unused" )
192
- override fun getObjectThrows (arg : ReadableMap ? ): WritableMap ? {
196
+ override fun getObjectThrows (arg : ReadableMap ): WritableMap {
193
197
error(" Intentional exception from JVM getObjectThrows with $arg " )
194
198
}
195
199
196
200
@DoNotStrip
197
201
@Suppress(" unused" )
198
- override fun promiseThrows (promise : Promise ? ) {
202
+ override fun promiseThrows (promise : Promise ) {
199
203
error(" Intentional exception from JVM promiseThrows" )
200
204
}
201
205
@@ -207,17 +211,40 @@ public class SampleTurboModule(private val context: ReactApplicationContext) :
207
211
208
212
@DoNotStrip
209
213
@Suppress(" unused" )
210
- override fun getObjectAssert (arg : ReadableMap ? ): WritableMap ? {
214
+ override fun getObjectAssert (arg : ReadableMap ): WritableMap ? {
211
215
assert (false ) { " Intentional assert from JVM getObjectAssert with $arg " }
212
216
return null
213
217
}
214
218
215
219
@DoNotStrip
216
220
@Suppress(" unused" )
217
- override fun promiseAssert (promise : Promise ? ) {
221
+ override fun promiseAssert (promise : Promise ) {
218
222
assert (false ) { " Intentional assert from JVM promiseAssert" }
219
223
}
220
224
225
+ @DoNotStrip
226
+ @Suppress(" unused" )
227
+ override fun getImageUrl (promise : Promise ) {
228
+ val activity = context.getCurrentActivity() as ? ComponentActivity
229
+ if (activity != null ) {
230
+ val key = UUID .randomUUID().toString()
231
+ activity.activityResultRegistry
232
+ .register(
233
+ key,
234
+ ActivityResultContracts .GetContent (),
235
+ { uri: Uri ? ->
236
+ if (uri != null ) {
237
+ promise.resolve(uri.toString())
238
+ } else {
239
+ promise.resolve(null )
240
+ }
241
+ })
242
+ .launch(" image/*" )
243
+ } else {
244
+ promise.reject(" error" , " Unable to obtain an image uri without current activity" )
245
+ }
246
+ }
247
+
221
248
private fun log (method : String , input : Any? , output : Any? ) {
222
249
toast?.cancel()
223
250
val message = StringBuilder (" Method :" )
0 commit comments