Fixed the WebView using from more than one process at once with the same data directory is not supported.

This commit is contained in:
MohitMaliFtechiz 2024-03-18 20:20:54 +05:30
parent 2a0b392b13
commit 39930b844e

View File

@ -18,35 +18,27 @@
package org.kiwix.kiwixmobile.core
import android.app.Application.getProcessName
import android.content.Context
import android.os.Build
import android.util.Log
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import androidx.webkit.ServiceWorkerClientCompat
import androidx.webkit.ServiceWorkerControllerCompat
import androidx.webkit.WebViewFeature
import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer
import javax.inject.Inject
class ServiceWorkerInitialiser @Inject constructor(
zimReaderContainer: ZimReaderContainer,
context: Context
) {
class ServiceWorkerInitialiser @Inject constructor(zimReaderContainer: ZimReaderContainer) {
init {
if (WebViewFeature.isFeatureSupported(WebViewFeature.SERVICE_WORKER_BASIC_USAGE)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val process = getProcessName()
if (context.packageName != process) {
WebView.setDataDirectorySuffix(process)
}
}
try {
ServiceWorkerControllerCompat.getInstance()
.setServiceWorkerClient(object : ServiceWorkerClientCompat() {
override fun shouldInterceptRequest(request: WebResourceRequest): WebResourceResponse? =
zimReaderContainer.load(request.url.toString(), request.requestHeaders)
})
} catch (ignore: Exception) {
Log.e("ServiceWorkerInitialiser", "Error setting up ServiceWorkerClient", ignore)
}
}
}
}