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 b8097f5d6..5d01b61ef 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
@@ -4,6 +4,8 @@ import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Intent
import android.provider.Settings
+import android.webkit.WebStorage
+import android.webkit.WebView
import androidx.core.net.toUri
import androidx.preference.PreferenceScreen
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -39,8 +41,11 @@ import eu.kanade.tachiyomi.util.preference.switchPreference
import eu.kanade.tachiyomi.util.preference.titleRes
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 logcat.LogPriority
import rikka.sui.Sui
import uy.kohesive.injekt.injectLazy
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
@@ -139,6 +144,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
@@ -275,10 +286,28 @@ 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 const val CLEAR_CACHE_KEY = "pref_clear_cache_key"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8346aee7a..a3e513286 100644
--- 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