diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 80ab6a248..3d63ed49f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -6,6 +6,8 @@ import android.content.ActivityNotFoundException import android.content.Intent import android.os.Bundle import android.provider.Settings +import android.webkit.WebStorage +import android.webkit.WebView import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.net.toUri @@ -49,7 +51,9 @@ import eu.kanade.tachiyomi.util.preference.titleRes import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.isPackageInstalled +import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.powerManager +import eu.kanade.tachiyomi.util.system.setDefaultSettings import eu.kanade.tachiyomi.util.system.toast import exh.debug.SettingsDebugController import exh.log.EHLogLevel @@ -57,6 +61,7 @@ import exh.source.BlacklistedSources import exh.source.EH_SOURCE_ID import exh.source.EXH_SOURCE_ID import kotlinx.coroutines.Job +import logcat.LogPriority import rikka.sui.Sui import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -147,6 +152,12 @@ class SettingsAdvancedController : SettingsController() { titleRes = R.string.pref_auto_clear_chapter_cache defaultValue = false } + preference { + key = "pref_clear_webview_data" + titleRes = R.string.pref_clear_webview_data + + onClick { clearWebViewData() } + } preference { key = "pref_clear_database" titleRes = R.string.pref_clear_database @@ -486,11 +497,29 @@ class SettingsAdvancedController : SettingsController() { resources?.getString(R.string.used_cache, chapterCache.readableSize) } } catch (e: Throwable) { + logcat(LogPriority.ERROR, e) withUIContext { activity?.toast(R.string.cache_delete_error) } } } } + private fun clearWebViewData() { + if (activity == null) return + try { + val webview = WebView(activity!!) + webview.setDefaultSettings() + webview.clearCache(true) + webview.clearFormData() + webview.clearHistory() + webview.clearSslPreferences() + WebStorage.getInstance().deleteAllData() + activity?.toast(R.string.webview_data_deleted) + } catch (e: Throwable) { + logcat(LogPriority.ERROR, e) + activity?.toast(R.string.cache_delete_error) + } + } + private companion object { // SY --> private var job: Job? = null diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a66195873..9b722c3ab 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -469,7 +469,7 @@ Clear chapter cache Used: %1$s Cache cleared. %1$d files have been deleted - An error occurred while clearing cache + Error occurred while clearing Clear chapter cache on app close Clear database Delete history for manga that are not saved in your library @@ -477,6 +477,8 @@ Are you sure? Read chapters and progress of non-library manga will be lost Entries deleted Database clean + Clear WebView data + WebView data cleared Refresh library manga covers Refresh tracking Updates status, score and last chapter read from the tracking services