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.NavDestination
import androidx.navigation.findNavController
import com.google.android.material.R as MR
import com.google.android.material.bottomsheet.BackportBottomSheetBehavior
import com.google.android.material.shape.MaterialShapeDrawable
import dagger.hilt.android.AndroidEntryPoint
import kotlin.math.max
import kotlin.math.min
import org.oxycblt.auxio.databinding.FragmentMainBinding
import org.oxycblt.auxio.detail.DetailViewModel
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.PlaybackViewModel
import org.oxycblt.auxio.playback.queue.QueueBottomSheetBehavior
import org.oxycblt.auxio.playback.queue.QueueViewModel
import org.oxycblt.auxio.ui.ViewBindingFragment
import org.oxycblt.auxio.util.collectImmediately
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.systemBarInsetsCompat
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.
@ -69,6 +70,7 @@ class MainFragment :
private val playbackModel: PlaybackViewModel by activityViewModels()
private val listModel: ListViewModel by activityViewModels()
private val detailModel: DetailViewModel by activityViewModels()
private val queueModel: QueueViewModel by activityViewModels()
private var sheetBackCallback: SheetBackPressedCallback? = null
private var detailBackCallback: DetailBackPressedCallback? = null
private var selectionBackCallback: SelectionBackPressedCallback? = null
@ -155,6 +157,7 @@ class MainFragment :
collectImmediately(listModel.selected, selectionBackCallback::invalidateEnabled)
collectImmediately(playbackModel.song, ::updateSong)
collectImmediately(playbackModel.openPanel.flow, ::handlePanel)
collectImmediately(queueModel.index, queueModel.queueSize, ::updateQueuePosition)
}
override fun onStart() {
@ -311,6 +314,15 @@ class MainFragment :
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() {
val binding = requireBinding()
val playbackSheetBehavior =

View file

@ -19,10 +19,14 @@
package org.oxycblt.auxio.playback.queue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
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.music.MusicParent
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. */
val index: StateFlow<Int>
get() = _index
/** Size of the current queue */
val queueSize: StateFlow<Int> =
_queue.map { it.size }.stateIn(viewModelScope, SharingStarted.Lazily, _queue.value.size)
init {
playbackManager.addListener(this)

View file

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

View file

@ -391,6 +391,8 @@
Do not use "and" or equivalents.
-->
<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 -->
<string name="fmt_selected">%d Selected</string>

2
media

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