PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/adapter/song/AbsOffsetSongAdapter.kt

94 lines
3.2 KiB
Kotlin
Raw Normal View History

2020-10-06 08:46:04 +00:00
/*
* Copyright (c) 2020 Hemanth Savarla.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
2019-04-20 05:29:45 +00:00
package code.name.monkey.retromusic.adapter.song
2018-11-30 01:06:16 +00:00
2020-01-17 17:19:06 +00:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2018-11-30 01:06:16 +00:00
import androidx.annotation.LayoutRes
import androidx.fragment.app.FragmentActivity
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.interfaces.ICabHolder
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.model.Song
2020-01-17 17:19:06 +00:00
abstract class AbsOffsetSongAdapter(
activity: FragmentActivity,
2020-02-17 11:20:08 +00:00
dataSet: MutableList<Song>,
2020-01-17 17:19:06 +00:00
@LayoutRes itemLayoutRes: Int,
ICabHolder: ICabHolder?
) : SongAdapter(activity, dataSet, itemLayoutRes, ICabHolder) {
2020-01-17 17:19:06 +00:00
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongAdapter.ViewHolder {
if (viewType == OFFSET_ITEM) {
val view = LayoutInflater.from(activity)
.inflate(R.layout.item_list_quick_actions, parent, false)
2020-01-17 17:19:06 +00:00
return createViewHolder(view)
}
return super.onCreateViewHolder(parent, viewType)
}
override fun createViewHolder(view: View): SongAdapter.ViewHolder {
return ViewHolder(view)
}
override fun getItemId(position: Int): Long {
var positionFinal = position
positionFinal--
return if (positionFinal < 0) -2 else super.getItemId(positionFinal)
}
override fun getIdentifier(position: Int): Song? {
var positionFinal = position
positionFinal--
return if (positionFinal < 0) null else super.getIdentifier(positionFinal)
}
override fun getItemCount(): Int {
val superItemCount = super.getItemCount()
return if (superItemCount == 0) 0 else superItemCount + 1
}
override fun getItemViewType(position: Int): Int {
return if (position == 0) OFFSET_ITEM else SONG
}
open inner class ViewHolder(itemView: View) : SongAdapter.ViewHolder(itemView) {
override // could also return null, just to be safe return empty song
val song: Song
get() = if (itemViewType == OFFSET_ITEM) Song.emptySong else dataSet[layoutPosition - 1]
2020-01-17 17:19:06 +00:00
override fun onClick(v: View?) {
if (isInQuickSelectMode && itemViewType != OFFSET_ITEM) {
toggleChecked(layoutPosition)
2020-01-17 17:19:06 +00:00
} else {
MusicPlayerRemote.openQueue(dataSet, layoutPosition - 1, true)
2020-01-17 17:19:06 +00:00
}
}
override fun onLongClick(v: View?): Boolean {
if (itemViewType == OFFSET_ITEM) return false
toggleChecked(layoutPosition)
2020-01-17 17:19:06 +00:00
return true
}
}
companion object {
const val OFFSET_ITEM = 0
const val SONG = 1
}
2020-10-06 08:46:04 +00:00
}