From dbf274824d04d98a5650fa4bda1387801a879006 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Fri, 29 Nov 2024 22:47:44 +0100 Subject: [PATCH] fixes --- .../java/com/deniscerri/ytdl/MainActivity.kt | 180 +++++++++--------- .../database/viewmodel/DownloadViewModel.kt | 4 +- .../ytdl/ui/more/CommandTemplatesFragment.kt | 4 +- .../more/settings/DownloadSettingsFragment.kt | 4 +- .../more/settings/GeneralSettingsFragment.kt | 16 +- .../com/deniscerri/ytdl/util/FormatUtil.kt | 5 +- .../ytdl/util/extractors/YTDLPUtil.kt | 2 +- app/src/main/res/xml/advanced_preferences.xml | 2 +- 8 files changed, 114 insertions(+), 103 deletions(-) diff --git a/app/src/main/java/com/deniscerri/ytdl/MainActivity.kt b/app/src/main/java/com/deniscerri/ytdl/MainActivity.kt index 6a1a2375..358d82f3 100644 --- a/app/src/main/java/com/deniscerri/ytdl/MainActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdl/MainActivity.kt @@ -77,7 +77,8 @@ class MainActivity : BaseActivity() { private lateinit var resultViewModel: ResultViewModel private lateinit var cookieViewModel: CookieViewModel private lateinit var downloadViewModel: DownloadViewModel - private lateinit var navigationView: View + private var navigationView: NavigationView? = null + private var navigationBarView: NavigationBarView? = null private lateinit var navHostFragment : NavHostFragment private lateinit var navController : NavController @@ -106,38 +107,38 @@ class MainActivity : BaseActivity() { navHostFragment = supportFragmentManager.findFragmentById(R.id.frame_layout) as NavHostFragment navController = navHostFragment.findNavController() - navigationView = try { - findViewById(R.id.bottomNavigationView) - }catch (e: Exception){ - findViewById(R.id.navigationView) + kotlin.runCatching { + navigationView = findViewById(R.id.navigationView) + } + kotlin.runCatching { + navigationBarView = findViewById(R.id.bottomNavigationView) } - if (navigationView is NavigationBarView){ + navigationBarView?.apply { window.decorView.setOnApplyWindowInsetsListener { view: View, windowInsets: WindowInsets? -> val windowInsetsCompat = WindowInsetsCompat.toWindowInsetsCompat( windowInsets!!, view ) val isImeVisible = windowInsetsCompat.isVisible(WindowInsetsCompat.Type.ime()) - navigationView.visibility = - if (isImeVisible) View.GONE else View.VISIBLE + visibility = if (isImeVisible) View.GONE else View.VISIBLE view.onApplyWindowInsets(windowInsets) } } NavbarUtil.init(this) - if (navigationView is NavigationBarView){ + navigationBarView?.apply { if (savedInstanceState == null){ val graph = navController.navInflater.inflate(R.navigation.nav_graph) - graph.setStartDestination(NavbarUtil.getStartFragmentId(this)) + graph.setStartDestination(NavbarUtil.getStartFragmentId(this@MainActivity)) navController.graph = graph } - (navigationView as NavigationBarView).applyNavBarStyle() + applyNavBarStyle() - val showingDownloadQueue = NavbarUtil.getNavBarItems(this).any { n -> n.itemId == R.id.downloadQueueMainFragment && n.isVisible } + val showingDownloadQueue = NavbarUtil.getNavBarItems(this@MainActivity).any { n -> n.itemId == R.id.downloadQueueMainFragment && n.isVisible } - (navigationView as NavigationBarView).setupWithNavController(navController) - (navigationView as NavigationBarView).setOnItemReselectedListener { + setupWithNavController(navController) + setOnItemReselectedListener { when (it.itemId) { R.id.homeFragment -> { kotlin.runCatching { @@ -166,9 +167,9 @@ class MainActivity : BaseActivity() { } val activeDownloadsBadge = if (showingDownloadQueue) { - (navigationView as NavigationBarView).getOrCreateBadge(R.id.downloadQueueMainFragment) + getOrCreateBadge(R.id.downloadQueueMainFragment) }else{ - (navigationView as NavigationBarView).getOrCreateBadge(R.id.historyFragment) + getOrCreateBadge(R.id.historyFragment) } lifecycleScope.launch { downloadViewModel.activePausedDownloadsCount.collectLatest { @@ -182,14 +183,34 @@ class MainActivity : BaseActivity() { } } } + + val showingNavbarItems = NavbarUtil.getNavBarItems(this@MainActivity).filter { it.isVisible }.map { it.itemId } + navController.addOnDestinationChangedListener { _, destination, _ -> + Handler(Looper.getMainLooper()).post { + if (showingNavbarItems.contains(destination.id)) { + showBottomNavigation() + }else{ + hideBottomNavigation() + } + } + + } + + visibilityChanged { + if (it.isVisible){ + val curr = navController.currentDestination?.id + if (!showingNavbarItems.contains(curr)) hideBottomNavigation() + } + } } - if (navigationView is NavigationView){ - (navigationView as NavigationView).setupWithNavController(navController) + + navigationView?.apply { + setupWithNavController(navController) //terminate button - (navigationView as NavigationView).menu.getItem(8).setOnMenuItemClickListener { + menu.getItem(8).setOnMenuItemClickListener { if (preferences.getBoolean("ask_terminate_app", true)){ var doNotShowAgain = false - val terminateDialog = MaterialAlertDialogBuilder(this) + val terminateDialog = MaterialAlertDialogBuilder(this@MainActivity) terminateDialog.setTitle(getString(R.string.confirm_delete_history)) val dialogView = layoutInflater.inflate(R.layout.dialog_terminate_app, null) val checkbox = dialogView.findViewById(R.id.doNotShowAgain) @@ -227,37 +248,15 @@ class MainActivity : BaseActivity() { true } //settings button - (navigationView as NavigationView).menu.getItem(9).setOnMenuItemClickListener { + menu.getItem(9).setOnMenuItemClickListener { val intent = Intent(context, SettingsActivity::class.java) startActivity(intent) true } - (navigationView as NavigationView).getHeaderView(0).findViewById(R.id.title).text = ThemeUtil.getStyledAppName(this) + getHeaderView(0).findViewById(R.id.title).text = ThemeUtil.getStyledAppName(this@MainActivity) } - val showingNavbarItems = NavbarUtil.getNavBarItems(this).filter { it.isVisible }.map { it.itemId } - navController.addOnDestinationChangedListener { _, destination, _ -> - Handler(Looper.getMainLooper()).post { - if (navigationView is NavigationBarView){ - if (showingNavbarItems.contains(destination.id)) { - showBottomNavigation() - }else{ - hideBottomNavigation() - } - } - } - - } - - navigationView.visibilityChanged { - if (it.isVisible){ - val curr = navController.currentDestination?.id - if (!showingNavbarItems.contains(curr)) hideBottomNavigation() - } - } - - cookieViewModel.updateCookiesFile() val intent = intent handleIntents(intent) @@ -272,8 +271,8 @@ class MainActivity : BaseActivity() { this@MainActivity.getString(R.string.ytld_update_success) + " [${version}]", Snackbar.LENGTH_LONG) - if (navigationView is BottomNavigationView) { - snack.setAnchorView(navigationView) + navigationBarView?.apply { + snack.setAnchorView(this) } snack.show() } @@ -305,64 +304,65 @@ class MainActivity : BaseActivity() { fun hideBottomNavigation(){ - if (navigationView is BottomNavigationView){ - findViewById(R.id.frame_layout).updateLayoutParams { - bottomToTop = ConstraintLayout.LayoutParams.UNSET - bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID - } - navigationView.animate()?.translationY(navigationView.height.toFloat())?.setDuration(300)?.withEndAction { - navigationView.visibility = View.GONE - }?.start() - }else if (navigationView is NavigationRailView){ - findViewById(R.id.frame_layout).updateLayoutParams { - this.width = LayoutParams.MATCH_PARENT - } + navigationBarView?.apply { + if (this is BottomNavigationView){ + this@MainActivity.findViewById(R.id.frame_layout).updateLayoutParams { + bottomToTop = ConstraintLayout.LayoutParams.UNSET + bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID + } + this.animate()?.translationY(this.height.toFloat())?.setDuration(300)?.withEndAction { + this.visibility = View.GONE + }?.start() + }else if (this is NavigationRailView){ + this@MainActivity.findViewById(R.id.frame_layout).updateLayoutParams { + this.width = LayoutParams.MATCH_PARENT + } - if (resources.getBoolean(R.bool.is_right_to_left)){ - navigationView.animate()?.translationX(navigationView.width.toFloat())?.setDuration(300)?.withEndAction { - navigationView.visibility = View.GONE - }?.start() - }else{ - navigationView.animate()?.translationX(-navigationView.width.toFloat())?.setDuration(300)?.withEndAction { - navigationView.visibility = View.GONE - }?.start() + if (resources.getBoolean(R.bool.is_right_to_left)){ + this.animate()?.translationX(this.width.toFloat())?.setDuration(300)?.withEndAction { + this.visibility = View.GONE + }?.start() + }else{ + this.animate()?.translationX(-this.width.toFloat())?.setDuration(300)?.withEndAction { + this.visibility = View.GONE + }?.start() + } } } + + } fun showBottomNavigation(){ - if (navigationView is BottomNavigationView){ - findViewById(R.id.frame_layout).updateLayoutParams { - bottomToTop = R.id.bottomNavigationView - bottomToBottom = ConstraintLayout.LayoutParams.UNSET + navigationBarView?.apply { + if (this is BottomNavigationView){ + this@MainActivity.findViewById(R.id.frame_layout).updateLayoutParams { + bottomToTop = R.id.bottomNavigationView + bottomToBottom = ConstraintLayout.LayoutParams.UNSET + } + this.animate()?.translationY(0F)?.setDuration(300)?.withEndAction { + this.visibility = View.VISIBLE + }?.start() + }else if (this is NavigationRailView){ + this@MainActivity.findViewById(R.id.frame_layout).updateLayoutParams { + this.width = 0 + } + this.animate()?.translationX(0F)?.setDuration(300)?.withEndAction { + this.visibility = View.VISIBLE + }?.start() } - navigationView.animate()?.translationY(0F)?.setDuration(300)?.withEndAction { - navigationView.visibility = View.VISIBLE - }?.start() - }else if (navigationView is NavigationRailView){ - findViewById(R.id.frame_layout).updateLayoutParams { - this.width = 0 - } - navigationView.animate()?.translationX(0F)?.setDuration(300)?.withEndAction { - navigationView.visibility = View.VISIBLE - }?.start() } + } fun disableBottomNavigation(){ - if (navigationView is NavigationBarView){ - (navigationView as NavigationBarView).menu.forEach { it.isEnabled = false } - }else{ - (navigationView as NavigationView).menu.forEach { it.isEnabled = false } - } + navigationBarView?.menu?.forEach { it.isEnabled = false } + navigationView?.menu?.forEach { it.isEnabled = false } } fun enableBottomNavigation(){ - if (navigationView is NavigationBarView){ - (navigationView as NavigationBarView).menu.forEach { it.isEnabled = true } - }else{ - (navigationView as NavigationView).menu.forEach { it.isEnabled = true } - } + navigationBarView?.menu?.forEach { it.isEnabled = true } + navigationView?.menu?.forEach { it.isEnabled = true } } override fun onResume() { diff --git a/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/DownloadViewModel.kt b/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/DownloadViewModel.kt index ba11a052..656ea5aa 100644 --- a/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/DownloadViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdl/database/viewmodel/DownloadViewModel.kt @@ -531,7 +531,9 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel formatUtil.getGenericVideoFormats(resources).sortedByDescending { it.filesize } } - FormatUtil(application).sortVideoFormats(theFormats).first() + val sorted = FormatUtil(application).sortVideoFormats(theFormats) + println(sorted.map { it.vcodec }) + sorted.first() }catch (e: Exception){ formatUtil.getGenericVideoFormats(resources).first() } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/CommandTemplatesFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/CommandTemplatesFragment.kt index d700c4ea..603d56e5 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/CommandTemplatesFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/CommandTemplatesFragment.kt @@ -250,10 +250,10 @@ class CommandTemplatesFragment : Fragment(), TemplatesAdapter.OnItemClickListene private fun changeSortIcon(item: TextView, order: SORTING){ when(order){ SORTING.DESC ->{ - item.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_up, 0,0,0) + item.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_down, 0,0,0) } SORTING.ASC -> { - item.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_down, 0,0,0) + item.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_up, 0,0,0) } } } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt index e795e40f..425b9930 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt @@ -231,7 +231,7 @@ class DownloadSettingsFragment : BaseSettingsFragment() { } findPreference("buffer_size")?.apply { - val s = getString(R.string.limit_rate_summary) + val s = getString(R.string.buffer_size_summary) summary = if (text.isNullOrBlank()) { s }else { @@ -248,7 +248,7 @@ class DownloadSettingsFragment : BaseSettingsFragment() { } findPreference("socket_timeout")?.apply { - val s = getString(R.string.limit_rate_summary) + val s = getString(R.string.socket_timeout_description) summary = if (text.isNullOrBlank()) { s }else { diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt index 41395234..6e4575f0 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt @@ -254,17 +254,25 @@ class GeneralSettingsFragment : BaseSettingsFragment() { } findPreference("hide_thumbnails")?.apply { - summary = values.joinToString(", ") { entries[entryValues.indexOf(it)] } + values.filter { it.isNotBlank() }.apply { + summary = joinToString(", ") { entries[entryValues.indexOf(it)] } + } setOnPreferenceChangeListener { _, newValues -> - summary = (newValues as Set<*>).joinToString(", ") { entries[entryValues.indexOf(it)] } + (newValues as Set).filter { it.isNotBlank() }.apply { + summary = joinToString(", ") { entries[entryValues.indexOf(it)] } + } true } } findPreference("modify_download_card")?.apply { - summary = values.joinToString(", ") { entries[entryValues.indexOf(it)] } + values.filter { it.isNotBlank() }.apply { + summary = joinToString(", ") { entries[entryValues.indexOf(it)] } + } setOnPreferenceChangeListener { _, newValues -> - summary = (newValues as Set<*>).joinToString(", ") { entries[entryValues.indexOf(it)] } + (newValues as Set).filter { it.isNotBlank() }.apply { + summary = joinToString(", ") { entries[entryValues.indexOf(it)] } + } true } } diff --git a/app/src/main/java/com/deniscerri/ytdl/util/FormatUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/FormatUtil.kt index 790ae3cc..1bc3948e 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/FormatUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/FormatUtil.kt @@ -123,8 +123,9 @@ class FormatUtil(private var context: Context) { videoFormatIDPreference.contains(b.format_id).compareTo(videoFormatIDPreference.contains(a.format_id)) } "codec" -> { - "^(${videoCodecPreference}).+$".toRegex(RegexOption.IGNORE_CASE).matches(b.vcodec.uppercase()) - .compareTo("^(${videoCodecPreference}).+$".toRegex(RegexOption.IGNORE_CASE).matches(a.vcodec.uppercase())) + var first = "$videoCodecPreference".toRegex(RegexOption.IGNORE_CASE).containsMatchIn(b.vcodec.uppercase()) + var second = "$videoCodecPreference".toRegex(RegexOption.IGNORE_CASE).containsMatchIn(a.vcodec.uppercase()) + first.compareTo(second) } "resolution" -> { when (videoQualityPreference) { diff --git a/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt index 8b51ff3b..648fcc6e 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt @@ -1167,7 +1167,7 @@ class YTDLPUtil(private val context: Context) { } private fun getYoutubeExtractorArgs() : String { - val playerClient = sharedPreferences.getString("youtube_player_client", "default,mediaconnect")!!.split(",").filter { it.isNotBlank() }.toMutableList() + val playerClient = sharedPreferences.getString("youtube_player_client", "")!!.split(",").filter { it.isNotBlank() }.toMutableList() val extractorArgs = mutableListOf() val poToken = sharedPreferences.getString("youtube_po_token", "")!! diff --git a/app/src/main/res/xml/advanced_preferences.xml b/app/src/main/res/xml/advanced_preferences.xml index ed9f9c00..b29fa30a 100644 --- a/app/src/main/res/xml/advanced_preferences.xml +++ b/app/src/main/res/xml/advanced_preferences.xml @@ -4,7 +4,7 @@