11package dev.dimension.flare.ui.screen.serviceselect
22
3- import android.net.Uri
43import android.view.ViewGroup.LayoutParams
54import android.webkit.CookieManager
65import android.webkit.WebSettings
@@ -20,16 +19,13 @@ import dev.dimension.flare.ui.component.FlareScaffold
2019import kotlinx.coroutines.delay
2120import kotlin.time.Duration.Companion.seconds
2221
23- private val USER_AGENT_HEADERS =
22+ private val userAgent =
2423 mapOf (
25- " User-Agent " to " Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.3" ,
24+ " user-agent " to " Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.3" ,
2625 " Pragma" to " no-cache" ,
2726 " Cache-Control" to " no-cache" ,
2827 )
2928
30- private const val ANDROID_USER_AGENT =
31- " Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.3"
32-
3329@Composable
3430internal fun WebCookieLoginScreen (
3531 url : String ,
@@ -38,16 +34,12 @@ internal fun WebCookieLoginScreen(
3834) {
3935 val webViewState = rememberWebViewState(url)
4036 LaunchedEffect (url) {
41- val cookieManager = CookieManager .getInstance()
4237 while (true ) {
4338 webViewState.lastLoadedUrl?.let { loadedUrl ->
4439 val cookies =
45- cookieManager.getCookieHeaderForUrls(
46- cookieLookupUrls(
47- loadedUrl = loadedUrl,
48- originalUrl = url,
49- ),
50- )
40+ CookieManager
41+ .getInstance()
42+ .getCookie(loadedUrl)
5143 if (callback(cookies)) {
5244 onBack()
5345 break
@@ -70,51 +62,17 @@ internal fun WebCookieLoginScreen(
7062 .background(MaterialTheme .colorScheme.background)
7163 .padding(it)
7264 .fillMaxSize(),
73- onCreated = { webView ->
65+ onCreated = {
7466 WebStorage .getInstance().deleteAllData()
75- val cookieManager = CookieManager .getInstance()
76- cookieManager.setAcceptCookie(true )
77- cookieManager.setAcceptThirdPartyCookies(webView, true )
78- with (webView.settings) {
79- userAgentString = ANDROID_USER_AGENT
67+ CookieManager .getInstance().removeAllCookies(null )
68+ with (it.settings) {
69+ userAgentString = userAgent.toString()
8070 javaScriptEnabled = true
8171 domStorageEnabled = true
8272 javaScriptCanOpenWindowsAutomatically = false
8373 cacheMode = WebSettings .LOAD_CACHE_ELSE_NETWORK
8474 }
85- cookieManager.removeAllCookies {
86- cookieManager.flush()
87- webView.loadUrl(url, USER_AGENT_HEADERS )
88- }
8975 },
9076 )
9177 }
9278}
93-
94- private fun cookieLookupUrls (
95- loadedUrl : String ,
96- originalUrl : String ,
97- ): List <String > {
98- val loadedHost = loadedUrl.hostOrNull()
99- val originalHost = originalUrl.hostOrNull()
100- return if (loadedHost != null && originalHost != null && loadedHost.equals(originalHost, ignoreCase = true )) {
101- listOf (loadedUrl)
102- } else {
103- listOf (loadedUrl, originalUrl)
104- }
105- }
106-
107- private fun CookieManager.getCookieHeaderForUrls (urls : List <String >): String? =
108- urls
109- .distinct()
110- .flatMap { url ->
111- getCookie(url)
112- ?.split(" ;" )
113- .orEmpty()
114- }.map { it.trim() }
115- .filter { it.isNotEmpty() }
116- .distinct()
117- .joinToString(" ; " )
118- .takeIf { it.isNotBlank() }
119-
120- private fun String.hostOrNull (): String? = runCatching { Uri .parse(this ).host }.getOrNull()
0 commit comments