@@ -8,6 +8,8 @@ import android.util.Log
88import app.rive.runtime.kotlin.core.*
99import com.margelo.nitro.NitroModules
1010import kotlinx.coroutines.*
11+ import kotlinx.coroutines.CompletableDeferred
12+ import kotlinx.coroutines.Deferred
1113import java.io.File as JavaFile
1214import java.io.IOException
1315import java.net.URI
@@ -61,9 +63,10 @@ class ReferencedAssetLoader {
6163 }
6264 }
6365
64- private fun downloadUrlAsset (url : String , listener : (ByteArray ) -> Unit ) {
66+ private fun downloadUrlAsset (url : String , listener : (ByteArray? ) -> Unit ) {
6567 if (! isValidUrl(url)) {
6668 logError(" Invalid URL: $url " )
69+ listener(null )
6770 return
6871 }
6972
@@ -86,6 +89,9 @@ class ReferencedAssetLoader {
8689 }
8790 else -> {
8891 logError(" Unsupported URL scheme: ${uri.scheme} " )
92+ withContext(Dispatchers .Main ) {
93+ listener(null )
94+ }
8995 return @launch
9096 }
9197 }
@@ -95,14 +101,17 @@ class ReferencedAssetLoader {
95101 }
96102 } catch (e: Exception ) {
97103 logError(" Unable to download asset from URL: $url - ${e.message} " )
104+ withContext(Dispatchers .Main ) {
105+ listener(null )
106+ }
98107 }
99108 }
100109 }
101110
102111 private fun loadResourceAsset (
103112 sourceAssetId : String ,
104113 context : Context ,
105- listener : (ByteArray ) -> Unit
114+ listener : (ByteArray? ) -> Unit
106115 ) {
107116 scope.launch {
108117 try {
@@ -124,13 +133,25 @@ class ReferencedAssetLoader {
124133 }
125134 } else {
126135 logError(" Resource not found: $sourceAssetId " )
136+ withContext(Dispatchers .Main ) {
137+ listener(null )
138+ }
127139 }
128140 } catch (e: IOException ) {
129141 logError(" IO Exception while reading resource: $sourceAssetId - ${e.message} " )
142+ withContext(Dispatchers .Main ) {
143+ listener(null )
144+ }
130145 } catch (e: Resources .NotFoundException ) {
131146 logError(" Resource not found: $sourceAssetId - ${e.message} " )
147+ withContext(Dispatchers .Main ) {
148+ listener(null )
149+ }
132150 } catch (e: Exception ) {
133151 logError(" Unexpected error while processing resource: $sourceAssetId - ${e.message} " )
152+ withContext(Dispatchers .Main ) {
153+ listener(null )
154+ }
134155 }
135156 }
136157 }
@@ -139,20 +160,21 @@ class ReferencedAssetLoader {
139160 sourceAsset : String ,
140161 path : String? ,
141162 context : Context ,
142- listener : (ByteArray ) -> Unit
163+ listener : (ByteArray? ) -> Unit
143164 ) {
144165 scope.launch {
145166 try {
146167 val fullPath = if (path == null ) sourceAsset else constructFilePath(sourceAsset, path)
147168 val bytes = readAssetBytes(context, fullPath)
148169
149- if (bytes != null ) {
150- withContext(Dispatchers .Main ) {
151- listener(bytes)
152- }
170+ withContext(Dispatchers .Main ) {
171+ listener(bytes)
153172 }
154173 } catch (e: Exception ) {
155174 logError(" Error loading bundled asset: $sourceAsset - ${e.message} " )
175+ withContext(Dispatchers .Main ) {
176+ listener(null )
177+ }
156178 }
157179 }
158180 }
@@ -165,9 +187,13 @@ class ReferencedAssetLoader {
165187 }
166188 }
167189
168- private fun loadAsset (assetData : ResolvedReferencedAsset , asset : FileAsset , context : Context ) {
169- val listener: (ByteArray ) -> Unit = { bytes ->
170- processAssetBytes(bytes, asset)
190+ private fun loadAsset (assetData : ResolvedReferencedAsset , asset : FileAsset , context : Context ): Deferred <Unit > {
191+ val deferred = CompletableDeferred <Unit >()
192+ val listener: (ByteArray? ) -> Unit = { bytes ->
193+ if (bytes != null ) {
194+ processAssetBytes(bytes, asset)
195+ }
196+ deferred.complete(Unit )
171197 }
172198
173199 when {
@@ -180,11 +206,16 @@ class ReferencedAssetLoader {
180206 assetData.sourceAsset != null -> {
181207 loadBundledAsset(assetData.sourceAsset, assetData.path, context, listener)
182208 }
209+ else -> {
210+ deferred.complete(Unit )
211+ }
183212 }
213+
214+ return deferred
184215 }
185216
186- fun updateAsset (assetData : ResolvedReferencedAsset , asset : FileAsset , context : Context ) {
187- loadAsset(assetData, asset, context)
217+ fun updateAsset (assetData : ResolvedReferencedAsset , asset : FileAsset , context : Context ): Deferred < Unit > {
218+ return loadAsset(assetData, asset, context)
188219 }
189220
190221 fun createCustomLoader (
0 commit comments