From 788b56d9cc58a202030fa05de33beab86e2ea030 Mon Sep 17 00:00:00 2001 From: Brayan Oliveira <69634269+brayandso@users.noreply.github.com> Date: Fri, 22 Dec 2023 19:17:48 -0300 Subject: [PATCH] refactor: extract viewerAssetLoader --- .../com/ichi2/anki/AbstractFlashcardViewer.kt | 22 +------- .../java/com/ichi2/anki/ViewerAssetLoader.kt | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 AnkiDroid/src/main/java/com/ichi2/anki/ViewerAssetLoader.kt diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt index 0d11d5e059d2..244867654504 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AbstractFlashcardViewer.kt @@ -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 @@ -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) { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/ViewerAssetLoader.kt b/AnkiDroid/src/main/java/com/ichi2/anki/ViewerAssetLoader.kt new file mode 100644 index 000000000000..813516d0ebda --- /dev/null +++ b/AnkiDroid/src/main/java/com/ichi2/anki/ViewerAssetLoader.kt @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Brayan Oliveira + * + * 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 . + */ +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() +}