app: retrieve ArticleDetailWebViewClient from hilt Entrypoint instead of activity
This prepares us to retrieve it when we don't use ArticleDetailActivity anymore
--- a/app/src/main/java/com/geekorum/ttrss/article_details/ArticleDetailActivity.kt Thu Jun 06 12:32:21 2024 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/article_details/ArticleDetailActivity.kt Thu Jun 06 13:56:21 2024 -0400
@@ -29,6 +29,7 @@
import androidx.activity.viewModels
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
+import androidx.compose.runtime.remember
import androidx.core.net.toUri
import com.geekorum.ttrss.R
import com.geekorum.ttrss.articles_list.ArticleListActivity
@@ -37,10 +38,11 @@
import com.geekorum.ttrss.ui.AppTheme3
import com.geekorum.ttrss.ui.component1
import com.geekorum.ttrss.ui.component2
-import com.geekorum.ttrss.ui.components.web.AccompanistWebViewClient
+import dagger.hilt.EntryPoint
+import dagger.hilt.InstallIn
import dagger.hilt.android.AndroidEntryPoint
-import okhttp3.OkHttpClient
-import javax.inject.Inject
+import dagger.hilt.android.EntryPointAccessors
+import dagger.hilt.android.components.ActivityComponent
/**
* An activity representing a single Article detail screen. This
@@ -52,17 +54,10 @@
class ArticleDetailActivity : SessionActivity() {
private val articleDetailsViewModel: ArticleDetailsViewModel by viewModels()
- private lateinit var webViewClient: AccompanistWebViewClient
- @Inject lateinit var okHttpClient: OkHttpClient
- @Inject lateinit var webFontProvider: WebFontProvider
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- webViewClient = ArticleDetailsWebViewClient(okHttpClient, webFontProvider,
- openUrlInBrowser = articleDetailsViewModel::openUrlInBrowser,
- onPageFinishedCallback = { _, _ -> }
- )
enableEdgeToEdge()
val articleUri = requireNotNull(intent.data)
@@ -72,6 +67,14 @@
AppTheme3 {
val (widthSizeClass, heightSizeClass) = calculateWindowSizeClass(this)
+ val webViewClientFactory = remember {
+ EntryPointAccessors.fromActivity<ArticleDetailsEntryPoint>(this)
+ .articleDetailsWebViewClientFactory
+ }
+ val webViewClient = remember(articleDetailsViewModel) {
+ webViewClientFactory.create(openUrlInBrowser = articleDetailsViewModel::openUrlInBrowser,
+ onPageFinishedCallback = { _, _ ->})
+ }
ArticleDetailsScreen(articleDetailsViewModel,
widthSizeClass = widthSizeClass,
heightSizeClass = heightSizeClass,
@@ -109,3 +112,9 @@
outContent.webUri = articleDetailsViewModel.article.value?.link?.toUri()
}
}
+
+@EntryPoint
+@InstallIn(ActivityComponent::class)
+interface ArticleDetailsEntryPoint {
+ val articleDetailsWebViewClientFactory: ArticleDetailsWebViewClientFactory
+}
--- a/app/src/main/java/com/geekorum/ttrss/article_details/WebviewUtils.kt Thu Jun 06 12:32:21 2024 -0400
+++ b/app/src/main/java/com/geekorum/ttrss/article_details/WebviewUtils.kt Thu Jun 06 13:56:21 2024 -0400
@@ -40,13 +40,14 @@
import com.geekorum.ttrss.ui.components.web.AccompanistWebViewClient
import okhttp3.OkHttpClient
import timber.log.Timber
+import javax.inject.Inject
/**
* WebViewClient for ArticleDetails webview.
* It favors opening link in their default application and fallback to a browser if none.
* It also use WebFontProvider to load fonts
*/
-class ArticleDetailsWebViewClient constructor(
+class ArticleDetailsWebViewClient(
okHttpClient: OkHttpClient,
private val webFontProvider: WebFontProvider,
private val openUrlInBrowser: (Context, Uri) -> Unit,
@@ -189,3 +190,19 @@
}
}
+
+class ArticleDetailsWebViewClientFactory @Inject constructor(
+ private val okHttpClient: OkHttpClient,
+ private val webFontProvider: WebFontProvider,
+) {
+ fun create(openUrlInBrowser: (Context, Uri) -> Unit,
+ onPageFinishedCallback: (WebView?, String?) -> Unit
+ ): ArticleDetailsWebViewClient {
+ return ArticleDetailsWebViewClient(
+ okHttpClient = okHttpClient,
+ webFontProvider = webFontProvider,
+ openUrlInBrowser = openUrlInBrowser,
+ onPageFinishedCallback = onPageFinishedCallback
+ )
+ }
+}