From 5fa4233561399b5efe7028bdf2aaf4fff45a27cc Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 22 Feb 2023 11:15:43 +0100 Subject: [PATCH] Stats for nerds --- .../libretube/ui/dialogs/StatsDialog.kt | 42 +++++++++++++++++ .../libretube/ui/fragments/PlayerFragment.kt | 7 +++ .../ui/interfaces/OnlinePlayerOptions.kt | 2 + .../libretube/ui/views/CustomExoPlayerView.kt | 6 +++ .../com/github/libretube/util/TextUtils.kt | 5 ++ app/src/main/res/drawable/ic_info.xml | 8 ++-- app/src/main/res/layout/dialog_stats.xml | 47 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/style.xml | 9 ++++ 9 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/github/libretube/ui/dialogs/StatsDialog.kt create mode 100644 app/src/main/res/layout/dialog_stats.xml diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/StatsDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/StatsDialog.kt new file mode 100644 index 0000000000..c8fe8bb446 --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/dialogs/StatsDialog.kt @@ -0,0 +1,42 @@ +package com.github.libretube.ui.dialogs + +import android.annotation.SuppressLint +import android.app.Dialog +import android.os.Bundle +import androidx.fragment.app.DialogFragment +import com.github.libretube.R +import com.github.libretube.databinding.DialogStatsBinding +import com.github.libretube.util.TextUtils +import com.google.android.exoplayer2.ExoPlayer +import com.google.android.material.dialog.MaterialAlertDialogBuilder + +class StatsDialog( + private val player: ExoPlayer, + private val videoId: String +) : DialogFragment() { + + @SuppressLint("SetTextI18n") + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val binding = DialogStatsBinding.inflate(layoutInflater) + binding.videoId.setText(videoId) + binding.videoInfo.setText( + "${player.videoFormat?.codecs.orEmpty()} ${TextUtils.formatBitrate( + player.videoFormat?.bitrate + )}" + ) + binding.audioInfo.setText( + "${player.audioFormat?.codecs.orEmpty()} ${TextUtils.formatBitrate( + player.audioFormat?.bitrate + )}" + ) + binding.videoQuality.setText( + "${player.videoFormat?.width}x${player.videoFormat?.height} ${player.videoFormat?.frameRate?.toInt()}fps" + ) + + return MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.stats_for_nerds) + .setView(binding.root) + .setPositiveButton(R.string.okay, null) + .create() + } +} 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 9a1760fd98..c53046d2e2 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.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.dialogs.AddToPlaylistDialog import com.github.libretube.ui.dialogs.DownloadDialog import com.github.libretube.ui.dialogs.ShareDialog +import com.github.libretube.ui.dialogs.StatsDialog import com.github.libretube.ui.extensions.setAspectRatio import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.interfaces.OnlinePlayerOptions @@ -1379,6 +1380,12 @@ class PlayerFragment : Fragment(R.layout.fragment_player), OnlinePlayerOptions { .show(childFragmentManager) } + override fun onStatsClicked() { + if (!this::streams.isInitialized) return + StatsDialog(exoPlayer, videoId ?: return) + .show(childFragmentManager, null) + } + override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) { super.onPictureInPictureModeChanged(isInPictureInPictureMode) if (isInPictureInPictureMode) { diff --git a/app/src/main/java/com/github/libretube/ui/interfaces/OnlinePlayerOptions.kt b/app/src/main/java/com/github/libretube/ui/interfaces/OnlinePlayerOptions.kt index d9e37f6e6d..1435840e07 100644 --- a/app/src/main/java/com/github/libretube/ui/interfaces/OnlinePlayerOptions.kt +++ b/app/src/main/java/com/github/libretube/ui/interfaces/OnlinePlayerOptions.kt @@ -6,4 +6,6 @@ interface OnlinePlayerOptions { fun onQualityClicked() fun onAudioStreamClicked() + + fun onStatsClicked() } diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index 1eb45d6844..5e9e968a62 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -348,6 +348,12 @@ internal class CustomExoPlayerView( } ) { it.onCaptionsClicked() + }, + BottomSheetItem( + context.getString(R.string.stats_for_nerds), + R.drawable.ic_info + ) { + it.onStatsClicked() } ) ) diff --git a/app/src/main/java/com/github/libretube/util/TextUtils.kt b/app/src/main/java/com/github/libretube/util/TextUtils.kt index 2fa2b81126..a1a5e5c78d 100644 --- a/app/src/main/java/com/github/libretube/util/TextUtils.kt +++ b/app/src/main/java/com/github/libretube/util/TextUtils.kt @@ -77,4 +77,9 @@ object TextUtils { DateUtils.getRelativeTimeSpanString(unixTime) } } + + fun formatBitrate(bitrate: Int?): String { + bitrate ?: return "" + return "${bitrate / 1024}kbps" + } } diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml index 4a71c06a80..fed2fb1161 100644 --- a/app/src/main/res/drawable/ic_info.xml +++ b/app/src/main/res/drawable/ic_info.xml @@ -2,9 +2,9 @@ android:width="24dp" android:height="24dp" android:tint="?attr/colorControlNormal" - android:viewportWidth="48" - android:viewportHeight="48"> + android:viewportWidth="24" + android:viewportHeight="24"> + android:fillColor="@android:color/white" + android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z" /> diff --git a/app/src/main/res/layout/dialog_stats.xml b/app/src/main/res/layout/dialog_stats.xml new file mode 100644 index 0000000000..26d32be771 --- /dev/null +++ b/app/src/main/res/layout/dialog_stats.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c5492e5491..ac54ad6d66 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -444,6 +444,8 @@ Custom speed Use a different playback speed than for the normal player. Category + Stats for nerds + Video ID Download Service Shows a notification when downloading media. diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml index 1c6e6ea059..01fc1ed300 100644 --- a/app/src/main/res/values/style.xml +++ b/app/src/main/res/values/style.xml @@ -64,6 +64,15 @@ + +