From db1eb144369013f50a277516e6886b1285935807 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 23 Sep 2022 13:59:00 +0200 Subject: [PATCH 1/7] catch player errors --- .../libretube/ui/fragments/PlayerFragment.kt | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index d25c8a525..dc3f23ac6 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -78,6 +78,7 @@ import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.MediaItem import com.google.android.exoplayer2.MediaItem.SubtitleConfiguration import com.google.android.exoplayer2.MediaItem.fromUri +import com.google.android.exoplayer2.PlaybackException import com.google.android.exoplayer2.Player import com.google.android.exoplayer2.audio.AudioAttributes import com.google.android.exoplayer2.ext.cronet.CronetDataSource @@ -971,22 +972,6 @@ class PlayerFragment : BaseFragment() { } } - override fun onVideoSizeChanged( - videoSize: VideoSize - ) { - // Set new width/height of view - // height or width must be cast to float as int/int will give 0 - - // Redraw the player container with the new layout height - val params = binding.player.layoutParams - params.height = videoSize.height / videoSize.width * params.width - binding.player.layoutParams = params - binding.player.requestLayout() - (binding.mainContainer.layoutParams as ConstraintLayout.LayoutParams).apply { - matchConstraintPercentHeight = (videoSize.height / videoSize.width).toFloat() - } - } - override fun onPlaybackStateChanged(playbackState: Int) { exoPlayerView.keepScreenOn = !( playbackState == Player.STATE_IDLE || @@ -1032,6 +1017,18 @@ class PlayerFragment : BaseFragment() { } super.onPlaybackStateChanged(playbackState) } + + /** + * Catch player errors to prevent the app from stopping + */ + override fun onPlayerError(error: PlaybackException) { + Toast.makeText( + context, + error.localizedMessage, + Toast.LENGTH_LONG + ).show() + super.onPlayerError(error) + } }) // check if livestream From 377aa06b2fb798ceeb7cbe03c3ba0aa56a24ab26 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 23 Sep 2022 14:03:32 +0200 Subject: [PATCH 2/7] remove unused arrays --- .../libretube/ui/fragments/PlayerFragment.kt | 2 -- app/src/main/res/values/array.xml | 14 +------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index dc3f23ac6..b6011c043 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -25,7 +25,6 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.constraintlayout.motion.widget.MotionLayout -import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.net.toUri import androidx.core.os.bundleOf import androidx.core.view.isVisible @@ -92,7 +91,6 @@ import com.google.android.exoplayer2.ui.StyledPlayerView import com.google.android.exoplayer2.upstream.DataSource import com.google.android.exoplayer2.upstream.DefaultDataSource import com.google.android.exoplayer2.upstream.DefaultHttpDataSource -import com.google.android.exoplayer2.video.VideoSize import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index a1a092ba8..ed8a3dc8d 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -573,18 +573,6 @@ purple - - @string/startpage - @string/subscriptions - @string/library - - - - home - subscriptions - library - - @string/hls 1080p @@ -595,7 +583,7 @@ 144p - + 1080p 720p 480p From d1351e0f67b395a727edc46554fd9b8ac86f6073 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 23 Sep 2022 14:04:55 +0200 Subject: [PATCH 3/7] only show selected navbar item by default --- app/src/main/java/com/github/libretube/util/NavBarHelper.kt | 2 +- app/src/main/res/values/array.xml | 4 ++-- app/src/main/res/xml/appearance_settings.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/github/libretube/util/NavBarHelper.kt b/app/src/main/java/com/github/libretube/util/NavBarHelper.kt index 32f66fda1..f29aae643 100644 --- a/app/src/main/java/com/github/libretube/util/NavBarHelper.kt +++ b/app/src/main/java/com/github/libretube/util/NavBarHelper.kt @@ -58,7 +58,7 @@ object NavBarHelper { */ fun applyNavBarStyle(bottomNav: BottomNavigationView): Int { val labelVisibilityMode = when ( - PreferenceHelper.getString(PreferenceKeys.LABEL_VISIBILITY, "always") + PreferenceHelper.getString(PreferenceKeys.LABEL_VISIBILITY, "selected") ) { "always" -> NavigationBarView.LABEL_VISIBILITY_LABELED "selected" -> NavigationBarView.LABEL_VISIBILITY_SELECTED diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index ed8a3dc8d..4bc7072a8 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -681,14 +681,14 @@ - @string/always @string/selected + @string/always @string/never - always selected + always never diff --git a/app/src/main/res/xml/appearance_settings.xml b/app/src/main/res/xml/appearance_settings.xml index 710120e19..96506ea06 100644 --- a/app/src/main/res/xml/appearance_settings.xml +++ b/app/src/main/res/xml/appearance_settings.xml @@ -44,7 +44,7 @@ Date: Fri, 23 Sep 2022 14:12:41 +0200 Subject: [PATCH 4/7] fix the playing queue --- .../sheets/VideoOptionsBottomSheet.kt | 2 +- .../github/libretube/util/AutoPlayHelper.kt | 2 +- .../com/github/libretube/util/PlayingQueue.kt | 31 +++++++++---------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt index a9a39b859..4fa406f94 100644 --- a/app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/sheets/VideoOptionsBottomSheet.kt @@ -78,7 +78,7 @@ class VideoOptionsBottomSheet( shareDialog.show(parentFragmentManager, ShareDialog::class.java.name) } context?.getString(R.string.play_next) -> { - PlayingQueue.playNext(videoId) + PlayingQueue.addAsNext(videoId) } context?.getString(R.string.add_to_queue) -> { PlayingQueue.add(videoId) diff --git a/app/src/main/java/com/github/libretube/util/AutoPlayHelper.kt b/app/src/main/java/com/github/libretube/util/AutoPlayHelper.kt index 497b4fb26..1e1f17e1f 100644 --- a/app/src/main/java/com/github/libretube/util/AutoPlayHelper.kt +++ b/app/src/main/java/com/github/libretube/util/AutoPlayHelper.kt @@ -40,7 +40,7 @@ class AutoPlayHelper( if (relatedStreams == null || relatedStreams.isEmpty()) return null var index = 0 var nextStreamId: String? = null - while (nextStreamId == null || PlayingQueue.containsBefore(nextStreamId)) { + while (nextStreamId == null || PlayingQueue.containsBeforeCurrent(nextStreamId)) { nextStreamId = relatedStreams[index].url!!.toID() if (index + 1 < relatedStreams.size) { index += 1 diff --git a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt index 651ff963c..7063c1d7d 100644 --- a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt +++ b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt @@ -4,17 +4,13 @@ object PlayingQueue { private val queue = mutableListOf() private var currentVideoId: String? = null - fun clear() { - queue.clear() - } - fun add(videoId: String) { if (currentVideoId == videoId) return if (queue.contains(videoId)) queue.remove(videoId) queue.add(videoId) } - fun playNext(videoId: String) { + fun addAsNext(videoId: String) { if (currentVideoId == videoId) return if (queue.contains(videoId)) queue.remove(videoId) queue.add( @@ -24,11 +20,10 @@ object PlayingQueue { } fun getNext(): String? { - val currentIndex = queue.indexOf(currentVideoId) - return if (currentIndex >= queue.size) { + return try { + queue[currentIndex() + 1] + } catch (e: Exception) { null - } else { - queue[currentIndex + 1] } } @@ -41,18 +36,20 @@ object PlayingQueue { return queue.indexOf(currentVideoId) > 0 } - fun contains(videoId: String): Boolean { - return queue.contains(videoId) - } - - fun containsBefore(videoId: String): Boolean { - return queue.contains(videoId) && queue.indexOf(videoId) < queue.indexOf(currentVideoId) - } - fun updateCurrent(videoId: String) { currentVideoId = videoId queue.add(videoId) } fun isNotEmpty() = queue.isNotEmpty() + + fun clear() = queue.clear() + + fun currentIndex() = queue.indexOf(currentVideoId) + + fun contains(videoId: String) = queue.contains(videoId) + + fun containsBeforeCurrent(videoId: String): Boolean { + return queue.contains(videoId) && queue.indexOf(videoId) < currentIndex() + } } From 6e663cff415beeda2b54c824f4b747b4335876e0 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 23 Sep 2022 14:15:55 +0200 Subject: [PATCH 5/7] fix some prefs --- .../ui/views/MaterialPreferenceFragment.kt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/views/MaterialPreferenceFragment.kt b/app/src/main/java/com/github/libretube/ui/views/MaterialPreferenceFragment.kt index 01abb2ea0..8964b4570 100644 --- a/app/src/main/java/com/github/libretube/ui/views/MaterialPreferenceFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/views/MaterialPreferenceFragment.kt @@ -36,7 +36,10 @@ open class MaterialPreferenceFragment : PreferenceFragmentCompat() { preference.callChangeListener(newValue) // invoke the on change listeners - preference.callChangeListener(preference.value) + if (preference.callChangeListener(newValue)) { + preference.value = newValue + } + dialog.dismiss() } .setNegativeButton(R.string.cancel, null) .show() @@ -52,14 +55,13 @@ open class MaterialPreferenceFragment : PreferenceFragmentCompat() { MaterialAlertDialogBuilder(requireContext()) .setTitle(preference.title) .setView(binding.root) - .setPositiveButton(R.string.okay) { _, _ -> - // save the new value - preference.text = binding.input.text.toString() - - // invoke the on change listeners - preference.callChangeListener(preference.text) + .setPositiveButton(android.R.string.ok) { _, _ -> + val newValue = binding.input.text.toString() + if (preference.callChangeListener(newValue)) { + preference.text = newValue + } } - .setNegativeButton(R.string.cancel, null) + .setNegativeButton(android.R.string.cancel, null) .show() } /** From c637a0e10690f850eccb174fb35915af0e90b518 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 23 Sep 2022 14:21:32 +0200 Subject: [PATCH 6/7] improve bottom sheet layout --- .../libretube/ui/adapters/BottomSheetAdapter.kt | 10 ---------- app/src/main/res/layout/bottom_sheet.xml | 2 +- app/src/main/res/layout/bottom_sheet_item.xml | 11 +++++++---- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/adapters/BottomSheetAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/BottomSheetAdapter.kt index 35076697d..656ea1ac9 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/BottomSheetAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/BottomSheetAdapter.kt @@ -35,16 +35,6 @@ class BottomSheetAdapter( root.setOnClickListener { listener.invoke(position) } - - // increase padding if there's no drawable - if (item.drawable == null) { - root.setPadding( - root.paddingLeft * 2, - root.paddingTop, - root.paddingRight, - root.paddingBottom - ) - } } } diff --git a/app/src/main/res/layout/bottom_sheet.xml b/app/src/main/res/layout/bottom_sheet.xml index 89de54a36..7c6ebba35 100644 --- a/app/src/main/res/layout/bottom_sheet.xml +++ b/app/src/main/res/layout/bottom_sheet.xml @@ -9,7 +9,7 @@ style="@style/Widget.Material3.BottomSheet" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingBottom="10dp" + android:paddingBottom="20dp" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> + android:paddingHorizontal="30dp" + android:paddingVertical="12dp"> From bac4b6ecc37e72ce5b88817b88c688c5e4ede446 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 23 Sep 2022 14:29:16 +0200 Subject: [PATCH 7/7] improved download dialog --- .../github/libretube/ui/dialogs/DownloadDialog.kt | 2 -- app/src/main/res/layout/dialog_download.xml | 15 ++++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/DownloadDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/DownloadDialog.kt index d590722e1..9a1236a2a 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/DownloadDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/DownloadDialog.kt @@ -34,11 +34,9 @@ class DownloadDialog( binding.audioRadio.setOnClickListener { binding.videoSpinner.visibility = View.GONE - binding.audioSpinner.visibility = View.VISIBLE } binding.videoRadio.setOnClickListener { - binding.audioSpinner.visibility = View.GONE binding.videoSpinner.visibility = View.VISIBLE } diff --git a/app/src/main/res/layout/dialog_download.xml b/app/src/main/res/layout/dialog_download.xml index 471ef9f5d..0743059f1 100644 --- a/app/src/main/res/layout/dialog_download.xml +++ b/app/src/main/res/layout/dialog_download.xml @@ -2,7 +2,8 @@ + android:orientation="vertical" + android:paddingHorizontal="20dp"> @@ -30,7 +30,7 @@ android:id="@+id/audio_radio" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="10dp" + android:layout_marginStart="20dp" android:text="@string/audio" /> @@ -39,19 +39,20 @@ android:id="@+id/video_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="8dp" /> + android:layout_marginVertical="10dp" /> + android:layout_marginVertical="10dp" />