diff --git a/app/src/main/java/org/oxycblt/auxio/detail/adapters/DetailAlbumAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/adapters/DetailAlbumAdapter.kt index 17f5d65a1..52b176d65 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/adapters/DetailAlbumAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/adapters/DetailAlbumAdapter.kt @@ -4,7 +4,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import org.oxycblt.auxio.databinding.ItemAlbumBinding +import org.oxycblt.auxio.databinding.ItemArtistAlbumBinding import org.oxycblt.auxio.music.models.Album import org.oxycblt.auxio.recycler.AlbumDiffCallback import org.oxycblt.auxio.recycler.ClickListener @@ -15,7 +15,7 @@ class DetailAlbumAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder( - ItemAlbumBinding.inflate(LayoutInflater.from(parent.context)) + ItemArtistAlbumBinding.inflate(LayoutInflater.from(parent.context)) ) } @@ -25,7 +25,7 @@ class DetailAlbumAdapter( // Generic ViewHolder for an album inner class ViewHolder( - private val binding: ItemAlbumBinding + private val binding: ItemArtistAlbumBinding ) : RecyclerView.ViewHolder(binding.root) { init { diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt index fd9a8ad7a..c42702f1d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt @@ -1,8 +1,10 @@ package org.oxycblt.auxio.music import android.content.ContentUris +import android.content.Context import android.net.Uri import android.provider.MediaStore +import android.text.format.DateUtils import android.widget.TextView import androidx.databinding.BindingAdapter import org.oxycblt.auxio.R @@ -68,15 +70,17 @@ fun Long.toAlbumArtURI(): Uri { ) } -// Cut off excess zeros from a duration string -fun String.removeDurationZeroes(): String { - val split = this.chunked(1).toMutableList() +// Convert a string into its duration +fun Long.toDuration(): String { + val durationString = DateUtils.formatElapsedTime(this) + + val durationSplit = durationString.chunked(1).toMutableList() // Iterate through the string and remove the first zero found // If anything else is found, exit the loop. - for (i in 0 until length) { - if (this[i] == '0') { - split.removeAt(i) + for (i in 0 until durationSplit.size) { + if (durationSplit[i] == "0") { + durationSplit.removeAt(i) break } else { @@ -84,19 +88,23 @@ fun String.removeDurationZeroes(): String { } } - return split.joinToString("") + return durationSplit.joinToString("") } // --- BINDING ADAPTERS --- -// Format the amount of songs in an album -@BindingAdapter("songCount") -fun TextView.getAlbumSongs(album: Album) { - text = context.resources.getQuantityString( +fun getAlbumSongCount(album: Album, context: Context): String { + return context.resources.getQuantityString( R.plurals.format_song_count, album.numSongs, album.numSongs ) } +// Format the amount of songs in an album +@BindingAdapter("songCount") +fun TextView.bindAlbumSongs(album: Album) { + text = getAlbumSongCount(album, context) +} + @BindingAdapter("artistCounts") fun TextView.bindArtistCounts(artist: Artist) { val albums = context.resources.getQuantityString( @@ -112,7 +120,7 @@ fun TextView.bindArtistCounts(artist: Artist) { // Get the artist genre. // TODO: Add option to list all genres @BindingAdapter("artistGenre") -fun TextView.getArtistGenre(artist: Artist) { +fun TextView.bindArtistGenre(artist: Artist) { // If there are multiple genres, then pick the most "Prominent" one, // Otherwise just pick the first one if (artist.genres.keys.size > 1) { @@ -123,3 +131,14 @@ fun TextView.getArtistGenre(artist: Artist) { text = artist.genres.keys.first() } } + +// Get a bunch of miscellaneous album information [Year, Songs, Duration] and combine them +@BindingAdapter("albumDetails") +fun TextView.bindAlbumDetails(album: Album) { + text = context.getString( + R.string.format_double_info, + album.year.toString(), + getAlbumSongCount(album, context), + album.totalDuration + ) +} diff --git a/app/src/main/java/org/oxycblt/auxio/music/models/Album.kt b/app/src/main/java/org/oxycblt/auxio/music/models/Album.kt index cf28f001c..6b59a6e87 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/models/Album.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/models/Album.kt @@ -1,6 +1,7 @@ package org.oxycblt.auxio.music.models import android.net.Uri +import org.oxycblt.auxio.music.toDuration // Abstraction for Song data class Album( @@ -14,4 +15,11 @@ data class Album( val songs = mutableListOf() val numSongs: Int get() = songs.size + val totalDuration: String get() { + var seconds: Long = 0 + songs.forEach { + seconds += it.seconds + } + return seconds.toDuration() + } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/models/Song.kt b/app/src/main/java/org/oxycblt/auxio/music/models/Song.kt index 2fc566d6b..e972fbf17 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/models/Song.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/models/Song.kt @@ -1,7 +1,6 @@ package org.oxycblt.auxio.music.models -import android.text.format.DateUtils -import org.oxycblt.auxio.music.removeDurationZeroes +import org.oxycblt.auxio.music.toDuration // Class containing all relevant values for a song. data class Song( @@ -14,5 +13,5 @@ data class Song( lateinit var album: Album val seconds = duration / 1000 - val formattedDuration: String = DateUtils.formatElapsedTime(seconds).removeDurationZeroes() + val formattedDuration: String = seconds.toDuration() } diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml index 2b068d114..38879246b 100644 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -22,9 +22,9 @@ + android:strokeColor="#0d5af500" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9cb..cc1331059 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -5,166 +5,6 @@ android:viewportWidth="108" android:viewportHeight="108"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_album_detail.xml b/app/src/main/res/layout/fragment_album_detail.xml index d53fe5a4f..5a769f3f6 100644 --- a/app/src/main/res/layout/fragment_album_detail.xml +++ b/app/src/main/res/layout/fragment_album_detail.xml @@ -86,13 +86,14 @@ tools:text="Artist Name" /> @@ -111,7 +112,7 @@ android:text="@string/label_songs" android:textAppearance="@style/TextAppearance.MaterialComponents.Overline" android:textSize="16sp" - app:layout_constraintTop_toBottomOf="@+id/album_year" /> + app:layout_constraintTop_toBottomOf="@+id/album_other_details" /> + app:layout_constraintTop_toBottomOf="@+id/album_other_details" /> + tools:listitem="@layout/item_artist_album" /> diff --git a/app/src/main/res/layout/item_album.xml b/app/src/main/res/layout/item_album.xml index 807ec3301..cfe6298c1 100644 --- a/app/src/main/res/layout/item_album.xml +++ b/app/src/main/res/layout/item_album.xml @@ -39,7 +39,7 @@ android:textColor="?android:attr/textColorPrimary" android:ellipsize="end" android:maxLines="1" - app:layout_constraintBottom_toTopOf="@+id/song_count" + app:layout_constraintBottom_toTopOf="@+id/album_other_details" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/cover" app:layout_constraintTop_toTopOf="parent" @@ -47,12 +47,13 @@ tools:text="Album Name" /> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_song.xml b/app/src/main/res/layout/item_song.xml index a1a084278..33403e689 100644 --- a/app/src/main/res/layout/item_song.xml +++ b/app/src/main/res/layout/item_song.xml @@ -67,11 +67,11 @@ 44dp 56dp - 80dp + 68dp 230dp 32dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 01db6bf4d..f1f6b8218 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,6 +26,7 @@ No Date %1$s / %2$s + %1$s / %2$s / %3$s %1$s, %2$s