Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
19 changes: 19 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,22 @@ end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.kt]
indent_size = 2
max_line_length = 140
ktlint_standard_no-wildcard-imports = disabled
ktlint_standard_filename = disabled
ktlint_standard_package-name = disabled
ktlint_standard_indent = disabled
ktlint_standard_function-signature = disabled
ktlint_standard_class-signature = disabled
ktlint_standard_multiline-expression-wrapping = disabled
ktlint_standard_function-expression-body = disabled
ktlint_standard_trailing-comma-on-call-site = disabled
ktlint_standard_trailing-comma-on-declaration-site = disabled
ktlint_standard_blank-line-before-declaration = disabled
ktlint_standard_import-ordering = disabled
ktlint_standard_string-template-indent = disabled
ktlint_standard_backing-property-naming = disabled
ktlint_standard_no-consecutive-comments = disabled
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,31 @@ on:
- checks_requested

jobs:
lint-swift:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: SwiftLint
uses: norio-nomura/action-swiftlint@3.2.1
with:
args: --config .swiftlint.yml

lint-kotlin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: ktlint
uses: ScaCap/action-ktlint@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
ktlint_version: "1.5.0"
android: true

lint:
runs-on: ubuntu-latest
steps:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,6 @@ lib/
# React Native Codegen
ios/generated
android/generated

# ktlint binary cache
.ktlint/
22 changes: 22 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
included:
- ios

excluded:
- Pods
- nitrogen/generated

disabled_rules:
- line_length
- file_length
- type_body_length
- function_body_length
- cyclomatic_complexity
- identifier_name
- force_cast
- force_try
- nesting
- trailing_whitespace
- todo
- unused_optional_binding

reporter: github-actions-logging
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ class HybridRiveFile : HybridRiveFileSpec() {
get() = riveFile?.viewModelCount?.toDouble()

override fun viewModelByIndex(index: Double): HybridViewModelSpec? {
val vm = riveFile?.getViewModelByIndex(index.toInt()) ?: return null;
val vm = riveFile?.getViewModelByIndex(index.toInt()) ?: return null
return HybridViewModel(vm)
}

override fun viewModelByName(name: String): HybridViewModelSpec? {
val vm = riveFile?.getViewModelByName(name) ?: return null;
val vm = riveFile?.getViewModelByName(name) ?: return null
return HybridViewModel(vm)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,3 @@ class HybridRiveFileFactory : HybridRiveFileFactorySpec() {
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {

override fun bindViewModelInstance(viewModelInstance: HybridViewModelInstanceSpec) =
executeOnUiThread {
val hybridVmi = viewModelInstance as? HybridViewModelInstance ?: return@executeOnUiThread;
val hybridVmi = viewModelInstance as? HybridViewModelInstance ?: return@executeOnUiThread
view.bindViewModelInstance(hybridVmi.viewModelInstance)
}

Expand Down Expand Up @@ -147,7 +147,6 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
afterUpdate()
}


override fun afterUpdate() {
logged(TAG, "afterUpdate") {
val hybridFile = file as? HybridRiveFile
Expand All @@ -163,7 +162,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
layoutScaleFactor = layoutScaleFactor?.toFloat() ?: DefaultConfiguration.LAYOUTSCALEFACTOR,
bindData = dataBind.toBindData()
)
view.configure(config, dataBindingChanged=dataBindingChanged, needsReload, initialUpdate= initialUpdate)
view.configure(config, dataBindingChanged = dataBindingChanged, needsReload, initialUpdate = initialUpdate)

if (needsReload && hybridFile != null) {
hybridFile.registerView(this)
Expand All @@ -187,7 +186,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
}

private fun executeOnUiThread(action: () -> Unit) {
context.currentActivity?.runOnUiThread() {
context.currentActivity?.runOnUiThread {
try {
action()
} catch (e: Exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
override fun createInstanceByIndex(index: Double): HybridViewModelInstanceSpec? {
try {
val vmi = viewModel.createInstanceFromIndex(index.toInt())
return HybridViewModelInstance(vmi);
return HybridViewModelInstance(vmi)
} catch (e: ViewModelException) {
return null
}
Expand All @@ -27,7 +27,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
override fun createInstanceByName(name: String): HybridViewModelInstanceSpec? {
try {
val vmi = viewModel.createInstanceFromName(name)
return HybridViewModelInstance(vmi);
return HybridViewModelInstance(vmi)
} catch (e: ViewModelException) {
return null
}
Expand All @@ -36,7 +36,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
override fun createDefaultInstance(): HybridViewModelInstanceSpec? {
try {
val vmi = viewModel.createDefaultInstance()
return HybridViewModelInstance(vmi);
return HybridViewModelInstance(vmi)
} catch (e: ViewModelException) {
return null
}
Expand All @@ -45,7 +45,7 @@ class HybridViewModel(private val viewModel: ViewModel) : HybridViewModelSpec()
override fun createInstance(): HybridViewModelInstanceSpec? {
try {
val vmi = viewModel.createBlankInstance()
return HybridViewModelInstance(vmi);
return HybridViewModelInstance(vmi)
} catch (e: ViewModelException) {
return null
}
Expand Down
5 changes: 2 additions & 3 deletions android/src/main/java/com/rive/RiveReactNativeView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import app.rive.runtime.kotlin.core.SMIInput
import app.rive.runtime.kotlin.core.SMINumber
import app.rive.runtime.kotlin.core.ViewModelInstance
import app.rive.runtime.kotlin.core.errors.ViewModelException
import com.margelo.nitro.core.AnyMap
import com.margelo.nitro.rive.EventPropertiesOutput
import com.margelo.nitro.rive.EventPropertiesOutputExtensions as EPO
import com.margelo.nitro.rive.RiveEventType
Expand Down Expand Up @@ -187,7 +186,7 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {

fun play() = riveAnimationView?.play()

fun pause() = riveAnimationView?.pause();
fun pause() = riveAnimationView?.pause()

fun addEventListener(onEvent: (event: RNEvent) -> Unit) {
val eventListener = object : RiveFileController.RiveEventListener {
Expand Down Expand Up @@ -329,7 +328,7 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
}
}

return newMap;
return newMap
}

/**
Expand Down
2 changes: 1 addition & 1 deletion ios/HybridRiveFile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import RiveRuntime

typealias ReferencedAssetCache = [String: RiveFileAsset]

class HybridRiveFile: HybridRiveFileSpec, RiveViewSource {
class HybridRiveFile: HybridRiveFileSpec, RiveViewSource {
var riveFile: RiveFile?
var referencedAssetCache: ReferencedAssetCache?
var assetLoader: ReferencedAssetLoader?
Expand Down
12 changes: 4 additions & 8 deletions ios/HybridRiveFileFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,7 @@ final class HybridRiveFileFactory: HybridRiveFileFactorySpec, @unchecked Sendabl

// MARK: Public Methods
func fromURL(url: String, loadCdn: Bool, referencedAssets: ReferencedAssetsType?) throws
-> Promise<(any HybridRiveFileSpec)>
{
-> Promise<(any HybridRiveFileSpec)> {
return try genericFrom(
check: {
guard let url = URL(string: url) else {
Expand All @@ -104,8 +103,7 @@ final class HybridRiveFileFactory: HybridRiveFileFactorySpec, @unchecked Sendabl
}

func fromFileURL(fileURL: String, loadCdn: Bool, referencedAssets: ReferencedAssetsType?) throws
-> Promise<(any HybridRiveFileSpec)>
{
-> Promise<(any HybridRiveFileSpec)> {
return try genericFrom(
check: {
guard let url = URL(string: fileURL) else {
Expand All @@ -126,8 +124,7 @@ final class HybridRiveFileFactory: HybridRiveFileFactorySpec, @unchecked Sendabl
}

func fromResource(resource: String, loadCdn: Bool, referencedAssets: ReferencedAssetsType?) throws
-> Promise<(any HybridRiveFileSpec)>
{
-> Promise<(any HybridRiveFileSpec)> {
return try genericFrom(
check: {
guard Bundle.main.path(forResource: resource, ofType: "riv") != nil else {
Expand All @@ -151,8 +148,7 @@ final class HybridRiveFileFactory: HybridRiveFileFactorySpec, @unchecked Sendabl
func fromBytes(bytes: ArrayBufferHolder, loadCdn: Bool, referencedAssets: ReferencedAssetsType?)
throws -> Promise<
(any HybridRiveFileSpec)
>
{
> {
let data = bytes.toData(copyIfNeeded: false)
return try genericFrom(
check: { data },
Expand Down
4 changes: 2 additions & 2 deletions ios/HybridRiveView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ where Wrapped == HybridDataBindMode {

class HybridRiveView: HybridRiveViewSpec {
// MARK: View Props
var dataBind: HybridDataBindMode? = nil {
var dataBind: HybridDataBindMode? {
didSet {
if !dataBind.isEqual(to: oldValue) {
dataBindingChanged = true
Expand Down Expand Up @@ -221,7 +221,7 @@ extension HybridRiveView {
func logged(tag: String, note: String? = nil, _ fn: () throws -> Void) {
do {
return try fn()
} catch (let e) {
} catch let e {
let (errorType, errorDescription) = detectErrorType(e)
let noteString = note.map { " \($0)" } ?? ""
let errorMessage = "[RIVE] \(tag)\(noteString) \(errorDescription)"
Expand Down
9 changes: 4 additions & 5 deletions ios/ReferencedAssetLoader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func createIncorrectRiveURL(_ url: String) -> NSError {
domain: RiveErrorDomain, code: 900,
userInfo: [
NSLocalizedDescriptionKey: "Unable to download Rive file from: \(url)",
"name": "IncorrectRiveFileURL",
"name": "IncorrectRiveFileURL"
])
}

Expand Down Expand Up @@ -64,7 +64,7 @@ final class ReferencedAssetLoader {
}

let request = URLRequest(url: requestUrl)
let task = queue.dataTask(with: request) { [weak self] data, response, error in
let task = queue.dataTask(with: request) { [weak self] data, _, error in
if error != nil {
self?.handleInvalidUrlError(url: url)
onError()
Expand Down Expand Up @@ -230,13 +230,12 @@ final class ReferencedAssetLoader {
factory factoryOut: SendableRef<RiveFactory?>,
fileRef: SendableRef<RiveFile?>
)
-> LoadAsset?
{
-> LoadAsset? {
guard let referencedAssets = referencedAssets, let referencedAssets = referencedAssets.data
else {
return nil
}
return { (asset: RiveFileAsset, data: Data, factory: RiveFactory) -> Bool in
return { (asset: RiveFileAsset, _: Data, factory: RiveFactory) -> Bool in
let assetByUniqueName = referencedAssets[asset.uniqueName()]
guard let assetData = assetByUniqueName ?? referencedAssets[asset.name()] else {
return false
Expand Down
10 changes: 4 additions & 6 deletions ios/RiveReactNativeView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
baseViewModel?.riveModel?.disableAutoBind()

case .auto:
baseViewModel?.riveModel?.enableAutoBind { instance in
baseViewModel?.riveModel?.enableAutoBind { _ in
// Auto-bind callback
}

Expand Down Expand Up @@ -186,8 +186,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
return textRun.text()
}

private func textRunOptionPath(name: String, path: String?) throws -> RiveRuntime.RiveTextValueRun
{
private func textRunOptionPath(name: String, path: String?) throws -> RiveRuntime.RiveTextValueRun {
let textRun: RiveRuntime.RiveTextValueRun?
if let path = path {
textRun = baseViewModel?.riveModel?.artboard?.textRun(name, path: path)
Expand Down Expand Up @@ -219,7 +218,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
riveView.leadingAnchor.constraint(equalTo: leadingAnchor),
riveView.trailingAnchor.constraint(equalTo: trailingAnchor),
riveView.topAnchor.constraint(equalTo: topAnchor),
riveView.bottomAnchor.constraint(equalTo: bottomAnchor),
riveView.bottomAnchor.constraint(equalTo: bottomAnchor)
])
}
}
Expand Down Expand Up @@ -252,8 +251,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
}

private func convertEventProperties(_ properties: [String: Any]?) -> [String:
EventPropertiesOutput]?
{
EventPropertiesOutput]? {
guard let properties = properties else { return nil }

var newMap: [String: EventPropertiesOutput] = [:]
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@
"release": "release-it",
"dev:ios": "cd example && xed ios",
"dev:android": "cd example && open -a \"/Applications/Android Studio.app\" ./android",
"copy:nitrogen-config": "mkdir -p lib/nitrogen/generated/shared/json && cp nitrogen/generated/shared/json/RiveViewConfig.json lib/nitrogen/generated/shared/json/"
"copy:nitrogen-config": "mkdir -p lib/nitrogen/generated/shared/json && cp nitrogen/generated/shared/json/RiveViewConfig.json lib/nitrogen/generated/shared/json/",
"lint:swift": "./scripts/lint-swift.sh",
"lint:kotlin": "./scripts/lint-kotlin.sh",
"lint:native": "yarn lint:swift && yarn lint:kotlin"
},
"keywords": [
"react-native",
Expand Down
15 changes: 15 additions & 0 deletions scripts/lint-kotlin.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
set -e

KTLINT_VERSION="1.5.0"
KTLINT_DIR=".ktlint"
KTLINT_BIN="$KTLINT_DIR/ktlint"

if [ ! -f "$KTLINT_BIN" ]; then
echo "Downloading ktlint $KTLINT_VERSION..."
mkdir -p "$KTLINT_DIR"
curl -sSL "https://github.com/pinterest/ktlint/releases/download/${KTLINT_VERSION}/ktlint" -o "$KTLINT_BIN"
chmod +x "$KTLINT_BIN"
fi

"$KTLINT_BIN" "android/src/**/*.kt" --reporter=plain
9 changes: 9 additions & 0 deletions scripts/lint-swift.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
set -e

if command -v swiftlint &> /dev/null; then
swiftlint lint --config .swiftlint.yml
else
echo "SwiftLint not installed. Install via: brew install swiftlint"
exit 1
fi
Loading