diff --git a/app/build.gradle b/app/build.gradle index 27ecad532..16a5472cf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' } diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index cadd73a35..07b2f2272 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -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(val onClick: (T) -> Unit) \ No newline at end of file +class ClickListener(val onClick: (T) -> Unit) diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt index 151159a1a..508becaf8 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -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) + ) + } } } diff --git a/app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt b/app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt index 6713734c3..d0d3cdbd8 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt @@ -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() diff --git a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt index 1545436cd..f07f47573 100644 --- a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt @@ -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() diff --git a/app/src/main/java/org/oxycblt/auxio/coil/ArtistImageFetcher.kt b/app/src/main/java/org/oxycblt/auxio/music/coil/ArtistImageFetcher.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/coil/ArtistImageFetcher.kt rename to app/src/main/java/org/oxycblt/auxio/music/coil/ArtistImageFetcher.kt index 4b330870f..6e0750348 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/ArtistImageFetcher.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/coil/ArtistImageFetcher.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.coil +package org.oxycblt.auxio.music.coil import android.content.Context import android.graphics.Bitmap diff --git a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt b/app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt rename to app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt index 5da654302..00d29bdde 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/CoilUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/coil/CoilUtils.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.coil +package org.oxycblt.auxio.music.coil import android.content.Context import android.net.Uri diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt index 27ab20848..b6c9dc693 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt @@ -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( diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt index 4e677fc7a..601b2ea72 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -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( - inflater, R.layout.fragment_songs, container, false - ) + val binding = FragmentSongsBinding.inflate(inflater) binding.songRecycler.adapter = SongAdapter( musicModel.songs.value!!, diff --git a/app/src/main/java/org/oxycblt/auxio/theme/ThemeUtils.kt b/app/src/main/java/org/oxycblt/auxio/theme/ThemeUtils.kt index bb0073a9d..78d632b2f 100644 --- a/app/src/main/java/org/oxycblt/auxio/theme/ThemeUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/theme/ThemeUtils.kt @@ -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) diff --git a/app/src/main/res/layout/fragment_artist_detail.xml b/app/src/main/res/layout/fragment_artist_detail.xml index 22f7d96d2..593ba2a9d 100644 --- a/app/src/main/res/layout/fragment_artist_detail.xml +++ b/app/src/main/res/layout/fragment_artist_detail.xml @@ -10,7 +10,7 @@ type="org.oxycblt.auxio.music.models.Artist" /> - - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index 6e6f048fb..43b621af1 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -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" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_album.xml b/app/src/main/res/layout/item_album.xml index 4d9a2035c..a843b9027 100644 --- a/app/src/main/res/layout/item_album.xml +++ b/app/src/main/res/layout/item_album.xml @@ -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" /> + app:artistImage="@{artist}" + tools:ignore="ContentDescription" + tools:src="@drawable/ic_artist" + tools:tint="@color/blue" /> + tools:ignore="ContentDescription" + tools:src="@drawable/ic_song" + tools:tint="@color/blue" /> + 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" /> \ No newline at end of file + android:duration="@android:integer/config_mediumAnimTime" /> \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml deleted file mode 100644 index ecb452524..000000000 --- a/app/src/main/res/values-night/colors.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - #151515 - #323232 - #484848 - - - #ef9a9a - #f48fb1 - #ce93d8 - #b39ddb - #9fa8da - #90caf9 - #81d4fa - #80deea - #80cbc4 - #a5d6a7 - #c5e1a5 - #e6ee9c - #fff59d - #ffe082 - #ffcc80 - #ffab91 - #bcaaa4 - #eeeeee - #b0bec5 - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 29ff233ac..ecb452524 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,30 +1,30 @@ - #fafafa - #cbcbcb - #cbcbcb + #151515 + #323232 + #484848 - #f44336 - #e91e63 - #9c27b0 - #673ab7 - #3f51b5 - #2196f3 - #03a9f4 - #00bcd4 - #009688 - #4caf50 - #8bc34a - #cddc39 - #ffeb3b - #ffc107 - #ff9800 - #ff5722 - #795548 - #9e9e9e - #607d8b + #ef9a9a + #f48fb1 + #ce93d8 + #b39ddb + #9fa8da + #90caf9 + #81d4fa + #80deea + #80cbc4 + #a5d6a7 + #c5e1a5 + #e6ee9c + #fff59d + #ffe082 + #ffcc80 + #ffab91 + #bcaaa4 + #eeeeee + #b0bec5 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e63b33708..19aa3c947 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -13,6 +13,7 @@ 44dp 56dp + 168dp 4dp \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d977b2ae5..37696048a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ -