Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,12 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
return HybridViewModelInstance(viewModelInstance)
}

override fun play() = executeOnUiThread { view.play() }
override fun play() = asyncExecuteOnUiThread { view.play() }

override fun pause() = asyncExecuteOnUiThread { view.pause() }

override fun reset() = asyncExecuteOnUiThread { view.reset() }

override fun pause() = executeOnUiThread { view.pause() }

override fun onEventListener(onEvent: (event: UnifiedRiveEvent) -> Unit) =
executeOnUiThread { view.addEventListener(onEvent) }
Expand Down Expand Up @@ -185,6 +188,20 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
}
}

private fun asyncExecuteOnUiThread(action: () -> Unit): Promise<Unit> {
return Promise.async {
context.currentActivity?.runOnUiThread() {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [ktlint] standard:unnecessary-parentheses-before-trailing-lambda reported by reviewdog 🐶
Empty parentheses in function call followed by lambda are unnecessary

try {
action()
} catch (e: Exception) {
throw Error(e.message) // TODO: Correctly handling errors (https://nitro.margelo.com/docs/errors)
} catch (e: Error) {
throw Error(e.message)
}
}
}

}
private fun executeOnUiThread(action: () -> Unit) {
context.currentActivity?.runOnUiThread {
try {
Expand Down
3 changes: 3 additions & 0 deletions android/src/main/java/com/rive/RiveReactNativeView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,9 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {

fun pause() = riveAnimationView?.pause()

fun reset() = riveAnimationView?.reset()


fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
val eventListener = object : RiveFileController.RiveEventListener {
override fun notifyEvent(event: RiveEvent) {
Expand Down
22 changes: 18 additions & 4 deletions ios/HybridRiveView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,24 @@ where Wrapped == HybridDataBindMode {
}

class HybridRiveView: HybridRiveViewSpec {
func play() throws -> NitroModules.Promise<Void> {
return Promise.async {
try await self.getRiveView().play()
}
}

func pause() throws -> NitroModules.Promise<Void> {
return Promise.async {
try await self.getRiveView().pause()
}
}

func reset() throws -> NitroModules.Promise<Void> {
return Promise.async {
try await self.getRiveView().reset()
}
}

// MARK: View Props
var dataBind: HybridDataBindMode? {
didSet {
Expand Down Expand Up @@ -103,10 +121,6 @@ class HybridRiveView: HybridRiveViewSpec {
return HybridViewModelInstance(viewModelInstance: viewModelInstance)
}

func play() throws { try getRiveView().play() }

func pause() throws { try getRiveView().pause() }

func onEventListener(onEvent: @escaping (UnifiedRiveEvent) -> Void) throws {
try getRiveView().addEventListener(onEvent)
}
Expand Down
6 changes: 4 additions & 2 deletions ios/RiveReactNativeView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -122,20 +122,22 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
// 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
// artboard?.bind(viewModelInstance: instance)
}
baseViewModel?.play()
play()
}

@MainActor
func play() {
baseViewModel?.play()
}

@MainActor
func pause() {
baseViewModel?.pause()
}

func refreshAfterAssetChange() {
if baseViewModel?.isPlaying == false {
baseViewModel?.play()
play()
}
}

Expand Down
49 changes: 43 additions & 6 deletions nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 8 additions & 8 deletions nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.cpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 43 additions & 22 deletions nitrogen/generated/ios/RNRive-Swift-Cxx-Bridge.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 14 additions & 2 deletions nitrogen/generated/ios/c++/HybridRiveViewSpecSwift.hpp

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions nitrogen/generated/ios/swift/HybridRiveViewSpec.swift

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading