Add artist image to DetailFragment
Add the artist image to the DetailFragment. Still considering what I want to do design-wise with this.
This commit is contained in:
parent
860033ac14
commit
26b53bd502
21 changed files with 94 additions and 103 deletions
|
@ -76,7 +76,7 @@ dependencies {
|
|||
// Lint
|
||||
ktlint "com.pinterest:ktlint:0.37.2"
|
||||
|
||||
// Memory Leak checkin
|
||||
// Memory Leak checking
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
|
||||
}
|
||||
|
||||
|
|
|
@ -5,15 +5,12 @@ import android.os.Bundle
|
|||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.app.ActivityCompat
|
||||
import org.oxycblt.auxio.theme.accent
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreateView(name: String, context: Context, attrs: AttributeSet): View? {
|
||||
// Debug placeholder, ignore
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
||||
|
||||
// Apply the theme
|
||||
setTheme(accent.second)
|
||||
|
||||
|
@ -22,9 +19,10 @@ class MainActivity : AppCompatActivity() {
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
ActivityCompat.postponeEnterTransition(this)
|
||||
setContentView(R.layout.activity_main)
|
||||
}
|
||||
}
|
||||
|
||||
// I wish I knew somewhere else to put this
|
||||
class ClickListener<T>(val onClick: (T) -> Unit)
|
||||
class ClickListener<T>(val onClick: (T) -> Unit)
|
||||
|
|
|
@ -19,6 +19,7 @@ import org.oxycblt.auxio.theme.applyDivider
|
|||
class LibraryFragment : Fragment() {
|
||||
|
||||
private val musicModel: MusicViewModel by activityViewModels()
|
||||
private val libraryModel: LibraryViewModel by activityViewModels()
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
@ -29,8 +30,11 @@ class LibraryFragment : Fragment() {
|
|||
|
||||
binding.libraryRecycler.adapter = ArtistAdapter(
|
||||
musicModel.artists.value!!,
|
||||
ClickListener { navToArtist(it) }
|
||||
ClickListener {
|
||||
navToArtist(it)
|
||||
}
|
||||
)
|
||||
|
||||
binding.libraryRecycler.applyDivider()
|
||||
binding.libraryRecycler.setHasFixedSize(true)
|
||||
|
||||
|
@ -39,11 +43,21 @@ class LibraryFragment : Fragment() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
private fun navToArtist(artist: Artist) {
|
||||
// Don't navigate to a fragment multiple times if multiple items are accepted.
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
findNavController().navigate(
|
||||
MainFragmentDirections.actionShowArtist(artist.id)
|
||||
)
|
||||
libraryModel.isAlreadyNavigating = false
|
||||
}
|
||||
|
||||
private fun navToArtist(artist: Artist) {
|
||||
if (!libraryModel.isAlreadyNavigating) {
|
||||
libraryModel.isAlreadyNavigating = true
|
||||
|
||||
// When navigation, pass the artistImage of the item as a shared element to create
|
||||
// the image popup.
|
||||
findNavController().navigate(
|
||||
MainFragmentDirections.actionShowArtist(artist.id)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,9 +4,7 @@ import android.view.LayoutInflater
|
|||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.oxycblt.auxio.ClickListener
|
||||
import org.oxycblt.auxio.databinding.ItemAlbumBinding
|
||||
import org.oxycblt.auxio.databinding.ItemArtistBinding
|
||||
import org.oxycblt.auxio.music.models.Album
|
||||
import org.oxycblt.auxio.music.models.Artist
|
||||
|
||||
class ArtistAdapter(
|
||||
|
@ -47,9 +45,7 @@ class ArtistAdapter(
|
|||
fun bind(artist: Artist) {
|
||||
binding.artist = artist
|
||||
|
||||
binding.root.setOnClickListener {
|
||||
listener.onClick(artist)
|
||||
}
|
||||
binding.root.setOnClickListener { listener.onClick(artist) }
|
||||
|
||||
// Force-update the layout so ellipsizing works.
|
||||
binding.artistName.requestLayout()
|
||||
|
|
|
@ -103,9 +103,8 @@ class LoadingFragment : Fragment(R.layout.fragment_loading) {
|
|||
binding.loadingBar.visibility = View.GONE
|
||||
|
||||
if (response == MusicLoaderResponse.DONE) {
|
||||
exitTransition = TransitionInflater.from(requireContext()).inflateTransition(
|
||||
R.transition.transition_to_main
|
||||
)
|
||||
exitTransition = TransitionInflater.from(requireContext())
|
||||
.inflateTransition(R.transition.transition_to_main)
|
||||
|
||||
findNavController().navigate(
|
||||
LoadingFragmentDirections.actionToMain()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package org.oxycblt.auxio.coil
|
||||
package org.oxycblt.auxio.music.coil
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
|
@ -1,4 +1,4 @@
|
|||
package org.oxycblt.auxio.coil
|
||||
package org.oxycblt.auxio.music.coil
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
|
@ -4,9 +4,7 @@ import android.view.LayoutInflater
|
|||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.oxycblt.auxio.ClickListener
|
||||
import org.oxycblt.auxio.databinding.ItemAlbumBinding
|
||||
import org.oxycblt.auxio.databinding.ItemSongBinding
|
||||
import org.oxycblt.auxio.music.models.Album
|
||||
import org.oxycblt.auxio.music.models.Song
|
||||
|
||||
class SongAdapter(
|
||||
|
|
|
@ -5,11 +5,9 @@ import android.util.Log
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import org.oxycblt.auxio.ClickListener
|
||||
import org.oxycblt.auxio.R
|
||||
import org.oxycblt.auxio.databinding.FragmentSongsBinding
|
||||
import org.oxycblt.auxio.music.MusicViewModel
|
||||
import org.oxycblt.auxio.theme.applyDivider
|
||||
|
@ -25,9 +23,7 @@ class SongsFragment : Fragment() {
|
|||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
val binding = DataBindingUtil.inflate<FragmentSongsBinding>(
|
||||
inflater, R.layout.fragment_songs, container, false
|
||||
)
|
||||
val binding = FragmentSongsBinding.inflate(inflater)
|
||||
|
||||
binding.songRecycler.adapter = SongAdapter(
|
||||
musicModel.songs.value!!,
|
||||
|
|
|
@ -33,10 +33,7 @@ private val ACCENTS = listOf(
|
|||
|
||||
val accent = ACCENTS[5]
|
||||
|
||||
fun getInactiveAlpha(color: Int): Int {
|
||||
return if (color == R.color.yellow) 100 else 150
|
||||
}
|
||||
|
||||
// Get the transparent variant of a color int
|
||||
fun getTransparentAccent(context: Context, color: Int, alpha: Int): Int {
|
||||
return ColorUtils.setAlphaComponent(
|
||||
ContextCompat.getColor(context, color),
|
||||
|
@ -44,6 +41,12 @@ fun getTransparentAccent(context: Context, color: Int, alpha: Int): Int {
|
|||
)
|
||||
}
|
||||
|
||||
// Get the inactive transparency of an accent
|
||||
fun getInactiveAlpha(color: Int): Int {
|
||||
return if (color == R.color.yellow) 100 else 150
|
||||
}
|
||||
|
||||
// Convert an integer to a color
|
||||
fun Int.toColor(context: Context): Int {
|
||||
return try {
|
||||
ContextCompat.getColor(context, this)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
type="org.oxycblt.auxio.music.models.Artist" />
|
||||
</data>
|
||||
|
||||
<LinearLayout
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
|
@ -22,14 +22,22 @@
|
|||
android:layout_height="?android:attr/actionBarSize"
|
||||
android:background="?android:attr/windowBackground"
|
||||
android:elevation="@dimen/elevation_normal"
|
||||
app:titleTextAppearance="@style/TextAppearance.Toolbar.Bold"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:title="@string/title_library_fragment"
|
||||
app:titleTextAppearance="@style/TextAppearance.Toolbar.Bold"
|
||||
tools:titleTextColor="@color/blue" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@{artist.name}" />
|
||||
<ImageView
|
||||
android:id="@+id/artist_image"
|
||||
android:layout_width="@dimen/cover_size_huge"
|
||||
android:layout_height="@dimen/cover_size_huge"
|
||||
android:layout_margin="@dimen/margin_medium"
|
||||
app:artistImage="@{artist}"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/toolbar"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_artist"
|
||||
tools:tint="@color/blue" />
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
|
@ -25,6 +25,6 @@
|
|||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
tools:listitem="@layout/item_album" />
|
||||
tools:listitem="@layout/item_artist" />
|
||||
</LinearLayout>
|
||||
</layout>
|
|
@ -26,8 +26,9 @@
|
|||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:src="@tools:sample/backgrounds/scenic"
|
||||
tools:ignore="ContentDescription" />
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_album"
|
||||
tools:tint="@color/blue" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/album_name"
|
||||
|
|
|
@ -22,12 +22,14 @@
|
|||
android:id="@+id/artist_image"
|
||||
android:layout_width="@dimen/cover_size_normal"
|
||||
android:layout_height="@dimen/cover_size_normal"
|
||||
app:artistImage="@{artist}"
|
||||
android:src="@drawable/ic_exit"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:src="@tools:sample/backgrounds/scenic"
|
||||
tools:ignore="ContentDescription" />
|
||||
app:artistImage="@{artist}"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_artist"
|
||||
tools:tint="@color/blue" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/artist_name"
|
||||
|
|
|
@ -26,8 +26,9 @@
|
|||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:src="@tools:sample/backgrounds/scenic"
|
||||
tools:ignore="ContentDescription" />
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_song"
|
||||
tools:tint="@color/blue" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/song_name"
|
||||
|
|
|
@ -22,7 +22,11 @@
|
|||
tools:layout="@layout/fragment_main">
|
||||
<action
|
||||
android:id="@+id/action_show_artist"
|
||||
app:destination="@id/artist_detail_fragment" />
|
||||
app:destination="@id/artist_detail_fragment"
|
||||
app:enterAnim="@anim/fragment_fade_enter"
|
||||
app:exitAnim="@anim/fragment_fade_exit"
|
||||
app:popEnterAnim="@anim/fragment_fade_enter"
|
||||
app:popExitAnim="@anim/fragment_fade_exit" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/artist_detail_fragment"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<fade xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="@android:integer/config_mediumAnimTime"/>
|
||||
android:duration="@android:integer/config_mediumAnimTime" />
|
|
@ -1,30 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="background">#151515</color>
|
||||
<color name="divider_color">#323232</color>
|
||||
<color name="selection_color">#484848</color>
|
||||
|
||||
<!--
|
||||
Base color set derived from Music Player GO.
|
||||
https://github.com/enricocid/Music-Player-GO
|
||||
-->
|
||||
<color name="red">#ef9a9a</color>
|
||||
<color name="pink">#f48fb1</color>
|
||||
<color name="purple">#ce93d8</color>
|
||||
<color name="deep_purple">#b39ddb</color>
|
||||
<color name="indigo">#9fa8da</color>
|
||||
<color name="blue">#90caf9</color>
|
||||
<color name="light_blue">#81d4fa</color>
|
||||
<color name="cyan">#80deea</color>
|
||||
<color name="teal">#80cbc4</color>
|
||||
<color name="green">#a5d6a7</color>
|
||||
<color name="light_green">#c5e1a5</color>
|
||||
<color name="lime">#e6ee9c</color>
|
||||
<color name="yellow">#fff59d</color>
|
||||
<color name="amber">#ffe082</color>
|
||||
<color name="orange">#ffcc80</color>
|
||||
<color name="deep_orange">#ffab91</color>
|
||||
<color name="brown">#bcaaa4</color>
|
||||
<color name="grey">#eeeeee</color>
|
||||
<color name="blue_grey">#b0bec5</color>
|
||||
</resources>
|
|
@ -1,30 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="background">#fafafa</color>
|
||||
<color name="divider_color">#cbcbcb</color>
|
||||
<color name="selection_color">#cbcbcb</color>
|
||||
<color name="background">#151515</color>
|
||||
<color name="divider_color">#323232</color>
|
||||
<color name="selection_color">#484848</color>
|
||||
|
||||
<!--
|
||||
Base color set derived from Music Player GO.
|
||||
https://github.com/enricocid/Music-Player-GO
|
||||
-->
|
||||
<color name="red">#f44336</color>
|
||||
<color name="pink">#e91e63</color>
|
||||
<color name="purple">#9c27b0</color>
|
||||
<color name="deep_purple">#673ab7</color>
|
||||
<color name="indigo">#3f51b5</color>
|
||||
<color name="blue">#2196f3</color>
|
||||
<color name="light_blue">#03a9f4</color>
|
||||
<color name="cyan">#00bcd4</color>
|
||||
<color name="teal">#009688</color>
|
||||
<color name="green">#4caf50</color>
|
||||
<color name="light_green">#8bc34a</color>
|
||||
<color name="lime">#cddc39</color>
|
||||
<color name="yellow">#ffeb3b</color>
|
||||
<color name="amber">#ffc107</color>
|
||||
<color name="orange">#ff9800</color>
|
||||
<color name="deep_orange">#ff5722</color>
|
||||
<color name="brown">#795548</color>
|
||||
<color name="grey">#9e9e9e</color>
|
||||
<color name="blue_grey">#607d8b</color>
|
||||
<color name="red">#ef9a9a</color>
|
||||
<color name="pink">#f48fb1</color>
|
||||
<color name="purple">#ce93d8</color>
|
||||
<color name="deep_purple">#b39ddb</color>
|
||||
<color name="indigo">#9fa8da</color>
|
||||
<color name="blue">#90caf9</color>
|
||||
<color name="light_blue">#81d4fa</color>
|
||||
<color name="cyan">#80deea</color>
|
||||
<color name="teal">#80cbc4</color>
|
||||
<color name="green">#a5d6a7</color>
|
||||
<color name="light_green">#c5e1a5</color>
|
||||
<color name="lime">#e6ee9c</color>
|
||||
<color name="yellow">#fff59d</color>
|
||||
<color name="amber">#ffe082</color>
|
||||
<color name="orange">#ffcc80</color>
|
||||
<color name="deep_orange">#ffab91</color>
|
||||
<color name="brown">#bcaaa4</color>
|
||||
<color name="grey">#eeeeee</color>
|
||||
<color name="blue_grey">#b0bec5</color>
|
||||
</resources>
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
<dimen name="cover_size_compact">44dp</dimen>
|
||||
<dimen name="cover_size_normal">56dp</dimen>
|
||||
<dimen name="cover_size_huge">168dp</dimen>
|
||||
|
||||
<dimen name="elevation_normal">4dp</dimen>
|
||||
</resources>
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Base theme -->
|
||||
<style name="Theme.Base" parent="Theme.AppCompat.DayNight.NoActionBar">
|
||||
<style name="Theme.Base" parent="Theme.AppCompat.NoActionBar">
|
||||
<item name="android:windowBackground">@color/background</item>
|
||||
<item name="android:statusBarColor">@android:color/black</item>
|
||||
<item name="android:fontFamily">@font/inter</item>
|
||||
|
|
Loading…
Reference in a new issue