From b6b04054b92cd2b3f44b6f9ee6a1a8d3e47795df Mon Sep 17 00:00:00 2001 From: Kelvin Date: Sat, 31 Jan 2026 21:20:31 +0100 Subject: [PATCH] Clear cookies on startup & after login --- .../main/java/com/futo/platformplayer/Settings.kt | 6 +++++- .../engine/packages/PackageBrowser.kt | 5 +++++ .../mainactivity/main/SourceDetailFragment.kt | 14 +++++++++++++- .../com/futo/platformplayer/states/StateApp.kt | 2 ++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/Settings.kt b/app/src/main/java/com/futo/platformplayer/Settings.kt index 1bf1958c..3245bdd1 100644 --- a/app/src/main/java/com/futo/platformplayer/Settings.kt +++ b/app/src/main/java/com/futo/platformplayer/Settings.kt @@ -1047,8 +1047,12 @@ class Settings : FragmentedStorageFileJson() { @FormField(R.string.polycentric_local_cache, FieldForm.TOGGLE, R.string.polycentric_local_cache_description, 7) var polycentricLocalCache: Boolean = true; - var showPrivacyModeDialog: Boolean = true; + + + fun shouldClearWebviewCookies(): Boolean { + return true; + } } @FormField(R.string.gesture_controls, FieldForm.GROUP, -1, 19) diff --git a/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt b/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt index 3afd02e8..4f10215d 100644 --- a/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt +++ b/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt @@ -5,6 +5,7 @@ import android.webkit.ConsoleMessage import android.webkit.JavascriptInterface import android.webkit.ValueCallback import android.webkit.WebChromeClient +import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient import androidx.collection.emptyLongSet @@ -65,6 +66,10 @@ class PackageBrowser: V8Package { _readySemaphore = null; Logger.i("PackageBrowser", "Browser loaded"); } + + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + return false; + } } _browser?.webChromeClient = object : WebChromeClient() { override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourceDetailFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourceDetailFragment.kt index 7dce8716..15213239 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourceDetailFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourceDetailFragment.kt @@ -309,13 +309,14 @@ class SourceDetailFragment : MainFragment() { BigButton(c, context.getString(R.string.logout), context.getString(R.string.sign_out_of_the_platform), R.drawable.ic_logout) { logoutSource(); }, + if(!Settings.instance.other.shouldClearWebviewCookies()) BigButton(c, "Logout without Clear", "Logout but keep the browser cookies.\nThis allows for quick re-logging.", R.drawable.ic_logout) { logoutSource(false); }.apply { this.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT).apply { setMargins(0, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5f, resources.displayMetrics).toInt(), 0, 0); }; - } + } else null ) ); @@ -518,6 +519,17 @@ class SourceDetailFragment : MainFragment() { } Logger.e(TAG, "Failed to set plugin authentication (loginSource, loginWarning)", e) } + finally { + if(Settings.instance.other.shouldClearWebviewCookies()) { + try { + val cookieManager: CookieManager = + CookieManager.getInstance(); + cookieManager.removeAllCookies(null); + } catch (ex: Throwable) { + Logger.e(TAG, "Failed to clear cookies", ex); + } + } + } }; }, UIDialogs.ActionStyle.PRIMARY)) } diff --git a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt index b5fd97f0..48198dd3 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateApp.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateApp.kt @@ -448,6 +448,8 @@ class StateApp { _cacheDirectory?.let { ApiMethods.initCache(it) }; } + + Logger.i(TAG, "MainApp Starting: Initializing [ModerationsManager]"); ModerationsManager.initialize(context);