diff --git a/app/build.gradle b/app/build.gradle index 276e0eb9c..e93c5478e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,10 +97,13 @@ dependencies { implementation fileTree(dir: "libs", include: ["extension-*.aar"]) // Image loading - implementation "io.coil-kt:coil:2.0.0-rc01" + implementation "io.coil-kt:coil:2.0.0-rc02" // Material - implementation "com.google.android.material:material:1.6.0-alpha03" + implementation "com.google.android.material:material:1.6.0-beta01" + + // LeakCanary + debugImplementation "com.squareup.leakcanary:leakcanary-android:2.8.1" } spotless { diff --git a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt b/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt index d2a502659..6b2279426 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt @@ -38,19 +38,19 @@ import org.oxycblt.auxio.music.Song // --- BINDING ADAPTERS --- /** Bind the album cover for a [song]. */ -fun ImageView.applyAlbumCover(song: Song?) = +fun ImageView.bindAlbumCover(song: Song?) = load(song, R.drawable.ic_album, R.string.desc_album_cover) /** Bind the album cover for an [album]. */ -fun ImageView.applyAlbumCover(album: Album?) = +fun ImageView.bindAlbumCover(album: Album?) = load(album, R.drawable.ic_album, R.string.desc_album_cover) /** Bind the image for an [artist] */ -fun ImageView.applyArtistImage(artist: Artist?) = +fun ImageView.bindArtistImage(artist: Artist?) = load(artist, R.drawable.ic_artist, R.string.desc_artist_image) /** Bind the image for a [genre] */ -fun ImageView.applyGenreImage(genre: Genre?) = +fun ImageView.bindGenreImage(genre: Genre?) = load(genre, R.drawable.ic_genre, R.string.desc_genre_image) fun ImageView.load(music: T?, @DrawableRes error: Int, @StringRes desc: Int) { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt index a613799d1..dbcc36ddd 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt @@ -24,7 +24,7 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R -import org.oxycblt.auxio.coil.applyAlbumCover +import org.oxycblt.auxio.coil.bindAlbumCover import org.oxycblt.auxio.databinding.ItemAlbumSongBinding import org.oxycblt.auxio.databinding.ItemDetailBinding import org.oxycblt.auxio.detail.DetailViewModel @@ -129,7 +129,7 @@ class AlbumDetailAdapter( override fun onBind(data: Album) { binding.detailCover.apply { - applyAlbumCover(data) + bindAlbumCover(data) contentDescription = context.getString(R.string.desc_album_cover, data.resolvedName) } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt index 9c67ec5a6..01a22dd2d 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt @@ -23,8 +23,8 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R -import org.oxycblt.auxio.coil.applyAlbumCover -import org.oxycblt.auxio.coil.applyArtistImage +import org.oxycblt.auxio.coil.bindAlbumCover +import org.oxycblt.auxio.coil.bindArtistImage import org.oxycblt.auxio.databinding.ItemDetailBinding import org.oxycblt.auxio.databinding.ItemParentBinding import org.oxycblt.auxio.databinding.ItemSongBinding @@ -176,7 +176,7 @@ class ArtistDetailAdapter( val context = binding.root.context binding.detailCover.apply { - applyArtistImage(data) + bindArtistImage(data) contentDescription = context.getString(R.string.desc_artist_image, data.resolvedName) } @@ -209,7 +209,7 @@ class ArtistDetailAdapter( private val binding: ItemParentBinding, ) : BaseViewHolder(binding, doOnClick, doOnLongClick), Highlightable { override fun onBind(data: Album) { - binding.parentImage.applyAlbumCover(data) + binding.parentImage.bindAlbumCover(data) binding.parentName.textSafe = data.resolvedName binding.parentInfo.textSafe = binding.context.getString(R.string.fmt_number, data.year) } @@ -223,7 +223,7 @@ class ArtistDetailAdapter( private val binding: ItemSongBinding, ) : BaseViewHolder(binding, doOnSongClick, doOnLongClick), Highlightable { override fun onBind(data: Song) { - binding.songAlbumCover.applyAlbumCover(data) + binding.songAlbumCover.bindAlbumCover(data) binding.songName.textSafe = data.resolvedName binding.songInfo.textSafe = data.resolvedAlbumName } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt index 73d912b79..48e283882 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt @@ -23,8 +23,8 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R -import org.oxycblt.auxio.coil.applyAlbumCover -import org.oxycblt.auxio.coil.applyGenreImage +import org.oxycblt.auxio.coil.bindAlbumCover +import org.oxycblt.auxio.coil.bindGenreImage import org.oxycblt.auxio.databinding.ItemDetailBinding import org.oxycblt.auxio.databinding.ItemSongBinding import org.oxycblt.auxio.music.ActionHeader @@ -128,7 +128,7 @@ class GenreDetailAdapter( val context = binding.root.context binding.detailCover.apply { - applyGenreImage(data) + bindGenreImage(data) contentDescription = context.getString(R.string.desc_genre_image, data.resolvedName) } @@ -150,7 +150,7 @@ class GenreDetailAdapter( ) : BaseViewHolder(binding, doOnClick, doOnLongClick), Highlightable { override fun onBind(data: Song) { - binding.songAlbumCover.applyAlbumCover(data) + binding.songAlbumCover.bindAlbumCover(data) binding.songName.textSafe = data.resolvedName binding.songInfo.textSafe = data.resolvedArtistName } diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index d058eb5be..e3f2684ea 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -28,6 +28,7 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.ui.GenreViewHolder import org.oxycblt.auxio.ui.newMenu import org.oxycblt.auxio.ui.sliceArticle +import org.oxycblt.auxio.util.context /** * A [HomeListFragment] for showing a list of [Genre]s. diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt index 069df0c67..49b065806 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt @@ -25,7 +25,7 @@ import androidx.core.view.updatePadding import androidx.fragment.app.activityViewModels import com.google.android.material.color.MaterialColors import org.oxycblt.auxio.R -import org.oxycblt.auxio.coil.applyAlbumCover +import org.oxycblt.auxio.coil.bindAlbumCover import org.oxycblt.auxio.databinding.FragmentPlaybackBarBinding import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.ui.BottomSheetLayout @@ -99,7 +99,7 @@ class PlaybackBarFragment : ViewBindingFragment() { playbackModel.song.observe(viewLifecycleOwner) { song -> if (song != null) { - binding.playbackCover.applyAlbumCover(song) + binding.playbackCover.bindAlbumCover(song) binding.playbackSong.textSafe = song.resolvedName binding.playbackInfo.textSafe = getString(R.string.fmt_two, song.resolvedArtistName, song.resolvedAlbumName) 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 1d0b831ce..38f241c41 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -29,7 +29,7 @@ import com.google.android.material.slider.Slider import kotlin.math.max import org.oxycblt.auxio.MainFragmentDirections import org.oxycblt.auxio.R -import org.oxycblt.auxio.coil.applyAlbumCover +import org.oxycblt.auxio.coil.bindAlbumCover import org.oxycblt.auxio.databinding.FragmentPlaybackPanelBinding import org.oxycblt.auxio.detail.DetailViewModel import org.oxycblt.auxio.music.MusicParent @@ -175,7 +175,7 @@ class PlaybackPanelFragment : if (song == null) return val binding = requireBinding() - binding.playbackCover.applyAlbumCover(song) + binding.playbackCover.bindAlbumCover(song) binding.playbackSong.textSafe = song.resolvedName binding.playbackArtist.textSafe = song.resolvedArtistName binding.playbackAlbum.textSafe = song.resolvedAlbumName diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt index 6edbe040d..0f0055066 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt @@ -28,7 +28,7 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.RecyclerView import com.google.android.material.shape.MaterialShapeDrawable import org.oxycblt.auxio.IntegerTable -import org.oxycblt.auxio.coil.applyAlbumCover +import org.oxycblt.auxio.coil.bindAlbumCover import org.oxycblt.auxio.databinding.ItemQueueSongBinding import org.oxycblt.auxio.music.ActionHeader import org.oxycblt.auxio.music.Header @@ -127,7 +127,7 @@ class QueueAdapter(private val touchHelper: ItemTouchHelper) : @SuppressLint("ClickableViewAccessibility") override fun onBind(data: Song) { - binding.songAlbumCover.applyAlbumCover(data) + binding.songAlbumCover.bindAlbumCover(data) binding.songName.textSafe = data.resolvedName binding.songInfo.textSafe = data.resolvedArtistName diff --git a/app/src/main/java/org/oxycblt/auxio/ui/ViewHolders.kt b/app/src/main/java/org/oxycblt/auxio/ui/ViewHolders.kt index 9c2ade04c..64ba83879 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/ViewHolders.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/ViewHolders.kt @@ -23,9 +23,9 @@ import androidx.appcompat.widget.TooltipCompat import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import org.oxycblt.auxio.R -import org.oxycblt.auxio.coil.applyAlbumCover -import org.oxycblt.auxio.coil.applyArtistImage -import org.oxycblt.auxio.coil.applyGenreImage +import org.oxycblt.auxio.coil.bindAlbumCover +import org.oxycblt.auxio.coil.bindArtistImage +import org.oxycblt.auxio.coil.bindGenreImage import org.oxycblt.auxio.databinding.ItemActionHeaderBinding import org.oxycblt.auxio.databinding.ItemHeaderBinding import org.oxycblt.auxio.databinding.ItemParentBinding @@ -96,7 +96,7 @@ private constructor( ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Song) { - binding.songAlbumCover.applyAlbumCover(data) + binding.songAlbumCover.bindAlbumCover(data) binding.songName.textSafe = data.resolvedName binding.songInfo.textSafe = data.resolvedArtistName } @@ -123,13 +123,9 @@ private constructor( ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Album) { - binding.parentImage.applyAlbumCover(data) + binding.parentImage.bindAlbumCover(data) binding.parentName.textSafe = data.resolvedName - binding.parentInfo.textSafe = - binding.context.getString( - R.string.fmt_two, - data.resolvedArtistName, - binding.context.getPluralSafe(R.plurals.fmt_song_count, data.songs.size)) + binding.parentInfo.textSafe = data.resolvedArtistName } companion object { @@ -154,7 +150,7 @@ private constructor( ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Artist) { - binding.parentImage.applyArtistImage(data) + binding.parentImage.bindArtistImage(data) binding.parentName.textSafe = data.resolvedName binding.parentInfo.textSafe = binding.context.getString( @@ -185,7 +181,7 @@ private constructor( ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Genre) { - binding.parentImage.applyGenreImage(data) + binding.parentImage.bindGenreImage(data) binding.parentName.textSafe = data.resolvedName binding.parentInfo.textSafe = binding.context.getPluralSafe(R.plurals.fmt_song_count, data.songs.size) diff --git a/app/src/main/res/color/sel_m3_switch_thumb.xml b/app/src/main/res/color/sel_m3_switch_thumb.xml index 6dc73cbb1..a2d394958 100644 --- a/app/src/main/res/color/sel_m3_switch_thumb.xml +++ b/app/src/main/res/color/sel_m3_switch_thumb.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/color/sel_m3_switch_track.xml b/app/src/main/res/color/sel_m3_switch_track.xml index c3abdac07..19d48ce76 100644 --- a/app/src/main/res/color/sel_m3_switch_track.xml +++ b/app/src/main/res/color/sel_m3_switch_track.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_song.xml b/app/src/main/res/drawable/ic_song.xml index b1c21fa85..0fbadccc6 100644 --- a/app/src/main/res/drawable/ic_song.xml +++ b/app/src/main/res/drawable/ic_song.xml @@ -2,9 +2,9 @@ + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ui_indicator.xml b/app/src/main/res/drawable/ui_indicator.xml index fdc7785c0..9f035ca55 100644 --- a/app/src/main/res/drawable/ui_indicator.xml +++ b/app/src/main/res/drawable/ui_indicator.xml @@ -2,7 +2,7 @@ + android:width="4dp" + android:height="4dp" /> diff --git a/app/src/main/res/layout-h600dp/item_detail.xml b/app/src/main/res/layout-h600dp/item_detail.xml index ceb2bf629..64d5410f3 100644 --- a/app/src/main/res/layout-h600dp/item_detail.xml +++ b/app/src/main/res/layout-h600dp/item_detail.xml @@ -1,73 +1,73 @@ - + + + + + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_medium" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/detail_cover" + tools:text="Name" /> - + - + - +