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( val detailAdapter = AlbumDetailAdapter(
detailModel, playbackModel, viewLifecycleOwner, detailModel, playbackModel, viewLifecycleOwner,
doOnClick = { playbackModel.playSong(it, PlaybackMode.IN_ALBUM) }, doOnClick = { playbackModel.playSong(it, PlaybackMode.IN_ALBUM) },
doOnLongClick = { data, view -> doOnLongClick = { view, data ->
ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_ALBUM) 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) ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_ARTIST)
} }
) )

View file

@ -46,7 +46,7 @@ class GenreDetailFragment : DetailFragment() {
doOnClick = { doOnClick = {
playbackModel.playSong(it, PlaybackMode.IN_GENRE) playbackModel.playSong(it, PlaybackMode.IN_GENRE)
}, },
doOnLongClick = { data, view -> doOnLongClick = { view, data ->
ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_GENRE) ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_IN_GENRE)
} }
) )

View file

@ -29,7 +29,7 @@ class AlbumDetailAdapter(
private val playbackModel: PlaybackViewModel, private val playbackModel: PlaybackViewModel,
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
private val doOnClick: (data: Song) -> Unit, 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()) { ) : ListAdapter<BaseModel, RecyclerView.ViewHolder>(DiffCallback()) {
private var currentSong: Song? = null private var currentSong: Song? = null

View file

@ -29,7 +29,7 @@ class ArtistDetailAdapter(
private val playbackModel: PlaybackViewModel, private val playbackModel: PlaybackViewModel,
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
private val doOnClick: (data: Album) -> Unit, 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()) { ) : ListAdapter<BaseModel, RecyclerView.ViewHolder>(DiffCallback()) {
private var currentAlbum: Album? = null private var currentAlbum: Album? = null
private var lastHolder: Highlightable? = null private var lastHolder: Highlightable? = null

View file

@ -29,7 +29,7 @@ class GenreDetailAdapter(
private val playbackModel: PlaybackViewModel, private val playbackModel: PlaybackViewModel,
private val lifecycleOwner: LifecycleOwner, private val lifecycleOwner: LifecycleOwner,
private val doOnClick: (data: Song) -> Unit, 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()) { ) : ListAdapter<BaseModel, RecyclerView.ViewHolder>(DiffCallback()) {
private var currentSong: Song? = null private var currentSong: Song? = null

View file

@ -17,7 +17,7 @@ import org.oxycblt.auxio.recycler.viewholders.GenreViewHolder
*/ */
class LibraryAdapter( class LibraryAdapter(
private val doOnClick: (data: BaseModel) -> Unit, 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>() { ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var data = listOf<BaseModel>() private var data = listOf<BaseModel>()

View file

@ -38,7 +38,7 @@ class LibraryFragment : Fragment() {
): View { ): View {
val binding = FragmentLibraryBinding.inflate(inflater) val binding = FragmentLibraryBinding.inflate(inflater)
val libraryAdapter = LibraryAdapter(::onItemSelection) { data, view -> val libraryAdapter = LibraryAdapter(::onItemSelection) { view, data ->
ActionMenu(requireCompatActivity(), view, data, ActionMenu.FLAG_NONE) 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.PlaybackMode
import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.playback.state.PlaybackStateManager
import org.oxycblt.auxio.recycler.SortMode import org.oxycblt.auxio.recycler.SortMode
import org.oxycblt.auxio.settings.SettingsManager
/** /**
* The ViewModel that provides a UI frontend for [PlaybackStateManager]. * 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 playbackManager = PlaybackStateManager.getInstance()
private val settingsManager = SettingsManager.getInstance()
init { init {
playbackManager.addCallback(this) playbackManager.addCallback(this)
@ -105,9 +107,9 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback {
/** /**
* Play a song. * Play a song.
* @param song The song to be played * @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) playbackManager.playSong(song, mode)
} }

View file

@ -16,7 +16,7 @@ import org.oxycblt.auxio.music.BaseModel
abstract class BaseViewHolder<T : BaseModel>( abstract class BaseViewHolder<T : BaseModel>(
private val baseBinding: ViewDataBinding, private val baseBinding: ViewDataBinding,
private val doOnClick: ((data: T) -> Unit)?, 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) { ) : RecyclerView.ViewHolder(baseBinding.root) {
init { init {
// Force the layout to *actually* be the screen width // Force the layout to *actually* be the screen width
@ -39,7 +39,7 @@ abstract class BaseViewHolder<T : BaseModel>(
doOnLongClick?.let { onLongClick -> doOnLongClick?.let { onLongClick ->
baseBinding.root.setOnLongClickListener { baseBinding.root.setOnLongClickListener {
onLongClick(data, baseBinding.root) onLongClick(baseBinding.root, data)
true true
} }

View file

@ -37,7 +37,7 @@ import org.oxycblt.auxio.music.Song
class SongViewHolder private constructor( class SongViewHolder private constructor(
private val binding: ItemSongBinding, private val binding: ItemSongBinding,
doOnClick: (data: Song) -> Unit, doOnClick: (data: Song) -> Unit,
doOnLongClick: (data: Song, view: View) -> Unit doOnLongClick: (view: View, data: Song) -> Unit
) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Song>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Song) { override fun onBind(data: Song) {
@ -56,7 +56,7 @@ class SongViewHolder private constructor(
fun from( fun from(
context: Context, context: Context,
doOnClick: (data: Song) -> Unit, doOnClick: (data: Song) -> Unit,
doOnLongClick: (data: Song, view: View) -> Unit doOnLongClick: (view: View, data: Song) -> Unit
): SongViewHolder { ): SongViewHolder {
return SongViewHolder( return SongViewHolder(
ItemSongBinding.inflate(LayoutInflater.from(context)), ItemSongBinding.inflate(LayoutInflater.from(context)),
@ -72,7 +72,7 @@ class SongViewHolder private constructor(
class AlbumViewHolder private constructor( class AlbumViewHolder private constructor(
private val binding: ItemAlbumBinding, private val binding: ItemAlbumBinding,
doOnClick: (data: Album) -> Unit, doOnClick: (data: Album) -> Unit,
doOnLongClick: (data: Album, view: View) -> Unit doOnLongClick: (view: View, data: Album) -> Unit
) : BaseViewHolder<Album>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Album>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Album) { override fun onBind(data: Album) {
@ -89,7 +89,7 @@ class AlbumViewHolder private constructor(
fun from( fun from(
context: Context, context: Context,
doOnClick: (data: Album) -> Unit, doOnClick: (data: Album) -> Unit,
doOnLongClick: (data: Album, view: View) -> Unit doOnLongClick: (view: View, data: Album) -> Unit
): AlbumViewHolder { ): AlbumViewHolder {
return AlbumViewHolder( return AlbumViewHolder(
ItemAlbumBinding.inflate(LayoutInflater.from(context)), ItemAlbumBinding.inflate(LayoutInflater.from(context)),
@ -105,7 +105,7 @@ class AlbumViewHolder private constructor(
class ArtistViewHolder private constructor( class ArtistViewHolder private constructor(
private val binding: ItemArtistBinding, private val binding: ItemArtistBinding,
doOnClick: (Artist) -> Unit, doOnClick: (Artist) -> Unit,
doOnLongClick: (data: Artist, view: View) -> Unit doOnLongClick: (view: View, data: Artist) -> Unit
) : BaseViewHolder<Artist>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Artist>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Artist) { override fun onBind(data: Artist) {
@ -122,7 +122,7 @@ class ArtistViewHolder private constructor(
fun from( fun from(
context: Context, context: Context,
doOnClick: (Artist) -> Unit, doOnClick: (Artist) -> Unit,
doOnLongClick: (data: Artist, view: View) -> Unit doOnLongClick: (view: View, data: Artist) -> Unit
): ArtistViewHolder { ): ArtistViewHolder {
return ArtistViewHolder( return ArtistViewHolder(
ItemArtistBinding.inflate(LayoutInflater.from(context)), ItemArtistBinding.inflate(LayoutInflater.from(context)),
@ -138,7 +138,7 @@ class ArtistViewHolder private constructor(
class GenreViewHolder private constructor( class GenreViewHolder private constructor(
private val binding: ItemGenreBinding, private val binding: ItemGenreBinding,
doOnClick: (Genre) -> Unit, doOnClick: (Genre) -> Unit,
doOnLongClick: (data: Genre, view: View) -> Unit doOnLongClick: (view: View, data: Genre) -> Unit
) : BaseViewHolder<Genre>(binding, doOnClick, doOnLongClick) { ) : BaseViewHolder<Genre>(binding, doOnClick, doOnLongClick) {
override fun onBind(data: Genre) { override fun onBind(data: Genre) {
@ -155,7 +155,7 @@ class GenreViewHolder private constructor(
fun from( fun from(
context: Context, context: Context,
doOnClick: (Genre) -> Unit, doOnClick: (Genre) -> Unit,
doOnLongClick: (data: Genre, view: View) -> Unit doOnLongClick: (view: View, data: Genre) -> Unit
): GenreViewHolder { ): GenreViewHolder {
return GenreViewHolder( return GenreViewHolder(
ItemGenreBinding.inflate(LayoutInflater.from(context)), ItemGenreBinding.inflate(LayoutInflater.from(context)),

View file

@ -23,7 +23,7 @@ import org.oxycblt.auxio.recycler.viewholders.SongViewHolder
*/ */
class SearchAdapter( class SearchAdapter(
private val doOnClick: (data: BaseModel) -> Unit, 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>()) { ) : ListAdapter<BaseModel, RecyclerView.ViewHolder>(DiffCallback<BaseModel>()) {
override fun getItemViewType(position: Int): Int { 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.Header
import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.ActionMenu import org.oxycblt.auxio.ui.ActionMenu
import org.oxycblt.auxio.ui.accent import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.fixAnimationInfoMemoryLeak 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. // styling to Material given all the second-and-third-order effects it has.
val accent = accent.first.toColor(requireContext()) 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) 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. * 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) { private fun onItemSelection(baseModel: BaseModel) {
if (baseModel is Song) { if (baseModel is Song) {
val settingsManager = SettingsManager.getInstance() playbackModel.playSong(baseModel)
playbackModel.playSong(baseModel, settingsManager.songPlaybackMode)
return return
} }

View file

@ -15,7 +15,7 @@ import org.oxycblt.auxio.recycler.viewholders.SongViewHolder
class SongsAdapter( class SongsAdapter(
private val data: List<Song>, private val data: List<Song>,
private val doOnClick: (data: Song) -> Unit, 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>() { ) : RecyclerView.Adapter<SongViewHolder>() {
override fun getItemCount(): Int = data.size 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.databinding.FragmentSongsBinding
import org.oxycblt.auxio.logD import org.oxycblt.auxio.logD
import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.MusicStore
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.ActionMenu import org.oxycblt.auxio.ui.ActionMenu
import org.oxycblt.auxio.ui.accent import org.oxycblt.auxio.ui.accent
import org.oxycblt.auxio.ui.getLandscapeSpans import org.oxycblt.auxio.ui.getLandscapeSpans
@ -35,7 +33,6 @@ import kotlin.math.ceil
*/ */
class SongsFragment : Fragment() { class SongsFragment : Fragment() {
private val playbackModel: PlaybackViewModel by activityViewModels() 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. // Lazy init the text size so that it doesn't have to be calculated every time.
private val indicatorTextSize: Float by lazy { private val indicatorTextSize: Float by lazy {
@ -53,7 +50,9 @@ class SongsFragment : Fragment() {
val binding = FragmentSongsBinding.inflate(inflater) val binding = FragmentSongsBinding.inflate(inflater)
val musicStore = MusicStore.getInstance() 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 --- // --- UI SETUP ---
@ -194,12 +193,4 @@ class SongsFragment : Fragment() {
setupWithFastScroller(binding.songFastScroll) 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)
}
} }