diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index a893f455f..d03e0cb1c 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -29,27 +29,20 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.widget.Toolbar import androidx.core.view.updatePadding import androidx.fragment.app.activityViewModels -import androidx.recyclerview.widget.RecyclerView -import androidx.viewpager2.widget.ViewPager2 -import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback import dagger.hilt.android.AndroidEntryPoint -import java.lang.reflect.Field -import kotlin.math.abs import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentPlaybackPanelBinding import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.list.ListViewModel -import org.oxycblt.auxio.list.adapter.UpdateInstructions import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.playback.queue.QueueViewModel +import org.oxycblt.auxio.music.resolveNames import org.oxycblt.auxio.playback.state.RepeatMode import org.oxycblt.auxio.playback.ui.PlaybackPagerAdapter import org.oxycblt.auxio.playback.ui.StyledSeekBar import org.oxycblt.auxio.playback.ui.SwipeCoverView import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.util.collectImmediately -import org.oxycblt.auxio.util.lazyReflectedField import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.overrideOnOverflowMenuClick import org.oxycblt.auxio.util.showToast @@ -71,7 +64,6 @@ class PlaybackPanelFragment : SwipeCoverView.OnSwipeListener { private val playbackModel: PlaybackViewModel by activityViewModels() private val detailModel: DetailViewModel by activityViewModels() - private val queueModel: QueueViewModel by activityViewModels() private val listModel: ListViewModel by activityViewModels() private var equalizerLauncher: ActivityResultLauncher? = null private var coverAdapter: PlaybackPagerAdapter? = null @@ -111,15 +103,11 @@ class PlaybackPanelFragment : } } - // cover carousel adapter - coverAdapter = PlaybackPagerAdapter(this) - binding.playbackCoverPager.apply { - adapter = coverAdapter - registerOnPageChangeCallback(OnCoverChangedCallback(queueModel)) - val recycler = VP_RECYCLER_FIELD.get(this@apply) as RecyclerView - recycler.isNestedScrollingEnabled = false - } binding.playbackCover.onSwipeListener = this + binding.playbackSong.setOnClickListener { navigateToCurrentSong() } + binding.playbackArtist.setOnClickListener { navigateToCurrentArtist() } + binding.playbackAlbum.setOnClickListener { navigateToCurrentAlbum() } + binding.playbackSeekBar.listener = this // Set up actions @@ -137,8 +125,6 @@ class PlaybackPanelFragment : collectImmediately(playbackModel.repeatMode, ::updateRepeat) collectImmediately(playbackModel.isPlaying, ::updatePlaying) collectImmediately(playbackModel.isShuffled, ::updateShuffled) - collectImmediately(queueModel.queue, ::updateQueue) - collectImmediately(queueModel.index, ::updateQueuePosition) } override fun onDestroyBinding(binding: FragmentPlaybackPanelBinding) { @@ -190,7 +176,12 @@ class PlaybackPanelFragment : } val binding = requireBinding() + val context = requireContext() logD("Updating song display: $song") + binding.playbackCover.bind(song) + binding.playbackSong.text = song.name.resolve(context) + binding.playbackArtist.text = song.artists.resolveNames(context) + binding.playbackAlbum.text = song.album.name.resolve(context) binding.playbackSeekBar.durationDs = song.durationMs.msToDs() } @@ -220,43 +211,15 @@ class PlaybackPanelFragment : requireBinding().playbackShuffle.isActivated = isShuffled } - override fun navigateToCurrentSong() { + private fun navigateToCurrentSong() { playbackModel.song.value?.let(detailModel::showAlbum) } - override fun navigateToCurrentArtist() { + private fun navigateToCurrentArtist() { playbackModel.song.value?.let(detailModel::showArtist) } - override fun navigateToCurrentAlbum() { + private fun navigateToCurrentAlbum() { playbackModel.song.value?.let { detailModel.showAlbum(it.album) } } - - override fun navigateToMenu() { - // TODO - } - - private class OnCoverChangedCallback(private val queueViewModel: QueueViewModel) : - OnPageChangeCallback() { - - private var targetPosition = RecyclerView.NO_POSITION - - override fun onPageSelected(position: Int) { - super.onPageSelected(position) - targetPosition = position - } - - override fun onPageScrollStateChanged(state: Int) { - super.onPageScrollStateChanged(state) - if (state == ViewPager2.SCROLL_STATE_IDLE && - targetPosition != RecyclerView.NO_POSITION && - targetPosition != queueViewModel.index.value) { - queueViewModel.goto(targetPosition) - } - } - } - - private companion object { - val VP_RECYCLER_FIELD: Field by lazyReflectedField(ViewPager2::class, "mRecyclerView") - } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt index 2db007971..7a70bc6e8 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueFragment.kt @@ -22,6 +22,7 @@ import android.os.Bundle import android.view.LayoutInflater import androidx.core.view.isInvisible import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -42,7 +43,7 @@ import org.oxycblt.auxio.util.logD */ @AndroidEntryPoint class QueueFragment : ViewBindingFragment(), EditClickListListener { - private val queueModel: QueueViewModel by activityViewModels() + private val queueModel: QueueViewModel by viewModels() private val playbackModel: PlaybackViewModel by activityViewModels() private val queueAdapter = QueueAdapter(this) private var touchHelper: ItemTouchHelper? = null diff --git a/app/src/main/java/org/oxycblt/auxio/playback/ui/PlaybackPagerAdapter.kt b/app/src/main/java/org/oxycblt/auxio/playback/ui/PlaybackPagerAdapter.kt index d0f176231..f98498c71 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/ui/PlaybackPagerAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/ui/PlaybackPagerAdapter.kt @@ -73,10 +73,7 @@ class CoverViewHolder private constructor(private val binding: ItemPlaybackSongB val context = binding.root.context binding.playbackCover.bind(item) // binding.playbackCover.bind(item) - binding.playbackSong.apply { - text = item.name.resolve(context) - setOnClickListener { listener.navigateToCurrentSong() } - } + binding.playbackSong.apply { text = item.name.resolve(context) } binding.playbackArtist.apply { text = item.artists.resolveNames(context) setOnClickListener { listener.navigateToCurrentArtist() } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/ui/SwipeCoverView.kt b/app/src/main/java/org/oxycblt/auxio/playback/ui/SwipeCoverView.kt index dc0fcf9b0..08bb46b85 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/ui/SwipeCoverView.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/ui/SwipeCoverView.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package org.oxycblt.auxio.playback.ui import android.annotation.SuppressLint @@ -77,8 +77,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr val diffX = e2.x - e1.x if (abs(diffX) > abs(diffY) && abs(diffX) > viewConfig.scaledTouchSlop && - abs(velocityX) > viewConfig.scaledMinimumFlingVelocity - ) { + abs(velocityX) > viewConfig.scaledMinimumFlingVelocity) { if (diffX > 0) { onSwipeRight() } else { @@ -102,6 +101,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr interface OnSwipeListener { fun onSwipePrevious() + fun onSwipeNext() } } diff --git a/app/src/main/res/layout-h480dp/fragment_playback_panel.xml b/app/src/main/res/layout-h480dp/fragment_playback_panel.xml index fe6d81774..4157231ac 100644 --- a/app/src/main/res/layout-h480dp/fragment_playback_panel.xml +++ b/app/src/main/res/layout-h480dp/fragment_playback_panel.xml @@ -62,7 +62,8 @@ app:layout_constraintBottom_toTopOf="@+id/playback_seek_bar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/playback_toolbar" /> + tools:text="Album Name" /> + - + \ No newline at end of file diff --git a/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml b/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml index abc8d7e01..21152be5a 100644 --- a/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml +++ b/app/src/main/res/layout-sw600dp/fragment_playback_panel.xml @@ -44,11 +44,25 @@ android:id="@+id/playback_artist" style="@style/Widget.Auxio.TextView.Secondary.Marquee" android:layout_width="0dp" - android:layout_height="0dp" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/spacing_medium" + android:layout_marginEnd="@dimen/spacing_medium" + app:layout_constraintBottom_toTopOf="@+id/playback_album" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + tools:text="Artist Name" /> + + + tools:text="Album Name" /> + + + + + + + + + + + +