Add queue counter

This commit is contained in:
Koitharu 2023-07-14 12:35:12 +03:00
parent 124726693e
commit ee6e430290
No known key found for this signature in database
GPG key ID: 676DEE768C17A9D7
5 changed files with 26 additions and 4 deletions

View file

@ -31,12 +31,9 @@ import androidx.fragment.app.activityViewModels
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavDestination import androidx.navigation.NavDestination
import androidx.navigation.findNavController import androidx.navigation.findNavController
import com.google.android.material.R as MR
import com.google.android.material.bottomsheet.BackportBottomSheetBehavior import com.google.android.material.bottomsheet.BackportBottomSheetBehavior
import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.MaterialShapeDrawable
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlin.math.max
import kotlin.math.min
import org.oxycblt.auxio.databinding.FragmentMainBinding import org.oxycblt.auxio.databinding.FragmentMainBinding
import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.detail.DetailViewModel
import org.oxycblt.auxio.list.ListViewModel import org.oxycblt.auxio.list.ListViewModel
@ -46,6 +43,7 @@ import org.oxycblt.auxio.playback.OpenPanel
import org.oxycblt.auxio.playback.PlaybackBottomSheetBehavior import org.oxycblt.auxio.playback.PlaybackBottomSheetBehavior
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.playback.queue.QueueBottomSheetBehavior import org.oxycblt.auxio.playback.queue.QueueBottomSheetBehavior
import org.oxycblt.auxio.playback.queue.QueueViewModel
import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.collectImmediately import org.oxycblt.auxio.util.collectImmediately
import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.context
@ -55,6 +53,9 @@ import org.oxycblt.auxio.util.getDimen
import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logD
import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.systemBarInsetsCompat
import org.oxycblt.auxio.util.unlikelyToBeNull import org.oxycblt.auxio.util.unlikelyToBeNull
import kotlin.math.max
import kotlin.math.min
import com.google.android.material.R as MR
/** /**
* A wrapper around the home fragment that shows the playback fragment and high-level navigation. * A wrapper around the home fragment that shows the playback fragment and high-level navigation.
@ -69,6 +70,7 @@ class MainFragment :
private val playbackModel: PlaybackViewModel by activityViewModels() private val playbackModel: PlaybackViewModel by activityViewModels()
private val listModel: ListViewModel by activityViewModels() private val listModel: ListViewModel by activityViewModels()
private val detailModel: DetailViewModel by activityViewModels() private val detailModel: DetailViewModel by activityViewModels()
private val queueModel: QueueViewModel by activityViewModels()
private var sheetBackCallback: SheetBackPressedCallback? = null private var sheetBackCallback: SheetBackPressedCallback? = null
private var detailBackCallback: DetailBackPressedCallback? = null private var detailBackCallback: DetailBackPressedCallback? = null
private var selectionBackCallback: SelectionBackPressedCallback? = null private var selectionBackCallback: SelectionBackPressedCallback? = null
@ -155,6 +157,7 @@ class MainFragment :
collectImmediately(listModel.selected, selectionBackCallback::invalidateEnabled) collectImmediately(listModel.selected, selectionBackCallback::invalidateEnabled)
collectImmediately(playbackModel.song, ::updateSong) collectImmediately(playbackModel.song, ::updateSong)
collectImmediately(playbackModel.openPanel.flow, ::handlePanel) collectImmediately(playbackModel.openPanel.flow, ::handlePanel)
collectImmediately(queueModel.index, queueModel.queueSize, ::updateQueuePosition)
} }
override fun onStart() { override fun onStart() {
@ -311,6 +314,15 @@ class MainFragment :
playbackModel.openPanel.consume() playbackModel.openPanel.consume()
} }
private fun updateQueuePosition(index: Int, size: Int) {
requireBinding().queueTitle.text = getString(
R.string.fmt_label_with_counter,
getString(R.string.lbl_queue),
index + 1,
size
)
}
private fun tryOpenPlaybackPanel() { private fun tryOpenPlaybackPanel() {
val binding = requireBinding() val binding = requireBinding()
val playbackSheetBehavior = val playbackSheetBehavior =

View file

@ -19,10 +19,14 @@
package org.oxycblt.auxio.playback.queue package org.oxycblt.auxio.playback.queue
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import org.oxycblt.auxio.list.adapter.UpdateInstructions import org.oxycblt.auxio.list.adapter.UpdateInstructions
import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.MusicParent
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
@ -55,6 +59,9 @@ class QueueViewModel @Inject constructor(private val playbackManager: PlaybackSt
/** The index of the currently playing song in the queue. */ /** The index of the currently playing song in the queue. */
val index: StateFlow<Int> val index: StateFlow<Int>
get() = _index get() = _index
/** Size of the current queue */
val queueSize: StateFlow<Int> =
_queue.map { it.size }.stateIn(viewModelScope, SharingStarted.Lazily, _queue.value.size)
init { init {
playbackManager.addListener(this) playbackManager.addListener(this)

View file

@ -51,6 +51,7 @@
app:layout_constraintStart_toEndOf="@+id/playback_panel_fragment"> app:layout_constraintStart_toEndOf="@+id/playback_panel_fragment">
<TextView <TextView
android:id="@+id/queue_title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="64dp" android:layout_height="64dp"
android:gravity="center" android:gravity="center"

View file

@ -391,6 +391,8 @@
Do not use "and" or equivalents. Do not use "and" or equivalents.
--> -->
<string name="fmt_list">%1$s, %2$s</string> <string name="fmt_list">%1$s, %2$s</string>
<!-- As in a label with position and total count -->
<string name="fmt_label_with_counter">%1$s (%2$d/%3$d)</string>
<!-- As in an amount of items that are selected --> <!-- As in an amount of items that are selected -->
<string name="fmt_selected">%d Selected</string> <string name="fmt_selected">%d Selected</string>

2
media

@ -1 +1 @@
Subproject commit 316763308d3143c75270103c85cf2d984bfa34a0 Subproject commit 8712967a789192d60d2207451cd5ed2b3191999e