Browse Source

Add advanced setting to clear WebView data

arkon 2 years ago
parent
commit
2b76a97989

+ 29 - 0
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"

+ 3 - 1
app/src/main/res/values/strings.xml

@@ -469,7 +469,7 @@
     <string name="pref_clear_chapter_cache">Clear chapter cache</string>
     <string name="used_cache">Used: %1$s</string>
     <string name="cache_deleted">Cache cleared. %1$d files have been deleted</string>
-    <string name="cache_delete_error">An error occurred while clearing cache</string>
+    <string name="cache_delete_error">Error occurred while clearing</string>
     <string name="pref_auto_clear_chapter_cache">Clear chapter cache on app close</string>
     <string name="pref_clear_database">Clear database</string>
     <string name="pref_clear_database_summary">Delete history for manga that are not saved in your library</string>
@@ -477,6 +477,8 @@
     <string name="clear_database_confirmation">Are you sure? Read chapters and progress of non-library manga will be lost</string>
     <string name="clear_database_completed">Entries deleted</string>
     <string name="database_clean">Database clean</string>
+    <string name="pref_clear_webview_data">Clear WebView data</string>
+    <string name="webview_data_deleted">WebView data cleared</string>
     <string name="pref_refresh_library_covers">Refresh library manga covers</string>
     <string name="pref_refresh_library_tracking">Refresh tracking</string>
     <string name="pref_refresh_library_tracking_summary">Updates status, score and last chapter read from the tracking services</string>