Update ViewHolder long-click structure
Make a minor change to the viewholder long-click arguments.
This commit is contained in:
parent
7de02af86f
commit
fc33e01b89
15 changed files with 30 additions and 39 deletions
|
@ -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)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -54,7 +54,7 @@ class ArtistDetailFragment : DetailFragment() {
|
|||
)
|
||||
}
|
||||
},
|
||||
doOnLongClick = { data, view ->
|
||||
doOnLongClick = { view, data ->
|
||||
ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_ARTIST)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
)
|
||||
|
|
|
@ -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<BaseModel, RecyclerView.ViewHolder>(DiffCallback()) {
|
||||
|
||||
private var currentSong: Song? = null
|
||||
|
|
|
@ -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<BaseModel, RecyclerView.ViewHolder>(DiffCallback()) {
|
||||
private var currentAlbum: Album? = null
|
||||
private var lastHolder: Highlightable? = null
|
||||
|
|
|
@ -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<BaseModel, RecyclerView.ViewHolder>(DiffCallback()) {
|
||||
|
||||
private var currentSong: Song? = null
|
||||
|
|
|
@ -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<RecyclerView.ViewHolder>() {
|
||||
|
||||
private var data = listOf<BaseModel>()
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import org.oxycblt.auxio.music.BaseModel
|
|||
abstract class BaseViewHolder<T : BaseModel>(
|
||||
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<T : BaseModel>(
|
|||
|
||||
doOnLongClick?.let { onLongClick ->
|
||||
baseBinding.root.setOnLongClickListener {
|
||||
onLongClick(data, baseBinding.root)
|
||||
onLongClick(baseBinding.root, data)
|
||||
|
||||
true
|
||||
}
|
||||
|
|
|
@ -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<Song>(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<Album>(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<Artist>(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<Genre>(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)),
|
||||
|
|
|
@ -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<BaseModel, RecyclerView.ViewHolder>(DiffCallback<BaseModel>()) {
|
||||
|
||||
override fun getItemViewType(position: Int): Int {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import org.oxycblt.auxio.recycler.viewholders.SongViewHolder
|
|||
class SongsAdapter(
|
||||
private val data: List<Song>,
|
||||
private val doOnClick: (data: Song) -> Unit,
|
||||
private val doOnLongClick: (data: Song, view: View) -> Unit
|
||||
private val doOnLongClick: (view: View, data: Song) -> Unit
|
||||
) : RecyclerView.Adapter<SongViewHolder>() {
|
||||
|
||||
override fun getItemCount(): Int = data.size
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue