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 13618d9d8..c4bdf04d3 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -47,7 +47,7 @@ class AlbumDetailFragment : DetailFragment() { val detailAdapter = AlbumDetailAdapter( detailModel, playbackModel, viewLifecycleOwner, doOnClick = { playbackModel.playSong(it, PlaybackMode.IN_ALBUM) }, - doOnLongClick = { data, view -> + doOnLongClick = { view, data -> ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_ALBUM) } ) 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 2911b58f0..2a6560733 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -54,7 +54,7 @@ class ArtistDetailFragment : DetailFragment() { ) } }, - doOnLongClick = { data, view -> + doOnLongClick = { view, data -> ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_ARTIST) } ) 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 322edefe9..4651fab49 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -46,7 +46,7 @@ class GenreDetailFragment : DetailFragment() { doOnClick = { playbackModel.playSong(it, PlaybackMode.IN_GENRE) }, - doOnLongClick = { data, view -> + doOnLongClick = { view, data -> ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_GENRE) } ) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumDetailAdapter.kt index c9e13b64e..08ef57590 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/adapters/AlbumDetailAdapter.kt @@ -29,7 +29,7 @@ class AlbumDetailAdapter( private val playbackModel: PlaybackViewModel, private val lifecycleOwner: LifecycleOwner, private val doOnClick: (data: Song) -> Unit, - private val doOnLongClick: (data: Song, view: View) -> Unit + private val doOnLongClick: (view: View, data: Song) -> Unit ) : ListAdapter(DiffCallback()) { private var currentSong: Song? = null diff --git a/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt index 242b16f23..9bdfd5d8c 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/adapters/ArtistDetailAdapter.kt @@ -29,7 +29,7 @@ class ArtistDetailAdapter( private val playbackModel: PlaybackViewModel, private val lifecycleOwner: LifecycleOwner, private val doOnClick: (data: Album) -> Unit, - private val doOnLongClick: (data: Album, view: View) -> Unit, + private val doOnLongClick: (view: View, data: Album) -> Unit, ) : ListAdapter(DiffCallback()) { private var currentAlbum: Album? = null private var lastHolder: Highlightable? = null diff --git a/app/src/main/java/org/oxycblt/auxio/detail/adapters/GenreDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/adapters/GenreDetailAdapter.kt index 060bbf1ad..697cc13a5 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/adapters/GenreDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/adapters/GenreDetailAdapter.kt @@ -29,7 +29,7 @@ class GenreDetailAdapter( private val playbackModel: PlaybackViewModel, private val lifecycleOwner: LifecycleOwner, private val doOnClick: (data: Song) -> Unit, - private val doOnLongClick: (data: Song, view: View) -> Unit + private val doOnLongClick: (view: View, data: Song) -> Unit ) : ListAdapter(DiffCallback()) { private var currentSong: Song? = null diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryAdapter.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryAdapter.kt index fe154d84b..049989b87 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryAdapter.kt @@ -17,7 +17,7 @@ import org.oxycblt.auxio.recycler.viewholders.GenreViewHolder */ class LibraryAdapter( private val doOnClick: (data: BaseModel) -> Unit, - private val doOnLongClick: (data: BaseModel, view: View) -> Unit + private val doOnLongClick: (view: View, data: BaseModel) -> Unit ) : RecyclerView.Adapter() { private var data = listOf() 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 37f047a1d..c88e8c69e 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -38,7 +38,7 @@ class LibraryFragment : Fragment() { ): View { val binding = FragmentLibraryBinding.inflate(inflater) - val libraryAdapter = LibraryAdapter(::onItemSelection) { data, view -> + val libraryAdapter = LibraryAdapter(::onItemSelection) { view, data -> ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_NONE) } 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 e78957302..86d8ccfa4 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -20,6 +20,7 @@ import org.oxycblt.auxio.playback.state.LoopMode import org.oxycblt.auxio.playback.state.PlaybackMode import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.recycler.SortMode +import org.oxycblt.auxio.settings.SettingsManager /** * The ViewModel that provides a UI frontend for [PlaybackStateManager]. @@ -87,6 +88,7 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { } private val playbackManager = PlaybackStateManager.getInstance() + private val settingsManager = SettingsManager.getInstance() init { playbackManager.addCallback(this) @@ -105,9 +107,9 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback { /** * Play a song. * @param song The song to be played - * @param mode The [PlaybackMode] for it to be played in. + * @param mode The [PlaybackMode] for it to be played in. Defaults to the preferred song playback mode if not specified. */ - fun playSong(song: Song, mode: PlaybackMode) { + fun playSong(song: Song, mode: PlaybackMode = settingsManager.songPlaybackMode) { playbackManager.playSong(song, mode) } diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt index 34b77fd92..d4b08b4ce 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/BaseViewHolder.kt @@ -16,7 +16,7 @@ import org.oxycblt.auxio.music.BaseModel abstract class BaseViewHolder( private val baseBinding: ViewDataBinding, private val doOnClick: ((data: T) -> Unit)?, - private val doOnLongClick: ((data: T, view: View) -> Unit)? + private val doOnLongClick: ((view: View, data: T) -> Unit)? ) : RecyclerView.ViewHolder(baseBinding.root) { init { // Force the layout to *actually* be the screen width @@ -39,7 +39,7 @@ abstract class BaseViewHolder( doOnLongClick?.let { onLongClick -> baseBinding.root.setOnLongClickListener { - onLongClick(data, baseBinding.root) + onLongClick(baseBinding.root, data) true } diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ModelHolders.kt b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ModelHolders.kt index f6ef1d732..7adb93f34 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ModelHolders.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ModelHolders.kt @@ -37,7 +37,7 @@ import org.oxycblt.auxio.music.Song class SongViewHolder private constructor( private val binding: ItemSongBinding, doOnClick: (data: Song) -> Unit, - doOnLongClick: (data: Song, view: View) -> Unit + doOnLongClick: (view: View, data: Song) -> Unit ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Song) { @@ -56,7 +56,7 @@ class SongViewHolder private constructor( fun from( context: Context, doOnClick: (data: Song) -> Unit, - doOnLongClick: (data: Song, view: View) -> Unit + doOnLongClick: (view: View, data: Song) -> Unit ): SongViewHolder { return SongViewHolder( ItemSongBinding.inflate(LayoutInflater.from(context)), @@ -72,7 +72,7 @@ class SongViewHolder private constructor( class AlbumViewHolder private constructor( private val binding: ItemAlbumBinding, doOnClick: (data: Album) -> Unit, - doOnLongClick: (data: Album, view: View) -> Unit + doOnLongClick: (view: View, data: Album) -> Unit ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Album) { @@ -89,7 +89,7 @@ class AlbumViewHolder private constructor( fun from( context: Context, doOnClick: (data: Album) -> Unit, - doOnLongClick: (data: Album, view: View) -> Unit + doOnLongClick: (view: View, data: Album) -> Unit ): AlbumViewHolder { return AlbumViewHolder( ItemAlbumBinding.inflate(LayoutInflater.from(context)), @@ -105,7 +105,7 @@ class AlbumViewHolder private constructor( class ArtistViewHolder private constructor( private val binding: ItemArtistBinding, doOnClick: (Artist) -> Unit, - doOnLongClick: (data: Artist, view: View) -> Unit + doOnLongClick: (view: View, data: Artist) -> Unit ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Artist) { @@ -122,7 +122,7 @@ class ArtistViewHolder private constructor( fun from( context: Context, doOnClick: (Artist) -> Unit, - doOnLongClick: (data: Artist, view: View) -> Unit + doOnLongClick: (view: View, data: Artist) -> Unit ): ArtistViewHolder { return ArtistViewHolder( ItemArtistBinding.inflate(LayoutInflater.from(context)), @@ -138,7 +138,7 @@ class ArtistViewHolder private constructor( class GenreViewHolder private constructor( private val binding: ItemGenreBinding, doOnClick: (Genre) -> Unit, - doOnLongClick: (data: Genre, view: View) -> Unit + doOnLongClick: (view: View, data: Genre) -> Unit ) : BaseViewHolder(binding, doOnClick, doOnLongClick) { override fun onBind(data: Genre) { @@ -155,7 +155,7 @@ class GenreViewHolder private constructor( fun from( context: Context, doOnClick: (Genre) -> Unit, - doOnLongClick: (data: Genre, view: View) -> Unit + doOnLongClick: (view: View, data: Genre) -> Unit ): GenreViewHolder { return GenreViewHolder( ItemGenreBinding.inflate(LayoutInflater.from(context)), diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt index 14ca17aef..a837193b2 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt @@ -23,7 +23,7 @@ import org.oxycblt.auxio.recycler.viewholders.SongViewHolder */ class SearchAdapter( private val doOnClick: (data: BaseModel) -> Unit, - private val doOnLongClick: (data: BaseModel, view: View) -> Unit + private val doOnLongClick: (view: View, data: BaseModel) -> Unit ) : ListAdapter(DiffCallback()) { override fun getItemViewType(position: Int): Int { 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 e8c56bd7f..31f68ff15 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -23,7 +23,6 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Header import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.PlaybackViewModel -import org.oxycblt.auxio.settings.SettingsManager import org.oxycblt.auxio.ui.ActionMenu import org.oxycblt.auxio.ui.accent import org.oxycblt.auxio.ui.fixAnimationInfoMemoryLeak @@ -54,7 +53,7 @@ class SearchFragment : Fragment() { // styling to Material given all the second-and-third-order effects it has. val accent = accent.first.toColor(requireContext()) - val searchAdapter = SearchAdapter(::onItemSelection) { data, view -> + val searchAdapter = SearchAdapter(::onItemSelection) { view, data -> ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_NONE) } @@ -146,12 +145,11 @@ class SearchFragment : Fragment() { /** * Navigate to an item, or play it, depending on what the given item is. - * @param baseModel The data things should be done with + * @param baseModel The data the action should be done with */ private fun onItemSelection(baseModel: BaseModel) { if (baseModel is Song) { - val settingsManager = SettingsManager.getInstance() - playbackModel.playSong(baseModel, settingsManager.songPlaybackMode) + playbackModel.playSong(baseModel) return } diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongsAdapter.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongsAdapter.kt index f2d2c4419..503b1a456 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsAdapter.kt @@ -15,7 +15,7 @@ import org.oxycblt.auxio.recycler.viewholders.SongViewHolder class SongsAdapter( private val data: List, private val doOnClick: (data: Song) -> Unit, - private val doOnLongClick: (data: Song, view: View) -> Unit + private val doOnLongClick: (view: View, data: Song) -> Unit ) : RecyclerView.Adapter() { override fun getItemCount(): Int = data.size 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 c1841f54e..15907443f 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -17,9 +17,7 @@ import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentSongsBinding import org.oxycblt.auxio.logD import org.oxycblt.auxio.music.MusicStore -import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.playback.PlaybackViewModel -import org.oxycblt.auxio.settings.SettingsManager import org.oxycblt.auxio.ui.ActionMenu import org.oxycblt.auxio.ui.accent import org.oxycblt.auxio.ui.getLandscapeSpans @@ -35,7 +33,6 @@ import kotlin.math.ceil */ class SongsFragment : Fragment() { private val playbackModel: PlaybackViewModel by activityViewModels() - private val settingsManager = SettingsManager.getInstance() // Lazy init the text size so that it doesn't have to be calculated every time. private val indicatorTextSize: Float by lazy { @@ -53,7 +50,9 @@ class SongsFragment : Fragment() { val binding = FragmentSongsBinding.inflate(inflater) val musicStore = MusicStore.getInstance() - val songAdapter = SongsAdapter(musicStore.songs, ::playSong, ::showSongMenu) + val songAdapter = SongsAdapter(musicStore.songs, playbackModel::playSong) { view, data -> + ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_NONE) + } // --- UI SETUP --- @@ -194,12 +193,4 @@ class SongsFragment : Fragment() { setupWithFastScroller(binding.songFastScroll) } } - - private fun playSong(song: Song) { - playbackModel.playSong(song, settingsManager.songPlaybackMode) - } - - private fun showSongMenu(song: Song, view: View) { - ActionMenu(requireCompatActivity(), view, song, ActionMenu.FLAG_NONE) - } }