Skip to content

Commit

Permalink
refactor: extract viewerAssetLoader
Browse files Browse the repository at this point in the history
  • Loading branch information
BrayanDSO committed Dec 23, 2023
1 parent b93dce4 commit 788b56d
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ import com.ichi2.themes.Themes
import com.ichi2.themes.Themes.getResFromAttr
import com.ichi2.ui.FixedEditText
import com.ichi2.utils.*
import com.ichi2.utils.AssetHelper.guessMimeType
import com.ichi2.utils.ClipboardUtil.getText
import com.ichi2.utils.HandlerUtils.executeFunctionWithDelay
import com.ichi2.utils.HandlerUtils.newHandler
Expand Down Expand Up @@ -1059,27 +1058,8 @@ abstract class AbstractFlashcardViewer :
}

protected open fun createWebView(): WebView {
val mediaDir = CollectionHelper.getMediaDirectory(this).path
val domain = "$LOCALHOST:${server.listeningPort}"
val assetLoader = WebViewAssetLoader.Builder()
.setHttpAllowed(true)
.setDomain(domain)
.addPathHandler("/web/") { path: String ->
val inputStream = this.javaClass.classLoader!!.getResourceAsStream("web/$path")
WebResourceResponse(guessMimeType(path), null, inputStream)
}
.addPathHandler("/") { path: String ->
try {
val file = File(mediaDir, path)
val inputStream = FileInputStream(file)
WebResourceResponse(guessMimeType(path), null, inputStream)
} catch (e: Exception) {
Timber.w(e, "Error trying to open path in asset loader: %s", path)
null
}
}
.build()

val assetLoader = getViewerAssetLoader(domain)
val webView: WebView = MyWebView(this).apply {
scrollBarStyle = View.SCROLLBARS_OUTSIDE_OVERLAY
with(settings) {
Expand Down
50 changes: 50 additions & 0 deletions AnkiDroid/src/main/java/com/ichi2/anki/ViewerAssetLoader.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Copyright (c) 2023 Brayan Oliveira <[email protected]>
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.ichi2.anki

import android.content.Context
import android.webkit.WebResourceResponse
import androidx.webkit.WebViewAssetLoader
import com.ichi2.utils.AssetHelper.guessMimeType
import timber.log.Timber
import java.io.File
import java.io.FileInputStream

fun Context.getViewerAssetLoader(domain: String): WebViewAssetLoader {
val mediaDir = CollectionHelper.getMediaDirectory(this)
return WebViewAssetLoader.Builder()
.setHttpAllowed(true)
.setDomain(domain)
.addPathHandler("/assets/") { path ->
val inputStream = assets.open(path)
WebResourceResponse(guessMimeType(path), null, inputStream)
}
.addPathHandler("/web/") { path: String ->
val inputStream = this.javaClass.classLoader!!.getResourceAsStream("web/$path")
WebResourceResponse(guessMimeType(path), null, inputStream)
}
.addPathHandler("/") { path: String ->
try {
val file = File(mediaDir, path)
val inputStream = FileInputStream(file)
WebResourceResponse(guessMimeType(path), null, inputStream)
} catch (e: Exception) {
Timber.w(e, "Error trying to open path in asset loader: %s", path)
null
}
}
.build()
}

0 comments on commit 788b56d

Please sign in to comment.