Add song durations

Add song durations to the SongItem layout
This commit is contained in:
OxygenCobalt 2020-08-31 13:59:18 -06:00
parent dc45e2973a
commit 16038567dd
5 changed files with 51 additions and 5 deletions

View file

@ -8,6 +8,10 @@ import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentLibraryBinding
import org.oxycblt.auxio.recycler.adapters.AlbumAdapter
@ -19,6 +23,11 @@ class LibraryFragment : Fragment() {
ViewModelProvider(this).get(LibraryViewModel::class.java)
}
private val inflateJob = Job()
private val mainScope = CoroutineScope(
inflateJob + Dispatchers.Main
)
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -28,9 +37,14 @@ class LibraryFragment : Fragment() {
inflater, R.layout.fragment_library, container, false
)
val adapter = AlbumAdapter(libraryModel.albums.value!!)
// Offload the initial layout creation to a coroutine so that it doesn't hold up
// the UI thread. Hacky but it results in a smoother experience.
mainScope.launch {
binding.libraryRecycler.adapter = AlbumAdapter(libraryModel.albums.value!!)
binding.libraryRecycler.visibility = View.VISIBLE
}
binding.libraryRecycler.adapter = adapter
// binding.libraryRecycler.adapter = adapter
binding.libraryRecycler.applyDivider()
binding.libraryRecycler.setHasFixedSize(true)
@ -38,4 +52,10 @@ class LibraryFragment : Fragment() {
return binding.root
}
override fun onDestroy() {
super.onDestroy()
inflateJob.cancel()
}
}

View file

@ -18,7 +18,7 @@ class LoadingViewModel(private val app: Application) : ViewModel() {
private val loadingJob = Job()
private val ioScope = CoroutineScope(
Dispatchers.IO
loadingJob + Dispatchers.IO
)
private val mMusicRepoResponse = MutableLiveData<MusicLoaderResponse>()

View file

@ -1,5 +1,7 @@
package org.oxycblt.auxio.music.models
import android.text.format.DateUtils
// Class containing all relevant values for a song.
data class Song(
val id: Long,
@ -9,4 +11,7 @@ data class Song(
val duration: Long
) {
lateinit var album: Album
val seconds = duration / 1000
val formattedDuration = DateUtils.formatElapsedTime(seconds)
}

View file

@ -8,6 +8,9 @@ import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentSongsBinding
import org.oxycblt.auxio.recycler.adapters.SongAdapter
@ -15,6 +18,11 @@ import org.oxycblt.auxio.recycler.applyDivider
class SongsFragment : Fragment() {
private val inflateJob = Job()
private val mainScope = CoroutineScope(
inflateJob + Dispatchers.Main
)
private val songsModel: SongsViewModel by lazy {
ViewModelProvider(this).get(SongsViewModel::class.java)
}

View file

@ -37,7 +37,7 @@
android:textAppearance="?android:attr/textAppearanceListItem"
android:textColor="?android:attr/textColorPrimary"
app:layout_constraintBottom_toTopOf="@+id/song_info"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@+id/duration"
app:layout_constraintStart_toEndOf="@+id/cover"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
@ -54,10 +54,23 @@
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@+id/duration"
app:layout_constraintStart_toEndOf="@+id/cover"
app:layout_constraintTop_toBottomOf="@+id/song_name"
tools:text="Artist / Album" />
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@{song.formattedDuration}"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorTertiary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="16:16" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>