From d158fc5786e69ef998523ab1ce11d72e2331fd38 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Mon, 31 Aug 2020 14:46:31 -0600 Subject: [PATCH] Add proper placeholders Add placeholders for album art, artist name, and album name if there arent any from the file itself. --- .../java/org/oxycblt/auxio/MainActivity.kt | 3 ++- .../oxycblt/auxio/library/LibraryFragment.kt | 24 +------------------ .../oxycblt/auxio/music/MusicRepository.kt | 2 +- .../org/oxycblt/auxio/music/MusicUtils.kt | 18 +++++++++++++- .../auxio/music/processing/MusicLoader.kt | 4 +--- .../org/oxycblt/auxio/songs/SongsFragment.kt | 8 ------- app/src/main/res/drawable/music_icon.xml | 10 ++++++++ app/src/main/res/layout/song_item.xml | 2 +- app/src/main/res/values/strings.xml | 3 +++ app/src/main/res/values/styles.xml | 1 + 10 files changed, 37 insertions(+), 38 deletions(-) create mode 100644 app/src/main/res/drawable/music_icon.xml diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 6c3992607..6bc1b27f7 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -3,6 +3,7 @@ package org.oxycblt.auxio import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AppCompatDelegate class MainActivity : AppCompatActivity() { @@ -10,7 +11,7 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - // AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) Log.d(this::class.simpleName, "Activity Created.") } 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 a10cc55d4..81b1e8342 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -8,10 +8,6 @@ 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 @@ -23,11 +19,6 @@ 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?, @@ -37,14 +28,7 @@ class LibraryFragment : Fragment() { inflater, R.layout.fragment_library, container, false ) - // 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 = AlbumAdapter(libraryModel.albums.value!!) binding.libraryRecycler.applyDivider() binding.libraryRecycler.setHasFixedSize(true) @@ -52,10 +36,4 @@ class LibraryFragment : Fragment() { return binding.root } - - override fun onDestroy() { - super.onDestroy() - - inflateJob.cancel() - } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt index e1bab5091..374110cba 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt @@ -21,7 +21,7 @@ class MusicRepository { val start = System.currentTimeMillis() - val loader = MusicLoader(app) + val loader = MusicLoader(app.contentResolver) if (loader.response == MusicLoaderResponse.DONE) { // If the loading succeeds, then process the songs and set them. 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 d09667545..be51c6eca 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt @@ -79,7 +79,7 @@ fun ImageView.getCoverArt(any: Any) { load(uri) { crossfade(true) placeholder(android.R.color.transparent) - error(android.R.color.transparent) + error(R.drawable.music_icon) } } @@ -92,3 +92,19 @@ fun TextView.getAlbumSongs(album: Album) { context.getString(R.string.format_multi_song_count, album.numSongs.toString()) } } + +@BindingAdapter("songInfo") +fun TextView.getSongInfo(song: Song) { + var artist = song.album.artist.name + var album = song.album.title + + if (artist == "") { + artist = context.getString(R.string.label_unknown_artist) + } + + if (album == "") { + album = context.getString(R.string.label_unknown_album) + } + + text = context.getString(R.string.format_song_info, artist, album) +} diff --git a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt index 54cb13ffd..b010f218e 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt @@ -1,6 +1,5 @@ package org.oxycblt.auxio.music.processing -import android.app.Application import android.content.ContentResolver import android.database.Cursor import android.provider.MediaStore.Audio.Albums @@ -21,7 +20,7 @@ enum class MusicLoaderResponse { // Class that loads music from the FileSystem. // FIXME: This thing probably has some memory leaks *somewhere* -class MusicLoader(app: Application) { +class MusicLoader(private val resolver: ContentResolver) { var genres = mutableListOf() var artists = mutableListOf() @@ -34,7 +33,6 @@ class MusicLoader(app: Application) { private var songCursor: Cursor? = null val response: MusicLoaderResponse - private val resolver: ContentResolver = app.contentResolver init { response = findMusic() 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 42d582548..8dd85bfbe 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -8,9 +8,6 @@ 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 @@ -18,11 +15,6 @@ 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) } diff --git a/app/src/main/res/drawable/music_icon.xml b/app/src/main/res/drawable/music_icon.xml new file mode 100644 index 000000000..cda97cac2 --- /dev/null +++ b/app/src/main/res/drawable/music_icon.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/song_item.xml b/app/src/main/res/layout/song_item.xml index 16784022f..ca5356172 100644 --- a/app/src/main/res/layout/song_item.xml +++ b/app/src/main/res/layout/song_item.xml @@ -50,9 +50,9 @@ android:layout_marginStart="@dimen/margin_medium" android:ellipsize="end" android:maxLines="1" - android:text="@{@string/format_song_info(song.album.artist.name, song.album.title)}" android:textAppearance="?android:attr/textAppearanceListItemSecondary" android:textColor="?android:attr/textColorSecondary" + app:songInfo="@{song}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/duration" app:layout_constraintStart_toEndOf="@+id/cover" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8d214ba42..6885cf30e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,6 +10,9 @@ Retry 1 Song + Unknown Genre + Unknown Artist + Unknown Album %s Songs %s / %s diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 30997b413..30ad6e03f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -2,6 +2,7 @@