Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(stats): use bottom sheet #4482

Merged
merged 5 commits into from
Aug 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,24 +1,33 @@
package com.github.libretube.ui.dialogs

import android.annotation.SuppressLint
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.media3.exoplayer.ExoPlayer
import com.github.libretube.R
import com.github.libretube.databinding.DialogStatsBinding
import com.github.libretube.ui.sheets.ExpandedBottomSheet
import com.github.libretube.util.TextUtils
import com.google.android.material.dialog.MaterialAlertDialogBuilder

class StatsDialog(
class StatsSheet(
private val player: ExoPlayer,
private val videoId: String
) : DialogFragment() {
) : ExpandedBottomSheet() {

lateinit var binding: DialogStatsBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = DialogStatsBinding.inflate(layoutInflater)
return binding.root
}

@SuppressLint("SetTextI18n")
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val binding = DialogStatsBinding.inflate(layoutInflater)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.videoId.setText(videoId)
binding.videoInfo.setText(
"${player.videoFormat?.codecs.orEmpty()} ${
Expand All @@ -37,11 +46,5 @@ class StatsDialog(
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()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,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.dialogs.StatsSheet
import com.github.libretube.ui.extensions.setupSubscriptionButton
import com.github.libretube.ui.interfaces.OnlinePlayerOptions
import com.github.libretube.ui.listeners.SeekbarPreviewListener
Expand Down Expand Up @@ -1496,8 +1496,8 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {

override fun onStatsClicked() {
if (!this::streams.isInitialized) return
StatsDialog(exoPlayer, videoId)
.show(childFragmentManager, null)
StatsSheet(exoPlayer, videoId)
.show(childFragmentManager)
}

override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
Expand Down
132 changes: 84 additions & 48 deletions app/src/main/res/layout/dialog_stats.xml
Original file line number Diff line number Diff line change
@@ -1,53 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
<FrameLayout
android:id="@+id/standard_bottom_sheet"
style="@style/Widget.Material3.BottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/video_id">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_id"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/audio">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/audio_info"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/video">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_info"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/quality">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_quality"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>

</ScrollView>
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<!-- Drag handle for accessibility -->
<com.google.android.material.bottomsheet.BottomSheetDragHandleView
android:id="@+id/drag_handle"
android:layout_width="match_parent"
android:layout_height="20dp"
android:paddingTop="8dp"
android:paddingBottom="0dp"
app:tint="?android:attr/textColorSecondaryInverse" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:orientation="vertical"
android:paddingVertical="7dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:textColor="?android:textColorPrimary"
android:layout_marginStart="15dp"
android:fadingEdge="horizontal"
android:textSize="24sp"
android:text="@string/stats_for_nerds"/>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/video_id">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_id"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/audio">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/audio_info"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/video">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_info"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textfield.TextInputLayout
style="@style/CustomDialogTextInputLayout"
android:layout_marginTop="10dp"
android:hint="@string/quality">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/video_quality"
style="@style/DisabledTextInput" />
</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>
</LinearLayout>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Loading