general fixes webview activity

This commit is contained in:
deniscerri 2026-01-01 20:10:55 +01:00
parent 206277e704
commit 92f3bdb3cd
No known key found for this signature in database
GPG key ID: 95C43D517D830350
9 changed files with 37 additions and 37 deletions

View file

@ -435,10 +435,10 @@
</activity-alias> </activity-alias>
<activity <activity
android:name=".ui.more.WebViewActivity" android:name=".ui.more.cookies.WebViewActivity"
android:configChanges="locale" android:configChanges="locale"
android:exported="true" android:exported="true"
android:launchMode="singleTask" android:excludeFromRecents="true"
android:parentActivityName=".MainActivity" android:parentActivityName=".MainActivity"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<intent-filter> <intent-filter>
@ -452,7 +452,7 @@
android:name=".ui.more.settings.advanced.generateyoutubepotokens.webview.PoTokenWebViewLoginActivity" android:name=".ui.more.settings.advanced.generateyoutubepotokens.webview.PoTokenWebViewLoginActivity"
android:configChanges="locale" android:configChanges="locale"
android:exported="true" android:exported="true"
android:launchMode="singleTask" android:excludeFromRecents="true"
android:noHistory="true" android:noHistory="true"
android:parentActivityName=".ui.more.settings.SettingsActivity" android:parentActivityName=".ui.more.settings.SettingsActivity"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">

View file

@ -16,7 +16,7 @@ import com.deniscerri.ytdl.BuildConfig
import com.deniscerri.ytdl.database.DBManager import com.deniscerri.ytdl.database.DBManager
import com.deniscerri.ytdl.database.models.CookieItem import com.deniscerri.ytdl.database.models.CookieItem
import com.deniscerri.ytdl.database.repository.CookieRepository import com.deniscerri.ytdl.database.repository.CookieRepository
import com.deniscerri.ytdl.ui.more.WebViewActivity import com.deniscerri.ytdl.ui.more.cookies.WebViewActivity
import com.deniscerri.ytdl.util.FileUtil import com.deniscerri.ytdl.util.FileUtil
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -42,7 +42,7 @@ import com.deniscerri.ytdl.database.viewmodel.HistoryViewModel
import com.deniscerri.ytdl.database.viewmodel.ResultViewModel import com.deniscerri.ytdl.database.viewmodel.ResultViewModel
import com.deniscerri.ytdl.ui.adapter.HomeAdapter import com.deniscerri.ytdl.ui.adapter.HomeAdapter
import com.deniscerri.ytdl.ui.adapter.SearchSuggestionsAdapter import com.deniscerri.ytdl.ui.adapter.SearchSuggestionsAdapter
import com.deniscerri.ytdl.ui.more.WebViewActivity import com.deniscerri.ytdl.ui.more.cookies.WebViewActivity
import com.deniscerri.ytdl.util.Extensions.enableFastScroll import com.deniscerri.ytdl.util.Extensions.enableFastScroll
import com.deniscerri.ytdl.util.Extensions.isURL import com.deniscerri.ytdl.util.Extensions.isURL
import com.deniscerri.ytdl.util.NotificationUtil import com.deniscerri.ytdl.util.NotificationUtil

View file

@ -42,7 +42,7 @@ import com.deniscerri.ytdl.database.viewmodel.HistoryViewModel
import com.deniscerri.ytdl.database.viewmodel.ResultViewModel import com.deniscerri.ytdl.database.viewmodel.ResultViewModel
import com.deniscerri.ytdl.receiver.ShareActivity import com.deniscerri.ytdl.receiver.ShareActivity
import com.deniscerri.ytdl.ui.BaseActivity import com.deniscerri.ytdl.ui.BaseActivity
import com.deniscerri.ytdl.ui.more.WebViewActivity import com.deniscerri.ytdl.ui.more.cookies.WebViewActivity
import com.deniscerri.ytdl.util.UiUtil import com.deniscerri.ytdl.util.UiUtil
import com.facebook.shimmer.ShimmerFrameLayout import com.facebook.shimmer.ShimmerFrameLayout
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior

View file

@ -1,7 +1,7 @@
package com.deniscerri.ytdl.ui.more package com.deniscerri.ytdl.ui.more.cookies
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context.INPUT_METHOD_SERVICE import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
@ -32,6 +32,7 @@ import com.deniscerri.ytdl.R
import com.deniscerri.ytdl.database.models.CookieItem import com.deniscerri.ytdl.database.models.CookieItem
import com.deniscerri.ytdl.database.viewmodel.CookieViewModel import com.deniscerri.ytdl.database.viewmodel.CookieViewModel
import com.deniscerri.ytdl.ui.adapter.CookieAdapter import com.deniscerri.ytdl.ui.adapter.CookieAdapter
import com.deniscerri.ytdl.ui.more.cookies.WebViewActivity
import com.deniscerri.ytdl.util.Extensions.enableTextHighlight import com.deniscerri.ytdl.util.Extensions.enableTextHighlight
import com.deniscerri.ytdl.util.FileUtil import com.deniscerri.ytdl.util.FileUtil
import com.deniscerri.ytdl.util.UiUtil import com.deniscerri.ytdl.util.UiUtil
@ -51,7 +52,6 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener { class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener {
private lateinit var recyclerView: RecyclerView private lateinit var recyclerView: RecyclerView
private lateinit var listAdapter: CookieAdapter private lateinit var listAdapter: CookieAdapter
@ -136,7 +136,7 @@ class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener {
deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() } deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() }
deleteDialog.setPositiveButton(getString(R.string.ok)) { _: DialogInterface?, _: Int -> deleteDialog.setPositiveButton(getString(R.string.ok)) { _: DialogInterface?, _: Int ->
cookiesViewModel.deleteAll() cookiesViewModel.deleteAll()
kotlin.runCatching { runCatching {
FileUtil.getCookieFile(requireContext(), true){ FileUtil.getCookieFile(requireContext(), true){
File(it).apply { writeText("") } File(it).apply { writeText("") }
} }
@ -235,7 +235,7 @@ class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener {
getCookies.isEnabled = urlEditText.text.isNotEmpty() getCookies.isEnabled = urlEditText.text.isNotEmpty()
} }
val imm = mainActivity.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager val imm = mainActivity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
urlEditText.postDelayed({ urlEditText.postDelayed({
urlEditText.requestFocus() urlEditText.requestFocus()
imm.showSoftInput(urlEditText, 0) imm.showSoftInput(urlEditText, 0)
@ -262,7 +262,7 @@ class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener {
override fun onItemEnabledChanged(cookieItem: CookieItem, isEnabled: Boolean) { override fun onItemEnabledChanged(cookieItem: CookieItem, isEnabled: Boolean) {
lifecycleScope.launch { lifecycleScope.launch {
withContext(Dispatchers.IO){ withContext(Dispatchers.IO) {
cookiesViewModel.changeCookieEnabledState(cookieItem.id, isEnabled) cookiesViewModel.changeCookieEnabledState(cookieItem.id, isEnabled)
} }
} }
@ -280,7 +280,7 @@ class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener {
private var simpleCallback: ItemTouchHelper.SimpleCallback = private var simpleCallback: ItemTouchHelper.SimpleCallback =
object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT ) { object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT ) {
override fun onMove(recyclerView: RecyclerView,viewHolder: RecyclerView.ViewHolder,target: RecyclerView.ViewHolder override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder
): Boolean { ): Boolean {
return false return false
} }

View file

@ -1,4 +1,4 @@
package com.deniscerri.ytdl.ui.more package com.deniscerri.ytdl.ui.more.cookies
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.SharedPreferences import android.content.SharedPreferences
@ -9,7 +9,6 @@ import android.webkit.CookieManager
import android.webkit.WebSettings import android.webkit.WebSettings
import android.webkit.WebStorage import android.webkit.WebStorage
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewDatabase
import android.widget.Toast import android.widget.Toast
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -19,29 +18,22 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ComposeView
import androidx.core.view.children import androidx.core.view.children
import androidx.core.view.forEach
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.deniscerri.ytdl.R import com.deniscerri.ytdl.R
import com.deniscerri.ytdl.database.models.CookieItem
import com.deniscerri.ytdl.database.viewmodel.CookieViewModel import com.deniscerri.ytdl.database.viewmodel.CookieViewModel
import com.deniscerri.ytdl.ui.BaseActivity import com.deniscerri.ytdl.ui.BaseActivity
import com.deniscerri.ytdl.util.Extensions.isYoutubeURL import com.deniscerri.ytdl.util.Extensions.isYoutubeURL
import com.deniscerri.ytdl.util.UiUtil
import com.google.accompanist.web.AccompanistWebChromeClient import com.google.accompanist.web.AccompanistWebChromeClient
import com.google.accompanist.web.AccompanistWebViewClient import com.google.accompanist.web.AccompanistWebViewClient
import com.google.accompanist.web.WebView
import com.google.accompanist.web.rememberWebViewState import com.google.accompanist.web.rememberWebViewState
import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.hamcrest.Description
class WebViewActivity : BaseActivity() { class WebViewActivity : BaseActivity() {
private lateinit var cookiesViewModel: CookieViewModel private lateinit var cookiesViewModel: CookieViewModel
@ -109,7 +101,7 @@ class WebViewActivity : BaseActivity() {
override fun onPageFinished(view: WebView?, url: String?) { override fun onPageFinished(view: WebView?, url: String?) {
webView = view webView = view
super.onPageFinished(view, url) super.onPageFinished(view, url)
kotlin.runCatching { runCatching {
toolbar.title = view?.title ?: "" toolbar.title = view?.title ?: ""
cookies = cookieManager.getCookie(view?.url) cookies = cookieManager.getCookie(view?.url)
} }
@ -124,9 +116,9 @@ class WebViewActivity : BaseActivity() {
lifecycleScope.launch { lifecycleScope.launch {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
cookiesViewModel.getCookiesFromDB(url).getOrNull()?.let { cookiesViewModel.getCookiesFromDB(url).getOrNull()?.let {
kotlin.runCatching { runCatching {
cookiesViewModel.insert( cookiesViewModel.insert(
CookieItem( com.deniscerri.ytdl.database.models.CookieItem(
0, 0,
url, url,
it, it,
@ -154,8 +146,12 @@ class WebViewActivity : BaseActivity() {
} }
cookieManager = CookieManager.getInstance() cookieManager = CookieManager.getInstance()
cookieManager.removeAllCookies(null)
cookieManager.flush() if (savedInstanceState == null) {
cookieManager.removeAllCookies(null)
cookieManager.flush()
}
webViewCompose.apply { webViewCompose.apply {
setContent { WebViewView() } setContent { WebViewView() }
} }
@ -186,20 +182,23 @@ class WebViewActivity : BaseActivity() {
} }
} }
Scaffold(modifier = Modifier.fillMaxSize()) { paddingValues -> Scaffold(modifier = Modifier.Companion.fillMaxSize()) { paddingValues ->
WebView( com.google.accompanist.web.WebView(
state = rememberWebViewState(url), client = webViewClient, chromeClient = webViewChromeClient, state = rememberWebViewState(url),
modifier = Modifier client = webViewClient,
chromeClient = webViewChromeClient,
modifier = Modifier.Companion
.padding(paddingValues) .padding(paddingValues)
.fillMaxSize(), .fillMaxSize(),
captureBackPresses = false, factory = { context -> captureBackPresses = false,
factory = { context ->
WebView(context).apply { WebView(context).apply {
settings.run { settings.run {
if (!incognito) { if (!incognito) {
cacheMode = WebSettings.LOAD_DEFAULT cacheMode = WebSettings.LOAD_DEFAULT
domStorageEnabled = true domStorageEnabled = true
setGeolocationEnabled(true) setGeolocationEnabled(true)
}else { } else {
cacheMode = WebSettings.LOAD_NO_CACHE cacheMode = WebSettings.LOAD_NO_CACHE
domStorageEnabled = false domStorageEnabled = false
setGeolocationEnabled(false) setGeolocationEnabled(false)
@ -215,7 +214,8 @@ class WebViewActivity : BaseActivity() {
if (Build.VERSION.SDK_INT >= 26) { if (Build.VERSION.SDK_INT >= 26) {
safeBrowsingEnabled = true safeBrowsingEnabled = true
} }
preferences.edit().putString("useragent_header", userAgentString).apply() preferences.edit().putString("useragent_header", userAgentString)
.apply()
} }
cookieManager.setAcceptCookie(true) cookieManager.setAcceptCookie(true)
cookieManager.setAcceptThirdPartyCookies(this, true) cookieManager.setAcceptThirdPartyCookies(this, true)

View file

@ -118,7 +118,7 @@ class MainSettingsFragment : PreferenceFragmentCompat() {
} }
val updating = findPreference<Preference>("updating") val updating = findPreference<Preference>("updating")
updating?.summary = "${getString(R.string.update_ytdl)}$separator ${getString(R.string.format_source)}$separator ${getString(R.string.update_app)}" updating?.summary = "${getString(R.string.update_ytdl)}$separator ${getString(R.string.update_app)}"
updating?.setOnPreferenceClickListener { updating?.setOnPreferenceClickListener {
navController.navigate(R.id.action_mainSettingsFragment_to_updateSettingsFragment) navController.navigate(R.id.action_mainSettingsFragment_to_updateSettingsFragment)
true true

View file

@ -27,7 +27,7 @@ import com.deniscerri.ytdl.R
import com.deniscerri.ytdl.database.models.CookieItem import com.deniscerri.ytdl.database.models.CookieItem
import com.deniscerri.ytdl.database.models.YoutubeGeneratePoTokenItem import com.deniscerri.ytdl.database.models.YoutubeGeneratePoTokenItem
import com.deniscerri.ytdl.database.models.YoutubePoTokenItem import com.deniscerri.ytdl.database.models.YoutubePoTokenItem
import com.deniscerri.ytdl.ui.more.WebViewActivity import com.deniscerri.ytdl.ui.more.cookies.WebViewActivity
import com.deniscerri.ytdl.ui.more.settings.SettingsActivity import com.deniscerri.ytdl.ui.more.settings.SettingsActivity
import com.deniscerri.ytdl.ui.more.settings.advanced.generateyoutubepotokens.webview.PoTokenWebViewLoginActivity import com.deniscerri.ytdl.ui.more.settings.advanced.generateyoutubepotokens.webview.PoTokenWebViewLoginActivity
import com.deniscerri.ytdl.util.Extensions.enableTextHighlight import com.deniscerri.ytdl.util.Extensions.enableTextHighlight

View file

@ -89,7 +89,7 @@
tools:layout="@layout/fragment_terminal" /> tools:layout="@layout/fragment_terminal" />
<fragment <fragment
android:id="@+id/cookiesFragment" android:id="@+id/cookiesFragment"
android:name="com.deniscerri.ytdl.ui.more.CookiesFragment" android:name="com.deniscerri.ytdl.ui.more.cookies.CookiesFragment"
tools:layout="@layout/fragment_cookies" tools:layout="@layout/fragment_cookies"
android:label="CookiesFragment" /> android:label="CookiesFragment" />
<fragment <fragment