From 37e10ae1910a76f84cb22542117c2abdb8bb7d30 Mon Sep 17 00:00:00 2001 From: crackededed <90209774+crackededed@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:24:04 +0200 Subject: [PATCH] fix player buttons (cherry picked from commit ddb1518b470216ccb45c06f160583e579429396c) --- app/build.gradle.kts | 4 +- .../xtra/ui/player/PlayerFragment.kt | 628 +++++++++--------- gradle/libs.versions.toml | 2 +- 3 files changed, 321 insertions(+), 313 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 99464bd9..c2fbf917 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -29,8 +29,8 @@ android { applicationId = "com.github.andreyasadchy.xtra" minSdk = 21 targetSdk = 35 - versionCode = 274 - versionName = "2.41.1" + versionCode = 275 + versionName = "2.41.2" } buildTypes { diff --git a/app/src/main/java/com/github/andreyasadchy/xtra/ui/player/PlayerFragment.kt b/app/src/main/java/com/github/andreyasadchy/xtra/ui/player/PlayerFragment.kt index 8a4bf51f..e29d359a 100644 --- a/app/src/main/java/com/github/andreyasadchy/xtra/ui/player/PlayerFragment.kt +++ b/app/src/main/java/com/github/andreyasadchy/xtra/ui/player/PlayerFragment.kt @@ -449,391 +449,399 @@ class PlayerFragment : BaseNetworkFragment(), LifecycleListener, SlidingLayout.L } } } - stream?.let { stream -> - viewLifecycleOwner.lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - viewModel.streamResult.collectLatest { - if (it != null) { - val headers = prefs.getString(C.PLAYER_STREAM_HEADERS, null)?.let { - try { - val json = JSONObject(it) - hashMapOf().apply { - json.keys().forEach { key -> - put(key, json.optString(key)) + stream.let { stream -> + if (stream != null) { + viewLifecycleOwner.lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.streamResult.collectLatest { + if (it != null) { + val headers = prefs.getString(C.PLAYER_STREAM_HEADERS, null)?.let { + try { + val json = JSONObject(it) + hashMapOf().apply { + json.keys().forEach { key -> + put(key, json.optString(key)) + } } + } catch (e: Exception) { + null } - } catch (e: Exception) { - null } + val proxyHost = prefs.getString(C.PROXY_HOST, null) + val proxyPort = prefs.getString(C.PROXY_PORT, null)?.toIntOrNull() + val proxyMultivariantPlaylist = prefs.getBoolean(C.PROXY_MULTIVARIANT_PLAYLIST, true) && !proxyHost.isNullOrBlank() && proxyPort != null + player?.sendCustomCommand( + SessionCommand( + PlaybackService.START_STREAM, bundleOf( + PlaybackService.ITEM to stream, + PlaybackService.URI to it, + PlaybackService.HEADERS_KEYS to headers?.keys?.toTypedArray(), + PlaybackService.HEADERS_VALUES to headers?.values?.toTypedArray(), + PlaybackService.PLAYLIST_AS_DATA to proxyMultivariantPlaylist + ) + ), Bundle.EMPTY + ) + player?.prepare() + viewModel.streamResult.value = null } - val proxyHost = prefs.getString(C.PROXY_HOST, null) - val proxyPort = prefs.getString(C.PROXY_PORT, null)?.toIntOrNull() - val proxyMultivariantPlaylist = prefs.getBoolean(C.PROXY_MULTIVARIANT_PLAYLIST, true) && !proxyHost.isNullOrBlank() && proxyPort != null - player?.sendCustomCommand( - SessionCommand( - PlaybackService.START_STREAM, bundleOf( - PlaybackService.ITEM to stream, - PlaybackService.URI to it, - PlaybackService.HEADERS_KEYS to headers?.keys?.toTypedArray(), - PlaybackService.HEADERS_VALUES to headers?.values?.toTypedArray(), - PlaybackService.PLAYLIST_AS_DATA to proxyMultivariantPlaylist - ) - ), Bundle.EMPTY - ) - player?.prepare() - viewModel.streamResult.value = null } } } - } - if (!requireContext().tokenPrefs().getString(C.USERNAME, null).isNullOrBlank() && - (!TwitchApiHelper.getGQLHeaders(requireContext(), true)[C.HEADER_TOKEN].isNullOrBlank() || - !TwitchApiHelper.getHelixHeaders(requireContext())[C.HEADER_TOKEN].isNullOrBlank()) - ) { - if (prefs.getBoolean(C.PLAYER_CHATBARTOGGLE, false) && !prefs.getBoolean(C.CHAT_DISABLE, false)) { - view.findViewById(R.id.playerChatBarToggle)?.apply { - visible() - setOnClickListener { toggleChatBar() } + if (!requireContext().tokenPrefs().getString(C.USERNAME, null).isNullOrBlank() && + (!TwitchApiHelper.getGQLHeaders(requireContext(), true)[C.HEADER_TOKEN].isNullOrBlank() || + !TwitchApiHelper.getHelixHeaders(requireContext())[C.HEADER_TOKEN].isNullOrBlank()) + ) { + if (prefs.getBoolean(C.PLAYER_CHATBARTOGGLE, false) && !prefs.getBoolean(C.CHAT_DISABLE, false)) { + view.findViewById(R.id.playerChatBarToggle)?.apply { + visible() + setOnClickListener { toggleChatBar() } + } } - } - slidingLayout.viewTreeObserver.addOnGlobalLayoutListener { - if (slidingLayout.isKeyboardShown) { - if (!isKeyboardShown) { - isKeyboardShown = true - if (!isPortrait) { - chatLayout.updateLayoutParams { width = (slidingLayout.width / 1.8f).toInt() } - showStatusBar() + slidingLayout.viewTreeObserver.addOnGlobalLayoutListener { + if (slidingLayout.isKeyboardShown) { + if (!isKeyboardShown) { + isKeyboardShown = true + if (!isPortrait) { + chatLayout.updateLayoutParams { width = (slidingLayout.width / 1.8f).toInt() } + showStatusBar() + } } - } - } else { - if (isKeyboardShown) { - isKeyboardShown = false - chatLayout.clearFocus() - if (!isPortrait) { - chatLayout.updateLayoutParams { width = chatWidthLandscape } - if (slidingLayout.isMaximized) { - hideStatusBar() + } else { + if (isKeyboardShown) { + isKeyboardShown = false + chatLayout.clearFocus() + if (!isPortrait) { + chatLayout.updateLayoutParams { width = chatWidthLandscape } + if (slidingLayout.isMaximized) { + hideStatusBar() + } } } } } } - } - viewLifecycleOwner.lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - viewModel.stream.collectLatest { - if (it != null) { - chatFragment?.updateStreamId(it.id) - if (prefs.getBoolean(C.CHAT_DISABLE, false) || - !prefs.getBoolean(C.CHAT_PUBSUB_ENABLED, true) || - requireView().findViewById(R.id.playerViewersText)?.text.isNullOrBlank() - ) { - updateViewerCount(it.viewerCount) - } - if (prefs.getBoolean(C.CHAT_DISABLE, false) || - !prefs.getBoolean(C.CHAT_PUBSUB_ENABLED, true) || - requireView().findViewById(R.id.playerTitle)?.text.isNullOrBlank() || - requireView().findViewById(R.id.playerCategory)?.text.isNullOrBlank() - ) { - updateStreamInfo(it.title, it.gameId, it.gameSlug, it.gameName) - } - if (prefs.getBoolean(C.PLAYER_SHOW_UPTIME, true) && - requireView().findViewById(R.id.playerUptime)?.isVisible == false - ) { - it.startedAt?.let { date -> - TwitchApiHelper.parseIso8601DateUTC(date)?.let { startedAtMs -> - updateUptime(startedAtMs) + viewLifecycleOwner.lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.stream.collectLatest { + if (it != null) { + chatFragment?.updateStreamId(it.id) + if (prefs.getBoolean(C.CHAT_DISABLE, false) || + !prefs.getBoolean(C.CHAT_PUBSUB_ENABLED, true) || + requireView().findViewById(R.id.playerViewersText)?.text.isNullOrBlank() + ) { + updateViewerCount(it.viewerCount) + } + if (prefs.getBoolean(C.CHAT_DISABLE, false) || + !prefs.getBoolean(C.CHAT_PUBSUB_ENABLED, true) || + requireView().findViewById(R.id.playerTitle)?.text.isNullOrBlank() || + requireView().findViewById(R.id.playerCategory)?.text.isNullOrBlank() + ) { + updateStreamInfo(it.title, it.gameId, it.gameSlug, it.gameName) + } + if (prefs.getBoolean(C.PLAYER_SHOW_UPTIME, true) && + requireView().findViewById(R.id.playerUptime)?.isVisible == false + ) { + it.startedAt?.let { date -> + TwitchApiHelper.parseIso8601DateUTC(date)?.let { startedAtMs -> + updateUptime(startedAtMs) + } } } } } } } - } - if (prefs.getBoolean(C.PLAYER_RESTART, true)) { - requireView().findViewById(R.id.playerRestart)?.apply { - visible() - setOnClickListener { restartPlayer() } - } - } - if (prefs.getBoolean(C.PLAYER_SEEKLIVE, false)) { - requireView().findViewById(R.id.playerSeekLive)?.apply { - visible() - setOnClickListener { player?.seekToDefaultPosition() } - } - } - if (prefs.getBoolean(C.PLAYER_VIEWERLIST, false)) { - requireView().findViewById(R.id.playerViewers)?.apply { - setOnClickListener { openViewerList() } + if (prefs.getBoolean(C.PLAYER_RESTART, true)) { + requireView().findViewById(R.id.playerRestart)?.apply { + visible() + setOnClickListener { restartPlayer() } + } } - } - if (prefs.getBoolean(C.PLAYER_SHOW_UPTIME, true)) { - stream.startedAt?.let { - TwitchApiHelper.parseIso8601DateUTC(it)?.let { startedAtMs -> - updateUptime(startedAtMs) + if (prefs.getBoolean(C.PLAYER_SEEKLIVE, false)) { + requireView().findViewById(R.id.playerSeekLive)?.apply { + visible() + setOnClickListener { player?.seekToDefaultPosition() } } } - } - requireView().findViewById