From 22e36fd3f1602ab28765fa2e87c0a762f3d2be38 Mon Sep 17 00:00:00 2001 From: Andrew Sidorchuk Date: Tue, 17 Feb 2026 21:35:05 -0500 Subject: [PATCH 1/3] feat: implement Bible reader view for Android --- .../reactnativesdk/RNBibleReaderViewModule.kt | 1 + .../views/YVPBibleReaderView.kt | 59 +++++++++++-------- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt b/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt index 2c7d68e..f460413 100644 --- a/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt +++ b/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt @@ -1,6 +1,7 @@ package com.youversion.reactnativesdk import com.youversion.reactnativesdk.views.YVPBibleReaderView +import com.youversion.reactnativesdk.views.YVPBibleWidgetView import expo.modules.kotlin.modules.Module import expo.modules.kotlin.modules.ModuleDefinition diff --git a/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt b/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt index 3b17ceb..7c5db2b 100644 --- a/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt +++ b/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt @@ -1,55 +1,68 @@ package com.youversion.reactnativesdk.views import android.content.Context -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp +import com.youversion.platform.core.bibles.domain.BibleReference +import com.youversion.platform.reader.BibleReader import expo.modules.kotlin.AppContext +import expo.modules.kotlin.views.AutoSizingComposable import expo.modules.kotlin.views.ComposeProps +import expo.modules.kotlin.views.Direction import expo.modules.kotlin.views.ExpoComposeView +import java.util.EnumSet + data class BibleReaderViewProps( - // Bible reference val versionId: MutableState = mutableStateOf(null), val bookUSFM: MutableState = mutableStateOf(null), val chapter: MutableState = mutableStateOf(null), val verse: MutableState = mutableStateOf(null), val verseStart: MutableState = mutableStateOf(null), val verseEnd: MutableState = mutableStateOf(null), - val appName: MutableState = mutableStateOf(null), val signInMessage: MutableState = mutableStateOf(null), - val hasReference: MutableState = mutableStateOf(false), + val hasReference: MutableState = mutableStateOf(null) ) : ComposeProps class YVPBibleReaderView(context: Context, appContext: AppContext) : ExpoComposeView(context, appContext, withHostingView = true) { - override val props = BibleReaderViewProps() @Composable override fun Content(modifier: Modifier) { - // TODO: Replace with actual BibleReaderView composable when Kotlin SDK is ready - Box( - modifier = modifier - .fillMaxSize() - .padding(16.dp), - contentAlignment = Alignment.Center - ) { - Text( - text = "BibleReaderView placeholder\n" + - "App: ${props.appName.value}\n" + - "Reference: ${props.bookUSFM.value} ${props.chapter.value}", - color = Color.Gray + BibleReader( + appName = props.appName.value!!, + appSignInMessage = props.signInMessage.value!!, + bibleReference = bibleReference(), + ) + } + + fun bibleReference(): BibleReference? { + val start = props.verseStart.value + val end = props.verseEnd.value + + if (start != null && end != null) { + return BibleReference( + versionId = props.versionId.value!!, + bookUSFM = props.bookUSFM.value!!, + chapter = props.chapter.value!!, + verseStart = start, + verseEnd = end ) } + + if (props.hasReference.value == true) { + return BibleReference( + versionId = props.versionId.value!!, + bookUSFM = props.bookUSFM.value!!, + chapter = props.chapter.value!!, + verse = props.verse.value + ) + } + + return null } } From 2c1c682daf924c68455c02f329bd50629dceffda Mon Sep 17 00:00:00 2001 From: Andrew Sidorchuk Date: Fri, 20 Feb 2026 17:15:20 -0500 Subject: [PATCH 2/3] fixup! feat: implement Bible reader view for Android --- .../com/youversion/reactnativesdk/RNBibleReaderViewModule.kt | 1 - .../com/youversion/reactnativesdk/views/YVPBibleReaderView.kt | 3 --- 2 files changed, 4 deletions(-) diff --git a/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt b/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt index f460413..2c7d68e 100644 --- a/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt +++ b/android/src/main/java/com/youversion/reactnativesdk/RNBibleReaderViewModule.kt @@ -1,7 +1,6 @@ package com.youversion.reactnativesdk import com.youversion.reactnativesdk.views.YVPBibleReaderView -import com.youversion.reactnativesdk.views.YVPBibleWidgetView import expo.modules.kotlin.modules.Module import expo.modules.kotlin.modules.ModuleDefinition diff --git a/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt b/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt index 7c5db2b..3c221aa 100644 --- a/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt +++ b/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt @@ -8,11 +8,8 @@ import androidx.compose.ui.Modifier import com.youversion.platform.core.bibles.domain.BibleReference import com.youversion.platform.reader.BibleReader import expo.modules.kotlin.AppContext -import expo.modules.kotlin.views.AutoSizingComposable import expo.modules.kotlin.views.ComposeProps -import expo.modules.kotlin.views.Direction import expo.modules.kotlin.views.ExpoComposeView -import java.util.EnumSet data class BibleReaderViewProps( From e4294a898199323a7f9b69495b1c8d87219404a6 Mon Sep 17 00:00:00 2001 From: Andrew Sidorchuk Date: Fri, 20 Feb 2026 17:30:56 -0500 Subject: [PATCH 3/3] fixup! feat: implement Bible reader view for Android --- .../reactnativesdk/views/YVPBibleReaderView.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt b/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt index 3c221aa..afdc20e 100644 --- a/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt +++ b/android/src/main/java/com/youversion/reactnativesdk/views/YVPBibleReaderView.kt @@ -11,6 +11,7 @@ import expo.modules.kotlin.AppContext import expo.modules.kotlin.views.ComposeProps import expo.modules.kotlin.views.ExpoComposeView +const val DEFAULT_BEREAN_STANDARD_BIBLE_VERSION = 3034 data class BibleReaderViewProps( val versionId: MutableState = mutableStateOf(null), @@ -31,8 +32,8 @@ class YVPBibleReaderView(context: Context, appContext: AppContext) : @Composable override fun Content(modifier: Modifier) { BibleReader( - appName = props.appName.value!!, - appSignInMessage = props.signInMessage.value!!, + appName = props.appName.value ?: "", + appSignInMessage = props.signInMessage.value ?: "", bibleReference = bibleReference(), ) } @@ -43,9 +44,9 @@ class YVPBibleReaderView(context: Context, appContext: AppContext) : if (start != null && end != null) { return BibleReference( - versionId = props.versionId.value!!, - bookUSFM = props.bookUSFM.value!!, - chapter = props.chapter.value!!, + versionId = props.versionId.value ?: DEFAULT_BEREAN_STANDARD_BIBLE_VERSION, + bookUSFM = props.bookUSFM.value ?: "JHN", + chapter = props.chapter.value ?: 1, verseStart = start, verseEnd = end ) @@ -53,9 +54,9 @@ class YVPBibleReaderView(context: Context, appContext: AppContext) : if (props.hasReference.value == true) { return BibleReference( - versionId = props.versionId.value!!, - bookUSFM = props.bookUSFM.value!!, - chapter = props.chapter.value!!, + versionId = props.versionId.value ?: DEFAULT_BEREAN_STANDARD_BIBLE_VERSION, + bookUSFM = props.bookUSFM.value ?: "JHN", + chapter = props.chapter.value ?: 1, verse = props.verse.value ) }