Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/adapter/VariousItemsAdapter.kt

121 lines
4.2 KiB
Kotlin
Raw Normal View History

2016-06-29 15:47:52 +02:00
package org.mariotaku.twidere.adapter
import android.content.Context
2020-01-26 08:35:15 +01:00
import androidx.recyclerview.widget.RecyclerView
2016-06-29 15:47:52 +02:00
import android.view.LayoutInflater
import android.view.ViewGroup
2017-03-01 15:12:25 +01:00
import com.bumptech.glide.RequestManager
import org.mariotaku.twidere.R
2016-06-29 15:47:52 +02:00
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
import org.mariotaku.twidere.alias.ItemClickListener
import org.mariotaku.twidere.model.ParcelableHashtag
2016-06-29 15:47:52 +02:00
import org.mariotaku.twidere.model.ParcelableStatus
import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.ParcelableUserList
import org.mariotaku.twidere.util.StatusAdapterLinkClickHandler
import org.mariotaku.twidere.util.TwidereLinkify
import org.mariotaku.twidere.view.holder.HashtagViewHolder
2016-06-29 15:47:52 +02:00
import org.mariotaku.twidere.view.holder.StatusViewHolder
import org.mariotaku.twidere.view.holder.UserListViewHolder
import org.mariotaku.twidere.view.holder.UserViewHolder
/**
* Created by mariotaku on 16/3/20.
*/
2017-03-01 15:12:25 +01:00
class VariousItemsAdapter(
context: Context,
2017-03-02 07:59:19 +01:00
requestManager: RequestManager
) : LoadMoreSupportAdapter<RecyclerView.ViewHolder>(context, requestManager) {
2016-06-29 15:47:52 +02:00
2017-03-01 15:12:25 +01:00
private val inflater = LayoutInflater.from(context)
2016-06-29 15:47:52 +02:00
val dummyAdapter: DummyItemAdapter
var hashtagClickListener: ItemClickListener? = null
2016-06-29 15:47:52 +02:00
private var data: List<*>? = null
init {
val handler = StatusAdapterLinkClickHandler<Any>(context,
preferences)
2017-03-02 07:59:19 +01:00
dummyAdapter = DummyItemAdapter(context, TwidereLinkify(handler), this, requestManager)
2016-06-29 15:47:52 +02:00
handler.setAdapter(dummyAdapter)
dummyAdapter.updateOptions()
loadMoreIndicatorPosition = ILoadMoreSupportAdapter.NONE
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
VIEW_TYPE_STATUS -> {
return ListParcelableStatusesAdapter.createStatusViewHolder(dummyAdapter,
2017-03-01 15:12:25 +01:00
inflater, parent)
2016-06-29 15:47:52 +02:00
}
VIEW_TYPE_USER -> {
2017-03-01 15:12:25 +01:00
return ParcelableUsersAdapter.createUserViewHolder(dummyAdapter, inflater, parent)
2016-06-29 15:47:52 +02:00
}
VIEW_TYPE_USER_LIST -> {
2017-03-01 15:12:25 +01:00
return ParcelableUserListsAdapter.createUserListViewHolder(dummyAdapter, inflater,
2016-06-29 15:47:52 +02:00
parent)
}
VIEW_TYPE_HASHTAG -> {
val view = inflater.inflate(R.layout.list_item_two_line_small, parent, false)
return HashtagViewHolder(view, hashtagClickListener)
}
2016-06-29 15:47:52 +02:00
}
throw UnsupportedOperationException()
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val obj = getItem(position)
2016-08-19 16:25:27 +02:00
when (holder.itemViewType) {
2016-06-29 15:47:52 +02:00
VIEW_TYPE_STATUS -> {
(holder as StatusViewHolder).display(obj as ParcelableStatus,
2017-02-28 07:35:31 +01:00
displayInReplyTo = true)
2016-06-29 15:47:52 +02:00
}
VIEW_TYPE_USER -> {
(holder as UserViewHolder).display(obj as ParcelableUser)
2016-06-29 15:47:52 +02:00
}
VIEW_TYPE_USER_LIST -> {
(holder as UserListViewHolder).display(obj as ParcelableUserList)
}
VIEW_TYPE_HASHTAG -> {
(holder as HashtagViewHolder).display(obj as ParcelableHashtag)
2016-06-29 15:47:52 +02:00
}
}
}
override fun getItemViewType(position: Int): Int {
return getItemViewType(getItem(position))
}
2016-12-06 06:15:22 +01:00
private fun getItemViewType(obj: Any): Int {
2020-06-08 23:19:10 +02:00
return when (obj) {
is ParcelableStatus -> VIEW_TYPE_STATUS
is ParcelableUser -> VIEW_TYPE_USER
is ParcelableUserList -> VIEW_TYPE_USER_LIST
is ParcelableHashtag -> VIEW_TYPE_HASHTAG
2020-06-08 23:07:20 +02:00
else -> throw UnsupportedOperationException("Unsupported object $obj")
2016-06-29 15:47:52 +02:00
}
}
fun setData(data: List<*>?) {
this.data = data
notifyDataSetChanged()
}
override fun getItemCount(): Int {
if (data == null) return 0
return data!!.size
}
fun getItem(position: Int): Any {
return data!![position]!!
}
companion object {
2020-06-08 23:11:06 +02:00
const val VIEW_TYPE_STATUS = 1
const val VIEW_TYPE_USER = 2
const val VIEW_TYPE_USER_LIST = 3
const val VIEW_TYPE_HASHTAG = 4
2016-06-29 15:47:52 +02:00
}
}