From 14d71343de4ff0edb860d7b3c251fbe179862b9e Mon Sep 17 00:00:00 2001
From: deniscerri <64997243+deniscerri@users.noreply.github.com>
Date: Sat, 19 Sep 2026 12:35:29 +0200
Subject: [PATCH] add separate process for incognito mode in webview
---
app/src/main/AndroidManifest.xml | 6 ++++++
app/src/main/java/com/deniscerri/ytdl/App.kt | 11 +++++++++++
.../com/deniscerri/ytdl/database/DBManager.kt | 1 +
.../ytdl/ui/more/cookies/CookiesFragment.kt | 12 +++++++-----
.../ytdl/ui/more/cookies/WebViewActivity.kt | 19 ++++++++++---------
.../more/cookies/WebViewActivityIncognito.kt | 4 ++++
.../webview/PoTokenWebViewLoginActivity.kt | 2 --
app/src/main/res/menu/webview_menu.xml | 7 -------
8 files changed, 39 insertions(+), 23 deletions(-)
create mode 100644 app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivityIncognito.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a023e1b7..4a585b18 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -529,6 +529,8 @@
+
+
+
+
diff --git a/app/src/main/java/com/deniscerri/ytdl/App.kt b/app/src/main/java/com/deniscerri/ytdl/App.kt
index 5fa1abf2..787b5bf9 100644
--- a/app/src/main/java/com/deniscerri/ytdl/App.kt
+++ b/app/src/main/java/com/deniscerri/ytdl/App.kt
@@ -2,7 +2,9 @@ package com.deniscerri.ytdl
import android.app.Application
import android.content.Intent
+import android.os.Build
import android.os.Looper
+import android.webkit.WebView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.content.edit
@@ -62,6 +64,15 @@ class App : Application() {
BgUtilsPoTokenGeneratorUtil.acquireServer(this@App)
}
+ val processName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ getProcessName()
+ } else {
+ packageName
+ }
+ if (processName.endsWith(":incognito_process") && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ WebView.setDataDirectorySuffix("incognito_store")
+ }
+
}catch (e: Exception){
Looper.prepare().runCatching {
Toast.makeText(this@App, e.message, Toast.LENGTH_SHORT).show()
diff --git a/app/src/main/java/com/deniscerri/ytdl/database/DBManager.kt b/app/src/main/java/com/deniscerri/ytdl/database/DBManager.kt
index 008c2910..2be5238a 100644
--- a/app/src/main/java/com/deniscerri/ytdl/database/DBManager.kt
+++ b/app/src/main/java/com/deniscerri/ytdl/database/DBManager.kt
@@ -101,6 +101,7 @@ abstract class DBManager : RoomDatabase(){
)
.addTypeConverter(Converters())
.addMigrations(*Migrations.migrationList)
+ .enableMultiInstanceInvalidation()
.build()
instance = dbInstance
dbInstance
diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/CookiesFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/CookiesFragment.kt
index dd254f7e..c8acc430 100644
--- a/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/CookiesFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/CookiesFragment.kt
@@ -207,12 +207,14 @@ class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener {
save.isVisible = item != null
getCookies.setOnClickListener {
- val myIntent = Intent(requireContext(), WebViewActivity::class.java)
- myIntent.putExtra("url", urlEditText.text.toString())
- myIntent.putExtra("description", descriptionEditText.text.toString())
- myIntent.putExtra("incognito", incognitoSwitch.isChecked)
+ val intent = Intent(
+ requireContext(),
+ if (incognitoSwitch.isChecked) WebViewActivityIncognito::class.java else WebViewActivity::class.java
+ )
+ intent.putExtra("url", urlEditText.text.toString())
+ intent.putExtra("description", descriptionEditText.text.toString())
layout.dismiss()
- startActivity(myIntent)
+ startActivity(intent)
}
item?.apply {
diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivity.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivity.kt
index a13d6f56..d8c504d5 100644
--- a/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivity.kt
@@ -1,6 +1,8 @@
package com.deniscerri.ytdl.ui.more.cookies
import android.annotation.SuppressLint
+import android.app.Application
+import android.content.Intent
import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
@@ -29,7 +31,8 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class WebViewActivity : BaseActivity() {
+
+open class WebViewActivity : BaseActivity() {
private lateinit var cookiesViewModel: CookieViewModel
private var webView: WebView? = null
private lateinit var toolbar: MaterialToolbar
@@ -41,15 +44,18 @@ class WebViewActivity : BaseActivity() {
private lateinit var webViewClient: WebViewClient
private lateinit var preferences: SharedPreferences
- private var incognito: Boolean = false
-
@SuppressLint("SetJavaScriptEnabled")
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.webview_activity)
url = intent.getStringExtra("url") ?: return finish()
description = intent.getStringExtra("description") ?: ""
- incognito = intent.getBooleanExtra("incognito", false)
+
+ val incognito = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ Application.getProcessName()
+ } else {
+ this@WebViewActivity.packageName
+ }.endsWith(":incognito_process")
cookiesViewModel = ViewModelProvider(this)[CookieViewModel::class.java]
lifecycleScope.launch {
@@ -61,15 +67,10 @@ class WebViewActivity : BaseActivity() {
toolbar.menu.children.firstOrNull { it.itemId == R.id.get_data_sync_id }?.isVisible = false
}
- toolbar.menu.children.firstOrNull { it.itemId == R.id.incognito }?.isChecked = incognito
toolbar.menu.children.firstOrNull { it.itemId == R.id.get_data_sync_id }?.isVisible = false
toolbar.setOnMenuItemClickListener { m : MenuItem ->
when(m.itemId) {
- R.id.incognito -> {
- intent.putExtra("incognito", !incognito)
- recreate()
- }
R.id.desktop -> {
m.isChecked = !m.isChecked
webView.apply {
diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivityIncognito.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivityIncognito.kt
new file mode 100644
index 00000000..5d6ff532
--- /dev/null
+++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/cookies/WebViewActivityIncognito.kt
@@ -0,0 +1,4 @@
+package com.deniscerri.ytdl.ui.more.cookies
+
+class WebViewActivityIncognito : WebViewActivity() {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt
index de3c5327..1d889bf1 100644
--- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/generateyoutubepotokens/webview/PoTokenWebViewLoginActivity.kt
@@ -67,8 +67,6 @@ class PoTokenWebViewLoginActivity : BaseActivity() {
lifecycleScope.launch {
val appbar = findViewById(R.id.webview_appbarlayout)
toolbar = appbar.findViewById(R.id.webviewToolbar)
- //hide incognito
- toolbar.menu.children.firstOrNull { it.itemId == R.id.incognito }?.isVisible = false
toolbar.setOnMenuItemClickListener { m : MenuItem ->
when(m.itemId) {
R.id.get_data_sync_id -> {
diff --git a/app/src/main/res/menu/webview_menu.xml b/app/src/main/res/menu/webview_menu.xml
index 28838e06..bde7ce50 100644
--- a/app/src/main/res/menu/webview_menu.xml
+++ b/app/src/main/res/menu/webview_menu.xml
@@ -6,13 +6,6 @@
android:id="@+id/get_data_sync_id"
android:title="@string/get_data_sync_id" />
-
-
-