Skip to content

Commit 21735bc

Browse files
committed
chore: add reset + fix: invoke play, pause,
1 parent 1b52b51 commit 21735bc

15 files changed

Lines changed: 216 additions & 65 deletions

android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,12 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
112112
return HybridViewModelInstance(viewModelInstance)
113113
}
114114

115-
override fun play() = executeOnUiThread { view.play() }
115+
override fun play() = asyncExecuteOnUiThread { view.play() }
116+
117+
override fun pause() = asyncExecuteOnUiThread { view.pause() }
118+
119+
override fun reset() = asyncExecuteOnUiThread { view.reset() }
116120

117-
override fun pause() = executeOnUiThread { view.pause() }
118121

119122
override fun onEventListener(onEvent: (event: UnifiedRiveEvent) -> Unit) =
120123
executeOnUiThread { view.addEventListener(onEvent) }
@@ -186,6 +189,20 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
186189
}
187190
}
188191

192+
private fun asyncExecuteOnUiThread(action: () -> Unit): Promise<Unit> {
193+
return Promise.async {
194+
context.currentActivity?.runOnUiThread() {
195+
try {
196+
action()
197+
} catch (e: Exception) {
198+
throw Error(e.message) // TODO: Correctly handling errors (https://nitro.margelo.com/docs/errors)
199+
} catch (e: Error) {
200+
throw Error(e.message)
201+
}
202+
}
203+
}
204+
205+
}
189206
private fun executeOnUiThread(action: () -> Unit) {
190207
context.currentActivity?.runOnUiThread() {
191208
try {

android/src/main/java/com/rive/RiveReactNativeView.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,10 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
187187

188188
fun play() = riveAnimationView?.play()
189189

190-
fun pause() = riveAnimationView?.pause();
190+
fun pause() = riveAnimationView?.pause()
191+
192+
fun reset() = riveAnimationView?.reset()
193+
191194

192195
fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
193196
val eventListener = object : RiveFileController.RiveEventListener {

ios/HybridRiveView.swift

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,24 @@ where Wrapped == HybridDataBindMode {
6666
}
6767

6868
class HybridRiveView: HybridRiveViewSpec {
69+
func play() throws -> NitroModules.Promise<Void> {
70+
return Promise.async {
71+
try await self.getRiveView().play()
72+
}
73+
}
74+
75+
func pause() throws -> NitroModules.Promise<Void> {
76+
return Promise.async {
77+
try await self.getRiveView().pause()
78+
}
79+
}
80+
81+
func reset() throws -> NitroModules.Promise<Void> {
82+
return Promise.async {
83+
try await self.getRiveView().reset()
84+
}
85+
}
86+
6987
// MARK: View Props
7088
var dataBind: HybridDataBindMode? = nil {
7189
didSet {
@@ -103,10 +121,6 @@ class HybridRiveView: HybridRiveViewSpec {
103121
return HybridViewModelInstance(viewModelInstance: viewModelInstance)
104122
}
105123

106-
func play() throws { try getRiveView().play() }
107-
108-
func pause() throws { try getRiveView().pause() }
109-
110124
func onEventListener(onEvent: @escaping (UnifiedRiveEvent) -> Void) throws {
111125
try getRiveView().addEventListener(onEvent)
112126
}

ios/RiveReactNativeView.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,22 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
121121
stateMachine?.bind(viewModelInstance: instance)
122122
artboard?.bind(viewModelInstance: instance)
123123
}
124-
baseViewModel?.play()
124+
play()
125125
}
126126

127+
@MainActor
127128
func play() {
128129
baseViewModel?.play()
129130
}
130131

132+
@MainActor
131133
func pause() {
132134
baseViewModel?.pause()
133135
}
134136

135137
func refreshAfterAssetChange() {
136138
if baseViewModel?.isPlaying == false {
137-
baseViewModel?.play()
139+
play()
138140
}
139141
}
140142

nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp

Lines changed: 43 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp

Lines changed: 43 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.hpp

Lines changed: 14 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)