From cdd4d5ebcde0cad5e2071d4b1db26c8b2f9882ba Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sat, 10 Sep 2022 20:30:47 -0600 Subject: [PATCH] music: make uids use music mode Make UID structure dependent on the music mode. This involves replacing the "tag" value with more structured fields and appending the int code of the music mode to the UUID rather than making it part of the UID's "tag". UIDs aren't quite a UUID, so this is allowed. --- .../auxio/detail/AlbumDetailFragment.kt | 2 +- .../auxio/detail/ArtistDetailFragment.kt | 2 +- .../oxycblt/auxio/detail/DetailViewModel.kt | 2 +- .../auxio/detail/GenreDetailFragment.kt | 2 +- .../oxycblt/auxio/home/AdaptiveTabStrategy.kt | 30 +++++++- .../org/oxycblt/auxio/home/HomeFragment.kt | 4 +- .../org/oxycblt/auxio/home/HomeViewModel.kt | 4 +- .../auxio/home/list/AlbumListFragment.kt | 4 +- .../auxio/home/list/ArtistListFragment.kt | 4 +- .../auxio/home/list/GenreListFragment.kt | 4 +- .../auxio/home/list/SongListFragment.kt | 4 +- .../java/org/oxycblt/auxio/home/tabs/Tab.kt | 2 +- .../org/oxycblt/auxio/home/tabs/TabAdapter.kt | 12 +++- .../auxio/home/tabs/TabCustomizeDialog.kt | 2 +- .../auxio/image/extractor/Components.kt | 2 +- .../java/org/oxycblt/auxio/music/Music.kt | 70 +++++++++++++++---- .../org/oxycblt/auxio/music/system/Indexer.kt | 2 +- .../oxycblt/auxio/music/{ => ui}/MusicMode.kt | 21 +----- .../org/oxycblt/auxio/music/{ => ui}/Sort.kt | 10 ++- .../auxio/playback/PlaybackViewModel.kt | 2 +- .../oxycblt/auxio/search/SearchFragment.kt | 2 +- .../oxycblt/auxio/search/SearchViewModel.kt | 4 +- .../org/oxycblt/auxio/settings/Settings.kt | 4 +- 23 files changed, 129 insertions(+), 66 deletions(-) rename app/src/main/java/org/oxycblt/auxio/music/{ => ui}/MusicMode.kt (71%) rename app/src/main/java/org/oxycblt/auxio/music/{ => ui}/Sort.kt (98%) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index 7e4754e97..9a1cf78a4 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -37,7 +37,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.fragment.MenuFragment import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index c2ba91fe4..93361c660 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -35,7 +35,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.fragment.MenuFragment import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index 907899caf..272e9d5be 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -38,7 +38,7 @@ import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.ReleaseType import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.recycler.Header import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index 13cad1809..ee9f0319b 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -36,7 +36,7 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.fragment.MenuFragment import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt b/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt index 9538bbe95..d5e9d6e26 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt @@ -20,6 +20,8 @@ package org.oxycblt.auxio.home import android.content.Context import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator +import org.oxycblt.auxio.R +import org.oxycblt.auxio.music.ui.MusicMode import org.oxycblt.auxio.util.logD /** @@ -36,18 +38,40 @@ class AdaptiveTabStrategy(context: Context, private val homeModel: HomeViewModel override fun onConfigureTab(tab: TabLayout.Tab, position: Int) { val tabMode = homeModel.tabs[position] + val icon: Int + val string: Int + + when (tabMode) { + MusicMode.SONGS -> { + icon = R.drawable.ic_song_24 + string = R.string.lbl_songs + } + MusicMode.ALBUMS -> { + icon = R.drawable.ic_album_24 + string = R.string.lbl_albums + } + MusicMode.ARTISTS -> { + icon = R.drawable.ic_artist_24 + string = R.string.lbl_artists + } + MusicMode.GENRES -> { + icon = R.drawable.ic_genre_24 + string = R.string.lbl_genres + } + } + when { width < 370 -> { logD("Using icon-only configuration") - tab.setIcon(tabMode.icon).setContentDescription(tabMode.string) + tab.setIcon(icon).setContentDescription(string) } width < 600 -> { logD("Using text-only configuration") - tab.setText(tabMode.string) + tab.setText(string) } else -> { logD("Using icon-and-text configuration") - tab.setIcon(tabMode.icon).setText(tabMode.string) + tab.setIcon(icon).setText(string) } } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index dd68dd14f..6d77756da 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -47,11 +47,11 @@ import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.system.Indexer +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.ui.MainNavigationAction import org.oxycblt.auxio.ui.NavigationViewModel diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index 9238af08f..94b5364b8 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -26,10 +26,10 @@ import org.oxycblt.auxio.home.tabs.Tab import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.util.application import org.oxycblt.auxio.util.logD diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 3ff5a0058..2722abe33 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -24,11 +24,11 @@ import android.view.ViewGroup import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Album -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.formatDurationMs import org.oxycblt.auxio.music.secsToMs +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.ui.recycler.AlbumViewHolder import org.oxycblt.auxio.ui.recycler.IndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index ec77ca008..b18c0b479 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -23,10 +23,10 @@ import android.view.ViewGroup import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Artist -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.formatDurationMs +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.ui.recycler.ArtistViewHolder import org.oxycblt.auxio.ui.recycler.IndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item 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 f64b19204..f246c0a59 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 @@ -23,10 +23,10 @@ import android.view.ViewGroup import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Genre -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.formatDurationMs +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.ui.recycler.GenreViewHolder import org.oxycblt.auxio.ui.recycler.IndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 90a14cbaa..3f4e11059 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -23,12 +23,12 @@ import android.view.View import android.view.ViewGroup import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.formatDurationMs import org.oxycblt.auxio.music.secsToMs +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.recycler.IndicatorAdapter import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt b/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt index e0726e3ff..733afca7f 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/tabs/Tab.kt @@ -21,7 +21,7 @@ import org.oxycblt.auxio.home.tabs.Tab.Companion.fromSequence import org.oxycblt.auxio.home.tabs.Tab.Companion.toSequence import org.oxycblt.auxio.home.tabs.Tab.Invisible import org.oxycblt.auxio.home.tabs.Tab.Visible -import org.oxycblt.auxio.music.MusicMode +import org.oxycblt.auxio.music.ui.MusicMode import org.oxycblt.auxio.util.logE /** diff --git a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt index 35285905b..256a914a8 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt @@ -22,8 +22,9 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.ItemTabBinding -import org.oxycblt.auxio.music.MusicMode +import org.oxycblt.auxio.music.ui.MusicMode import org.oxycblt.auxio.ui.recycler.DialogViewHolder import org.oxycblt.auxio.util.inflater @@ -75,7 +76,14 @@ class TabViewHolder private constructor(private val binding: ItemTabBinding) : binding.root.setOnClickListener { listener.onVisibilityToggled(item.mode) } binding.tabIcon.apply { - setText(item.mode.string) + setText( + when (item.mode) { + MusicMode.SONGS -> R.string.lbl_songs + MusicMode.ALBUMS -> R.string.lbl_albums + MusicMode.ARTISTS -> R.string.lbl_artists + MusicMode.GENRES -> R.string.lbl_genres + } + ) isChecked = item is Tab.Visible } diff --git a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt index 63372fa90..4a3257d9c 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabCustomizeDialog.kt @@ -25,7 +25,7 @@ import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.DialogTabsBinding -import org.oxycblt.auxio.music.MusicMode +import org.oxycblt.auxio.music.ui.MusicMode import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.fragment.ViewBindingDialogFragment import org.oxycblt.auxio.util.context diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt index c7ba9fddb..20d4ad4ee 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt @@ -34,7 +34,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.Sort import kotlin.math.min /** A basic keyer for music data. */ diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt index b649cc3cc..ed9c87944 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt @@ -26,8 +26,11 @@ import kotlinx.parcelize.Parcelize import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.R import org.oxycblt.auxio.music.Date.Companion.from +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.ui.recycler.Item import org.oxycblt.auxio.util.inRangeOrNull +import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.nonZeroOrNull import org.oxycblt.auxio.util.unlikelyToBeNull import java.security.MessageDigest @@ -36,7 +39,6 @@ import java.text.Collator import java.util.UUID import kotlin.math.max import kotlin.math.min -import kotlin.reflect.KClass // --- MUSIC MODELS --- @@ -98,17 +100,46 @@ sealed class Music : Item { * @author OxygenCobalt */ @Parcelize - class UID private constructor(private val tag: String, private val uuid: UUID) : Parcelable { + class UID private constructor( + private val isMusicBrainz: Boolean, + private val mode: MusicMode, + private val uuid: UUID + ) : Parcelable { // Cache the hashCode for speed - @IgnoredOnParcel private val hashCode = 31 * tag.hashCode() + uuid.hashCode() + @IgnoredOnParcel private val hashCode: Int + + init { + var result = isMusicBrainz.hashCode() + result = 31 * result + mode.hashCode() + result = 31 * result + uuid.hashCode() + hashCode = result + + logD(this) + } override fun hashCode() = hashCode - override fun equals(other: Any?) = other is UID && tag == other.tag && uuid == other.uuid + override fun equals(other: Any?) = other is UID && + isMusicBrainz == other.isMusicBrainz && + mode == other.mode && uuid == other.uuid - override fun toString() = "$tag:$uuid" + override fun toString(): String { + // Format comes first, delimited by a ":". + val format = if (isMusicBrainz) { + FORMAT_MUSICBRAINZ + } else { + FORMAT_AUXIO + } + + // Instead of making new string values for the mode, just append it's intCode + // in front of the UUID. So I guess it's technically not a true UUID, but whatever. + return "$format:${mode.intCode.toString(16)}-$uuid" + } companion object { + private const val FORMAT_AUXIO = "org.oxycblt.auxio" + private const val FORMAT_MUSICBRAINZ = "org.musicbrainz" + /** Parse a [UID] from the string [uid]. Returns null if not valid. */ fun fromString(uid: String): UID? { val split = uid.split(':', limit = 2) @@ -116,7 +147,21 @@ sealed class Music : Item { return null } - return UID(tag = split[0], split[1].toUuid() ?: return null) + val isMusicBrainz = when (split[0]) { + FORMAT_MUSICBRAINZ -> true + FORMAT_AUXIO -> false + else -> return null + } + + val ids = split[1].split('-', limit = 2) + if (ids.size != 2) { + return null + } + + val mode = MusicMode.fromInt(ids[0].toIntOrNull(16) ?: return null) ?: return null + val uuid = UUID.fromString(ids[1]) + + return UID(isMusicBrainz, mode, uuid) } /** @@ -124,15 +169,14 @@ sealed class Music : Item { * * This is Auxio's UID format. */ - fun hashed(clazz: KClass<*>, updates: MessageDigest.() -> Unit): UID { + fun hashed(mode: MusicMode, updates: MessageDigest.() -> Unit): UID { // Auxio hashes consist of the MD5 hash of the non-subjective, consistent // tags in a music item. For easier use with MusicBrainz IDs, we transform // this into a UUID too. val digest = MessageDigest.getInstance("MD5") updates(digest) val uuid = digest.digest().toUuid() - val tag = "auxio.${unlikelyToBeNull(clazz.simpleName).lowercase()}" - return UID(tag, uuid) + return UID(false, mode, uuid) } } } @@ -276,7 +320,7 @@ class Song constructor(raw: Raw) : Music() { // Generally, we calculate UIDs at the end since everything will definitely be initialized // by now. uid = - UID.hashed(this::class) { + UID.hashed(MusicMode.SONGS) { update(rawName) update(_rawAlbum.name) update(_rawAlbum.date) @@ -368,7 +412,7 @@ class Album constructor(raw: Raw, override val songs: List) : MusicParent( init { uid = - UID.hashed(this::class) { + UID.hashed(MusicMode.ALBUMS) { update(rawName) update(_rawArtist.name) update(date) @@ -420,7 +464,7 @@ constructor( val durationMs = songs.sumOf { it.durationMs } init { - uid = UID.hashed(this::class) { update(rawName) } + uid = UID.hashed(MusicMode.ARTISTS) { update(rawName) } for (album in albums) { album._link(this) @@ -460,7 +504,7 @@ class Genre constructor(raw: Raw, override val songs: List) : MusicParent( val durationMs = songs.sumOf { it.durationMs } init { - uid = UID.hashed(this::class) { update(rawName) } + uid = UID.hashed(MusicMode.GENRES) { update(rawName) } for (song in songs) { song._link(this) diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt index e97c28388..5395b3e66 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt @@ -32,12 +32,12 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.extractor.Api21MediaStoreLayer import org.oxycblt.auxio.music.extractor.Api29MediaStoreLayer import org.oxycblt.auxio.music.extractor.Api30MediaStoreLayer import org.oxycblt.auxio.music.extractor.CacheLayer import org.oxycblt.auxio.music.extractor.MetadataLayer +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE import org.oxycblt.auxio.util.logW diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicMode.kt b/app/src/main/java/org/oxycblt/auxio/music/ui/MusicMode.kt similarity index 71% rename from app/src/main/java/org/oxycblt/auxio/music/MusicMode.kt rename to app/src/main/java/org/oxycblt/auxio/music/ui/MusicMode.kt index 0054ce4e6..90663d641 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicMode.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/ui/MusicMode.kt @@ -15,10 +15,9 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.music +package org.oxycblt.auxio.music.ui import org.oxycblt.auxio.IntegerTable -import org.oxycblt.auxio.R enum class MusicMode { SONGS, @@ -26,24 +25,6 @@ enum class MusicMode { ARTISTS, GENRES; - val string: Int - get() = - when (this) { - SONGS -> R.string.lbl_songs - ALBUMS -> R.string.lbl_albums - ARTISTS -> R.string.lbl_artists - GENRES -> R.string.lbl_genres - } - - val icon: Int - get() = - when (this) { - SONGS -> R.drawable.ic_song_24 - ALBUMS -> R.drawable.ic_album_24 - ARTISTS -> R.drawable.ic_artist_24 - GENRES -> R.drawable.ic_genre_24 - } - val intCode: Int get() = when (this) { diff --git a/app/src/main/java/org/oxycblt/auxio/music/Sort.kt b/app/src/main/java/org/oxycblt/auxio/music/ui/Sort.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/music/Sort.kt rename to app/src/main/java/org/oxycblt/auxio/music/ui/Sort.kt index 35ba7c4c2..9f4105fce 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Sort.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/ui/Sort.kt @@ -15,12 +15,18 @@ * along with this program. If not, see . */ -package org.oxycblt.auxio.music +package org.oxycblt.auxio.music.ui import androidx.annotation.IdRes import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R -import org.oxycblt.auxio.music.Sort.Mode +import org.oxycblt.auxio.music.Album +import org.oxycblt.auxio.music.Artist +import org.oxycblt.auxio.music.Date +import org.oxycblt.auxio.music.Genre +import org.oxycblt.auxio.music.Music +import org.oxycblt.auxio.music.Song +import org.oxycblt.auxio.music.ui.Sort.Mode /** * Represents the sort modes used in Auxio. diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index 9e1d4f26f..474f5968e 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -28,11 +28,11 @@ import kotlinx.coroutines.launch import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.dsToMs import org.oxycblt.auxio.music.msToDs +import org.oxycblt.auxio.music.ui.MusicMode import org.oxycblt.auxio.playback.state.InternalPlayer import org.oxycblt.auxio.playback.state.PlaybackStateDatabase import org.oxycblt.auxio.playback.state.PlaybackStateManager diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index a8814b368..996c716c6 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -35,9 +35,9 @@ import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song +import org.oxycblt.auxio.music.ui.MusicMode import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.fragment.MenuFragment import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt index 5eb802480..17b28c5fa 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt @@ -33,10 +33,10 @@ import org.oxycblt.auxio.music.Album import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Music -import org.oxycblt.auxio.music.MusicMode import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.music.Sort +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.ui.recycler.Header import org.oxycblt.auxio.ui.recycler.Item diff --git a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt index 17e2a5558..a26cad628 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt @@ -28,9 +28,9 @@ import org.oxycblt.auxio.IntegerTable import org.oxycblt.auxio.R import org.oxycblt.auxio.home.tabs.Tab import org.oxycblt.auxio.music.Directory -import org.oxycblt.auxio.music.MusicMode -import org.oxycblt.auxio.music.Sort import org.oxycblt.auxio.music.dirs.MusicDirs +import org.oxycblt.auxio.music.ui.MusicMode +import org.oxycblt.auxio.music.ui.Sort import org.oxycblt.auxio.playback.BarAction import org.oxycblt.auxio.playback.replaygain.ReplayGainMode import org.oxycblt.auxio.playback.replaygain.ReplayGainPreAmp