1- package com.reactnativeturbowebview
1+ package com.reactnativehotwirewebview
22
33import android.webkit.JavascriptInterface
44import android.webkit.WebSettings
@@ -8,12 +8,17 @@ import androidx.lifecycle.LifecycleOwner
88import androidx.lifecycle.lifecycleScope
99import androidx.lifecycle.whenStateAtLeast
1010import com.facebook.react.bridge.ReactApplicationContext
11- import dev.hotwire.turbo.errors.TurboVisitError
12- import dev.hotwire.turbo.session.TurboSession
13- import dev.hotwire.turbo.views.TurboWebView
14- import dev.hotwire.turbo.visit.TurboVisit
15- import dev.hotwire.turbo.visit.TurboVisitAction
16- import dev.hotwire.turbo.visit.TurboVisitOptions
11+ import com.reactnativehotwirewebview.RNWebChromeClient
12+ import com.reactnativehotwirewebview.SessionCallbackAdapter
13+ import com.reactnativehotwirewebview.SessionSubscriber
14+ import com.reactnativehotwirewebview.Utils
15+ import dev.hotwire.core.config.Hotwire
16+ import dev.hotwire.core.turbo.errors.VisitError
17+ import dev.hotwire.core.turbo.session.Session
18+ import dev.hotwire.core.turbo.webview.HotwireWebView
19+ import dev.hotwire.core.turbo.visit.Visit
20+ import dev.hotwire.core.turbo.visit.VisitAction
21+ import dev.hotwire.core.turbo.visit.VisitOptions
1722import kotlinx.coroutines.Dispatchers
1823import kotlinx.coroutines.launch
1924import kotlinx.coroutines.withContext
@@ -27,10 +32,10 @@ class RNSession(
2732
2833 var visitableView: SessionSubscriber ? = null
2934
30- private val turboSession: TurboSession = run {
35+ private val turboSession: Session = run {
3136 val activity = reactContext.currentActivity as AppCompatActivity
32- val webView = TurboWebView (activity, null )
33- val session = TurboSession (sessionHandle, activity, webView)
37+ val webView = HotwireWebView (activity, null )
38+ val session = Session (sessionHandle, activity, webView)
3439
3540 webView.settings.setJavaScriptEnabled(true )
3641 webView.addJavascriptInterface(JavaScriptInterface (), " AndroidInterface" )
@@ -39,38 +44,38 @@ class RNSession(
3944 session.isRunningInAndroidNavigation = false
4045 session
4146 }
42- val webView: TurboWebView get() = turboSession.webView
43- val currentVisit: TurboVisit ? get() = turboSession.currentVisit
47+ val webView: HotwireWebView get() = turboSession.webView
48+ val currentVisit: Visit ? get() = turboSession.currentVisit
4449
4550 internal fun registerVisitableView (newView : SessionSubscriber ) {
4651 visitableView = newView
4752 }
4853
49- private fun setUserAgentString (webView : TurboWebView , applicationNameForUserAgent : String? ) {
54+ private fun setUserAgentString (webView : HotwireWebView , applicationNameForUserAgent : String? ) {
5055 var userAgentString = WebSettings .getDefaultUserAgent(webView.context)
5156 if (applicationNameForUserAgent != null ) {
5257 userAgentString = " $userAgentString $applicationNameForUserAgent "
5358 }
5459 webView.settings.userAgentString = userAgentString
5560 }
5661
57- fun visit (url : String , restoreWithCachedSnapshot : Boolean , reload : Boolean , viewTreeLifecycleOwner : LifecycleOwner ? , visitOptions : TurboVisitOptions ? ){
62+ fun visit (url : String , restoreWithCachedSnapshot : Boolean , reload : Boolean , viewTreeLifecycleOwner : LifecycleOwner ? , visitOptions : VisitOptions ? ){
5863 val restore = restoreWithCachedSnapshot && ! reload
5964
6065 val options = visitOptions ? : when {
61- restore -> TurboVisitOptions (action = TurboVisitAction .RESTORE )
62- else -> TurboVisitOptions ()
66+ restore -> VisitOptions (action = VisitAction .RESTORE )
67+ else -> VisitOptions ()
6368 }
6469
6570 viewTreeLifecycleOwner?.lifecycleScope?.launch {
6671 val snapshot = when (options.action) {
67- TurboVisitAction .ADVANCE -> fetchCachedSnapshot(url)
72+ VisitAction .ADVANCE -> fetchCachedSnapshot(url)
6873 else -> null
6974 }
7075
7176 viewTreeLifecycleOwner.lifecycle.whenStateAtLeast(Lifecycle .State .STARTED ) {
7277 turboSession.visit(
73- TurboVisit (
78+ Visit (
7479 location = url,
7580 destinationIdentifier = url.hashCode(),
7681 restoreWithCachedSnapshot = restoreWithCachedSnapshot,
@@ -85,7 +90,7 @@ class RNSession(
8590
8691 private suspend fun fetchCachedSnapshot (url : String ): String? {
8792 return withContext(Dispatchers .IO ) {
88- val response = turboSession .offlineRequestHandler?.getCachedSnapshot(
93+ val response = Hotwire .config .offlineRequestHandler?.getCachedSnapshot(
8994 url = url
9095 )
9196 response?.data?.use {
@@ -120,15 +125,15 @@ class RNSession(
120125 }
121126
122127 fun clearSnapshotCache () {
123- // turbo -android doesn't expose a way to clear the snapshot cache, so we have to do it manually
128+ // hotwire-native -android doesn't expose a way to clear the snapshot cache, so we have to do it manually
124129 webView.post {
125130 webView.evaluateJavascript(" window.Turbo.session.clearCache();" , null )
126131 }
127132 }
128133
129134 // region SessionCallbackAdapter
130135
131- override fun onReceivedError (error : TurboVisitError ) {
136+ override fun onReceivedError (error : VisitError ) {
132137 visitableView?.onReceivedError(error)
133138 }
134139
@@ -152,7 +157,11 @@ class RNSession(
152157 visitableView?.visitLocationStarted(location)
153158 }
154159
155- override fun visitProposedToLocation (location : String , options : TurboVisitOptions ) {
160+ override fun visitProposedToCrossOriginRedirect (location : String ) {
161+ visitableView?.visitProposedToCrossOriginRedirect(location)
162+ }
163+
164+ override fun visitProposedToLocation (location : String , options : VisitOptions ) {
156165 visitableView?.visitProposedToLocation(location, options)
157166 }
158167
@@ -168,7 +177,7 @@ class RNSession(
168177 visitableView?.didFinishFormSubmission(location)
169178 }
170179
171- override fun requestFailedWithError (visitHasCachedSnapshot : Boolean , error : TurboVisitError ) {
180+ override fun requestFailedWithError (visitHasCachedSnapshot : Boolean , error : VisitError ) {
172181 visitableView?.requestFailedWithError(visitHasCachedSnapshot, error)
173182 }
174183
0 commit comments