Update ViewHolder long-click structure

Make a minor change to the viewholder long-click arguments.
This commit is contained in:
OxygenCobalt 2021-01-16 15:45:16 -07:00
parent 7de02af86f
commit fc33e01b89
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
15 changed files with 30 additions and 39 deletions

View file

@ -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)
}
)

View file

@ -54,7 +54,7 @@ class ArtistDetailFragment : DetailFragment() {
)
}
},
doOnLongClick = { data, view ->
doOnLongClick = { view, data ->
ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_ARTIST)
}
)

View file

@ -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)
}
)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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>()

View file

@ -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)
}

View file

@ -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)
}

View file

@ -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
}

View file

@ -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)),

View file

@ -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 {

View file

@ -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
}

View file

@ -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

View file

@ -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)
}
}