|
|
|
@ -1,16 +1,15 @@
|
|
|
|
package org.koitharu.kotatsu.browser
|
|
|
|
package org.koitharu.kotatsu.browser
|
|
|
|
|
|
|
|
|
|
|
|
import android.graphics.Bitmap
|
|
|
|
import android.graphics.Bitmap
|
|
|
|
import android.webkit.WebResourceRequest
|
|
|
|
|
|
|
|
import android.webkit.WebResourceResponse
|
|
|
|
import android.webkit.WebResourceResponse
|
|
|
|
import android.webkit.WebView
|
|
|
|
import android.webkit.WebView
|
|
|
|
import android.webkit.WebViewClient
|
|
|
|
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import okhttp3.Request
|
|
|
|
import okhttp3.Request
|
|
|
|
import org.koin.core.component.KoinComponent
|
|
|
|
import org.koin.core.component.KoinComponent
|
|
|
|
import org.koin.core.component.inject
|
|
|
|
import org.koin.core.component.inject
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.core.network.WebViewClientCompat
|
|
|
|
|
|
|
|
|
|
|
|
class BrowserClient(private val callback: BrowserCallback) : WebViewClient(), KoinComponent {
|
|
|
|
class BrowserClient(private val callback: BrowserCallback) : WebViewClientCompat(), KoinComponent {
|
|
|
|
|
|
|
|
|
|
|
|
private val okHttp by inject<OkHttpClient>()
|
|
|
|
private val okHttp by inject<OkHttpClient>()
|
|
|
|
|
|
|
|
|
|
|
|
@ -29,31 +28,18 @@ class BrowserClient(private val callback: BrowserCallback) : WebViewClient(), Ko
|
|
|
|
callback.onTitleChanged(view.title.orEmpty(), url)
|
|
|
|
callback.onTitleChanged(view.title.orEmpty(), url)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?) = false
|
|
|
|
override fun shouldInterceptRequestCompat(view: WebView, url: String): WebResourceResponse? {
|
|
|
|
|
|
|
|
return runCatching {
|
|
|
|
override fun shouldOverrideUrlLoading(view: WebView, url: String) = false
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(url)
|
|
|
|
override fun shouldInterceptRequest(view: WebView?, url: String?): WebResourceResponse? {
|
|
|
|
.build()
|
|
|
|
return url?.let(::doRequest)
|
|
|
|
val response = okHttp.newCall(request).execute()
|
|
|
|
|
|
|
|
val ct = response.body?.contentType()
|
|
|
|
|
|
|
|
WebResourceResponse(
|
|
|
|
|
|
|
|
"${ct?.type}/${ct?.subtype}",
|
|
|
|
|
|
|
|
ct?.charset()?.name() ?: "utf-8",
|
|
|
|
|
|
|
|
response.body?.byteStream()
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}.getOrNull()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun shouldInterceptRequest(
|
|
|
|
|
|
|
|
view: WebView?,
|
|
|
|
|
|
|
|
request: WebResourceRequest?
|
|
|
|
|
|
|
|
): WebResourceResponse? {
|
|
|
|
|
|
|
|
return request?.url?.toString()?.let(::doRequest)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun doRequest(url: String): WebResourceResponse? = runCatching {
|
|
|
|
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(url)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
val response = okHttp.newCall(request).execute()
|
|
|
|
|
|
|
|
val ct = response.body?.contentType()
|
|
|
|
|
|
|
|
WebResourceResponse(
|
|
|
|
|
|
|
|
"${ct?.type}/${ct?.subtype}",
|
|
|
|
|
|
|
|
ct?.charset()?.name() ?: "utf-8",
|
|
|
|
|
|
|
|
response.body?.byteStream()
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}.getOrNull()
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|