feat: show total playlist duration

This commit is contained in:
Bnyro 2024-07-15 14:50:04 +02:00
parent 0ebba0d10c
commit 97c2f43787
3 changed files with 52 additions and 12 deletions

View File

@ -40,7 +40,7 @@ import kotlinx.coroutines.withContext
* playlists
*/
class PlaylistAdapter(
private val originalFeed: MutableList<StreamItem>,
val originalFeed: MutableList<StreamItem>,
private val sortedFeed: MutableList<StreamItem>,
private val playlistId: String,
private val playlistType: PlaylistType

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.res.Configuration
import android.os.Bundle
import android.os.Parcelable
import android.text.format.DateUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@ -385,6 +386,8 @@ class PlaylistFragment : DynamicLayoutManagerFragment() {
val itemTouchHelper = ItemTouchHelper(itemTouchCallback)
itemTouchHelper.attachToRecyclerView(binding.playlistRecView)
}
updatePlaylistDuration()
}
@SuppressLint("StringFormatInvalid", "StringFormatMatches")
@ -416,10 +419,18 @@ class PlaylistFragment : DynamicLayoutManagerFragment() {
nextPage = response.nextpage
playlistAdapter?.updateItems(response.relatedStreams)
updatePlaylistDuration()
isLoading = false
}
}
@SuppressLint("SetTextI18n")
private fun updatePlaylistDuration() {
val totalDuration = playlistAdapter?.originalFeed?.sumOf { it.duration ?: 0 } ?: return
binding.playlistDuration.text = DateUtils.formatElapsedTime(totalDuration) +
if (nextPage != null) "+" else ""
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
// manually restore the recyclerview state due to https://github.com/material-components/material-components-android/issues/3473

View File

@ -10,8 +10,8 @@
android:id="@+id/playlist_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="center" />
android:layout_gravity="center"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/playlist_recView"
@ -25,7 +25,8 @@
android:id="@+id/playlist_app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
android:visibility="gone"
tools:visibility="visible">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/playlist_collapsing_tb"
@ -39,17 +40,45 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="14dp"
android:layout_marginVertical="10dp">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/thumbnail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginVertical="10dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:shapeAppearanceOverlay="@style/ShapeAppearance.Material3.Corner.Small"
tools:src="@tools:sample/backgrounds/scenic" />
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginEnd="5dp"
android:layout_marginBottom="5dp"
app:cardBackgroundColor="@color/duration_background_color"
app:cardCornerRadius="8dp"
app:cardElevation="0dp">
<TextView
android:id="@+id/playlist_duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="6dp"
android:paddingVertical="2dp"
android:textColor="@color/duration_text_color"
android:textSize="12sp"
tools:text="05:36" />
</androidx.cardview.widget.CardView>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"