diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt index c964c81e2..20459349d 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/browser/cloudflare/CloudFlareActivity.kt @@ -12,7 +12,12 @@ import androidx.core.net.toUri import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.core.view.updatePadding +import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.runInterruptible +import kotlinx.coroutines.yield import okhttp3.Headers import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrlOrNull @@ -118,11 +123,14 @@ class CloudFlareActivity : BaseActivity(), CloudFlareCal } R.id.action_retry -> { - viewBinding.webView.stopLoading() - val targetUrl = intent?.dataString?.toHttpUrlOrNull() - if (targetUrl != null) { - clearCfCookies(targetUrl) - viewBinding.webView.loadUrl(targetUrl.toString()) + lifecycleScope.launch { + viewBinding.webView.stopLoading() + yield() + val targetUrl = intent?.dataString?.toHttpUrlOrNull() + if (targetUrl != null) { + clearCfCookies(targetUrl) + viewBinding.webView.loadUrl(targetUrl.toString()) + } } true } @@ -168,7 +176,7 @@ class CloudFlareActivity : BaseActivity(), CloudFlareCal subtitle?.toString()?.toHttpUrlOrNull()?.topPrivateDomain() ?: subtitle } - private fun clearCfCookies(url: HttpUrl) { + private suspend fun clearCfCookies(url: HttpUrl) = runInterruptible(Dispatchers.Default) { cookieJar.removeCookies(url) { cookie -> val name = cookie.name name.startsWith("cf_") || name.startsWith("_cf") || name.startsWith("__cf") diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/network/cookies/AndroidCookieJar.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/network/cookies/AndroidCookieJar.kt index 1352257d5..9c1d2afe2 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/network/cookies/AndroidCookieJar.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/network/cookies/AndroidCookieJar.kt @@ -47,7 +47,6 @@ class AndroidCookieJar : MutableCookieJar { .build() cookieManager.setCookie(urlString, nc.toString()) } - check(loadForRequest(url).isEmpty()) } override suspend fun clear() = suspendCoroutine { continuation -> diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/EnhancedViewPager.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/EnhancedViewPager.kt index 08d280070..a8680b5e3 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/EnhancedViewPager.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/ui/widgets/EnhancedViewPager.kt @@ -5,6 +5,7 @@ import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import androidx.viewpager.widget.ViewPager +import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug @SuppressLint("ClickableViewAccessibility") class EnhancedViewPager @JvmOverloads constructor( @@ -25,6 +26,11 @@ class EnhancedViewPager @JvmOverloads constructor( } override fun onInterceptTouchEvent(event: MotionEvent): Boolean { - return isUserInputEnabled && super.onInterceptTouchEvent(event) + return try { + isUserInputEnabled && super.onInterceptTouchEvent(event) + } catch (e: IllegalArgumentException) { + e.printStackTraceDebug() + false + } } }