add separate process for incognito mode in webview

pull/1366/head
deniscerri 4 days ago
parent 3589b405a9
commit 14d71343de
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -529,6 +529,8 @@
</intent-filter>
</activity>
<activity android:name=".ui.more.cookies.WebViewActivityIncognito" android:process=":incognito_process" />
<activity
android:name=".ui.more.settings.advanced.generateyoutubepotokens.webview.PoTokenWebViewLoginActivity"
android:configChanges="locale"
@ -609,6 +611,10 @@
android:foregroundServiceType="specialUse"
android:exported="false" />
<service
android:name="androidx.room.MultiInstanceInvalidationService"
android:exported="false" />
</application>
</manifest>

@ -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()

@ -101,6 +101,7 @@ abstract class DBManager : RoomDatabase(){
)
.addTypeConverter(Converters())
.addMigrations(*Migrations.migrationList)
.enableMultiInstanceInvalidation()
.build()
instance = dbInstance
dbInstance

@ -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 {

@ -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 {

@ -0,0 +1,4 @@
package com.deniscerri.ytdl.ui.more.cookies
class WebViewActivityIncognito : WebViewActivity() {
}

@ -67,8 +67,6 @@ class PoTokenWebViewLoginActivity : BaseActivity() {
lifecycleScope.launch {
val appbar = findViewById<AppBarLayout>(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 -> {

@ -6,13 +6,6 @@
android:id="@+id/get_data_sync_id"
android:title="@string/get_data_sync_id" />
<item
android:id="@+id/incognito"
android:title="@string/incognito"
android:checkable="true"
app:showAsAction="never" />
<item
android:id="@+id/desktop"
android:title="@string/desktop"

Loading…
Cancel
Save