mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-14 14:20:30 +05:30
new playlist layout
This commit is contained in:
parent
632f4d6df4
commit
0b99bfdfa0
@ -1,6 +1,7 @@
|
||||
package com.github.libretube.ui.adapters
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@ -28,7 +29,6 @@ class PlaylistAdapter(
|
||||
private val videoFeed: MutableList<com.github.libretube.api.obj.StreamItem>,
|
||||
private val playlistId: String,
|
||||
private val isOwner: Boolean,
|
||||
private val activity: Activity,
|
||||
private val childFragmentManager: FragmentManager
|
||||
) : RecyclerView.Adapter<PlaylistViewHolder>() {
|
||||
|
||||
@ -69,16 +69,19 @@ class PlaylistAdapter(
|
||||
if (isOwner) {
|
||||
deletePlaylist.visibility = View.VISIBLE
|
||||
deletePlaylist.setOnClickListener {
|
||||
removeFromPlaylist(position)
|
||||
removeFromPlaylist(root.context, position)
|
||||
}
|
||||
}
|
||||
watchProgress.setWatchProgressLength(videoId, streamItem.duration!!)
|
||||
}
|
||||
}
|
||||
|
||||
fun removeFromPlaylist(position: Int) {
|
||||
fun removeFromPlaylist(context: Context, position: Int) {
|
||||
videoFeed.removeAt(position)
|
||||
activity.runOnUiThread { notifyDataSetChanged() }
|
||||
(context as Activity).runOnUiThread {
|
||||
notifyItemRemoved(position)
|
||||
notifyItemRangeChanged(position, itemCount)
|
||||
}
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
RetrofitInstance.authApi.removeFromPlaylist(
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.github.libretube.ui.fragments
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
@ -18,6 +19,8 @@ import com.github.libretube.extensions.toID
|
||||
import com.github.libretube.ui.adapters.PlaylistAdapter
|
||||
import com.github.libretube.ui.base.BaseFragment
|
||||
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
|
||||
import com.github.libretube.util.ImageHelper
|
||||
import com.github.libretube.util.NavigationHelper
|
||||
import retrofit2.HttpException
|
||||
import java.io.IOException
|
||||
|
||||
@ -58,6 +61,7 @@ class PlaylistFragment : BaseFragment() {
|
||||
fetchPlaylist()
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun fetchPlaylist() {
|
||||
lifecycleScope.launchWhenCreated {
|
||||
val response = try {
|
||||
@ -79,27 +83,31 @@ class PlaylistFragment : BaseFragment() {
|
||||
playlistName = response.name
|
||||
isLoading = false
|
||||
runOnUiThread {
|
||||
ImageHelper.loadImage(response.thumbnailUrl, binding.thumbnail)
|
||||
binding.playlistProgress.visibility = View.GONE
|
||||
binding.playlistName.text = response.name
|
||||
binding.uploader.text = response.uploader
|
||||
binding.videoCount.text =
|
||||
getString(R.string.videoCount, response.videos.toString())
|
||||
binding.playlistInfo.text = response.uploader + " • " + getString(R.string.videoCount, response.videos.toString())
|
||||
|
||||
// show playlist options
|
||||
binding.optionsMenu.setOnClickListener {
|
||||
val optionsDialog =
|
||||
PlaylistOptionsBottomSheet(playlistId!!, playlistName!!, isOwner)
|
||||
optionsDialog.show(
|
||||
PlaylistOptionsBottomSheet(playlistId!!, playlistName!!, isOwner).show(
|
||||
childFragmentManager,
|
||||
PlaylistOptionsBottomSheet::class.java.name
|
||||
)
|
||||
}
|
||||
|
||||
binding.playAll.setOnClickListener {
|
||||
NavigationHelper.navigateVideo(
|
||||
requireContext(),
|
||||
response.relatedStreams?.first()?.toID(),
|
||||
playlistId
|
||||
)
|
||||
}
|
||||
|
||||
playlistAdapter = PlaylistAdapter(
|
||||
response.relatedStreams!!.toMutableList(),
|
||||
response.relatedStreams.orEmpty().toMutableList(),
|
||||
playlistId!!,
|
||||
isOwner,
|
||||
requireActivity(),
|
||||
childFragmentManager
|
||||
)
|
||||
|
||||
@ -107,11 +115,11 @@ class PlaylistFragment : BaseFragment() {
|
||||
playlistAdapter!!.registerAdapterDataObserver(object :
|
||||
RecyclerView.AdapterDataObserver() {
|
||||
override fun onChanged() {
|
||||
binding.videoCount.text =
|
||||
getString(
|
||||
R.string.videoCount,
|
||||
playlistAdapter!!.itemCount.toString()
|
||||
)
|
||||
binding.playlistInfo.text =
|
||||
binding.playlistInfo.text.split(" • ").first() + " • " + getString(
|
||||
R.string.videoCount,
|
||||
playlistAdapter!!.itemCount.toString()
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
@ -150,7 +158,7 @@ class PlaylistFragment : BaseFragment() {
|
||||
direction: Int
|
||||
) {
|
||||
val position = viewHolder.absoluteAdapterPosition
|
||||
playlistAdapter!!.removeFromPlaylist(position)
|
||||
playlistAdapter!!.removeFromPlaylist(requireContext(), position)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@ -23,11 +24,23 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<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.ExtraLarge"
|
||||
tools:src="@tools:sample/backgrounds/scenic" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:padding="8dp">
|
||||
android:paddingHorizontal="15dp"
|
||||
android:layout_marginTop="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/playlist_name"
|
||||
@ -48,17 +61,40 @@
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/uploader"
|
||||
android:id="@+id/playlistInfo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp"
|
||||
android:paddingHorizontal="15dp"
|
||||
android:paddingVertical="8dp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/video_count"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp" />
|
||||
android:layout_marginVertical="10dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/play_all"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/play_all"
|
||||
app:icon="@drawable/ic_playlist" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/shuffle"
|
||||
style="@style/Widget.Material3.Button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="10dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/shuffle"
|
||||
app:icon="@drawable/ic_shuffle" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -359,6 +359,8 @@
|
||||
<string name="confirm_unsubscribe">Are you sure you want to unsubscribe %1$s?</string>
|
||||
<string name="confirm_unsubscribing">Confirm unsubscribing</string>
|
||||
<string name="confirm_unsubscribing_summary">Show a confirmation dialog before unsubscribing.</string>
|
||||
<string name="shuffle">Shuffle</string>
|
||||
<string name="play_all">Play all</string>
|
||||
|
||||
<!-- Notification channel strings -->
|
||||
<string name="download_channel_name">Download Service</string>
|
||||
|
@ -195,12 +195,12 @@
|
||||
|
||||
</style>
|
||||
|
||||
<style name="ElevatedIconButton" parent="@style/Widget.Material3.Button.IconButton.Filled.Tonal">
|
||||
<style name="ElevatedIconButton" parent="@style/Widget.Material3.Button.IconButton">
|
||||
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:paddingStart">15dp</item>
|
||||
<item name="android:paddingEnd">15dp</item>
|
||||
<item name="android:paddingStart">10dp</item>
|
||||
<item name="android:paddingEnd">10dp</item>
|
||||
<item name="android:stateListAnimator">@null</item>
|
||||
<item name="cardCornerRadius">25dp</item>
|
||||
<item name="android:drawableTint" tools:targetApi="m">?android:attr/textColorPrimary</item>
|
||||
|
Loading…
Reference in New Issue
Block a user