Skip to content

Commit 391141c

Browse files
authored
chore: add reset + fix: invoke play, pause to invoked from main (#53)
* chore: add reset + fix: invoke play, pause, * fix: remove extra blank lines in Kotlin files
1 parent 0a58796 commit 391141c

15 files changed

Lines changed: 213 additions & 64 deletions

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,11 @@ 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() }
116116

117-
override fun pause() = executeOnUiThread { view.pause() }
117+
override fun pause() = asyncExecuteOnUiThread { view.pause() }
118+
119+
override fun reset() = asyncExecuteOnUiThread { view.reset() }
118120

119121
override fun onEventListener(onEvent: (event: UnifiedRiveEvent) -> Unit) =
120122
executeOnUiThread { view.addEventListener(onEvent) }
@@ -185,6 +187,20 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
185187
}
186188
}
187189

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

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
188188

189189
fun pause() = riveAnimationView?.pause()
190190

191+
fun reset() = riveAnimationView?.reset()
192+
191193
fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
192194
val eventListener = object : RiveFileController.RiveEventListener {
193195
override fun notifyEvent(event: RiveEvent) {

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? {
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
@@ -122,20 +122,22 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
122122
// this should be added if we support only playing artboards on their own - https://github.com/rive-app/rive-nitro-react-native/pull/23#discussion_r2534698281
123123
// artboard?.bind(viewModelInstance: instance)
124124
}
125-
baseViewModel?.play()
125+
play()
126126
}
127127

128+
@MainActor
128129
func play() {
129130
baseViewModel?.play()
130131
}
131132

133+
@MainActor
132134
func pause() {
133135
baseViewModel?.pause()
134136
}
135137

136138
func refreshAfterAssetChange() {
137139
if baseViewModel?.isPlaying == false {
138-
baseViewModel?.play()
140+
play()
139141
}
140142
}
141143

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)