-
Notifications
You must be signed in to change notification settings - Fork 77
Expand file tree
/
Copy pathETInstaller.kt
More file actions
66 lines (56 loc) · 1.88 KB
/
ETInstaller.kt
File metadata and controls
66 lines (56 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.swmansion.rnexecutorch
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactMethod
import com.facebook.react.common.annotations.FrameworkAPI
import com.facebook.react.module.annotations.ReactModule
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl
import java.io.InputStream
import java.net.URL
@OptIn(FrameworkAPI::class)
@ReactModule(name = ETInstaller.NAME)
class ETInstaller(
reactContext: ReactApplicationContext,
) : NativeETInstallerSpec(reactContext) {
companion object {
const val NAME = NativeETInstallerSpec.NAME
@JvmStatic
@DoNotStrip
@Throws(Exception::class)
fun fetchByteDataFromUrl(source: String): ByteArray? {
try {
val url = URL(source)
val connection = url.openConnection()
connection.connect()
val inputStream: InputStream = connection.getInputStream()
val data = inputStream.readBytes()
inputStream.close()
return data
} catch (exception: Throwable) {
return null
}
}
}
private val mHybridData: HybridData
external fun initHybrid(
jsContext: Long,
callInvoker: CallInvokerHolderImpl,
): HybridData
private external fun injectJSIBindings()
init {
try {
System.loadLibrary("executorch")
System.loadLibrary("react-native-executorch")
val jsCallInvokerHolder = reactContext.jsCallInvokerHolder as CallInvokerHolderImpl
mHybridData = initHybrid(reactContext.javaScriptContextHolder!!.get(), jsCallInvokerHolder)
} catch (exception: UnsatisfiedLinkError) {
throw RuntimeException("Could not load native module ETInstaller", exception)
}
}
@ReactMethod(isBlockingSynchronousMethod = true)
override fun install(): Boolean {
injectJSIBindings()
return true
}
}