diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 422ba6a5..d5ab668e 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -95,6 +95,7 @@ dependencies { implementation(projects.core) implementation(projects.database.impl) implementation(projects.model) + implementation(projects.web) kapt(libs.dagger.compiler) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/login/LobstersLoginWebView.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/login/LobstersLoginWebView.kt new file mode 100644 index 00000000..c406577d --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/login/LobstersLoginWebView.kt @@ -0,0 +1,52 @@ +/* + * Copyright © 2023 Harsh Shandilya. + * Use of this source code is governed by an MIT-style + * license that can be found in the LICENSE file or at + * https://opensource.org/licenses/MIT. + */ +package dev.msfjarvis.claw.android.ui.login + +import android.webkit.CookieManager +import android.webkit.WebView +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import com.google.accompanist.web.AccompanistWebViewClient +import com.google.accompanist.web.WebView +import com.google.accompanist.web.rememberWebViewState +import dev.msfjarvis.claw.api.LobstersApi +import io.github.aakira.napier.Napier +import okhttp3.HttpUrl.Companion.toHttpUrl + +@Suppress("Unused") +@Composable +fun LobstersLoginWebView( + modifier: Modifier = Modifier, +) { + val state = rememberWebViewState(url = "https://lobste.rs/login") + val webClient = remember { + object : AccompanistWebViewClient() { + override fun onPageFinished(view: WebView, url: String?) { + super.onPageFinished(view, url) + Napier.d(tag = "WebView") { "onPageFinished(url=$url)" } + if (url != null && url.toHttpUrl() == LobstersApi.BASE_URL.toHttpUrl()) { + val cookies = CookieManager.getInstance().getCookie(LobstersApi.BASE_URL) + val trap = + cookies + .split(";") + .associate { + val split = it.split("=") + split[0] to split[1] + }["lobsters_trap"] + Napier.d(tag = "WebView") { "lobsters_trap=${trap}" } + } + } + } + } + WebView( + state = state, + client = webClient, + modifier = modifier, + captureBackPresses = false, + ) +}