refactor eventdetails and related events list

This commit is contained in:
Felix 2020-04-16 22:15:24 +02:00
parent 45124c8f23
commit 08550608f7
4 changed files with 23 additions and 41 deletions

View file

@ -4,29 +4,23 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event
import de.nicidienase.chaosflix.touch.databinding.ItemEventCardviewBinding
open class EventRecyclerViewAdapter(val listener: (Event) -> Unit) :
ItemRecyclerViewAdapter<Event, EventRecyclerViewAdapter.ViewHolder>() {
open class EventRecyclerViewAdapter(val listener: (Event) -> Unit): ListAdapter<Event, EventRecyclerViewAdapter.ViewHolder>(EventDiffUtil) {
object EventDiffUtil: DiffUtil.ItemCallback<Event>() {
override fun areItemsTheSame(oldItem: Event, newItem: Event): Boolean = oldItem.guid == newItem.guid
override fun areContentsTheSame(oldItem: Event, newItem: Event): Boolean = oldItem == newItem
}
var showConferenceName: Boolean = false
override fun getComparator(): Comparator<in Event>? {
return Comparator { o1, o2 -> o1.title.compareTo(o2.title) }
}
override fun getItemId(position: Int): Long {
return items[position].id
}
override fun getFilteredProperties(item: Event): List<String> {
return listOfNotNull(item.title,
item.subtitle,
item.description,
item.getSpeakerString()
)
return getItem(position).id
}
override fun onCreateViewHolder(p0: ViewGroup, pItemConferenceCardviewBinding1: Int): ViewHolder {
@ -35,7 +29,7 @@ open class EventRecyclerViewAdapter(val listener: (Event) -> Unit) :
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val event = items[position]
val event = getItem(position)
holder.binding.event = event
holder.binding.root.setOnClickListener {
listener(event)
@ -49,5 +43,5 @@ open class EventRecyclerViewAdapter(val listener: (Event) -> Unit) :
ViewCompat.setTransitionName(holder.binding.imageView, "thumb_${event.guid}")
}
inner class ViewHolder(val binding: ItemEventCardviewBinding) : androidx.recyclerview.widget.RecyclerView.ViewHolder(binding.root)
inner class ViewHolder(val binding: ItemEventCardviewBinding) : RecyclerView.ViewHolder(binding.root)
}

View file

@ -7,7 +7,6 @@ import android.view.Menu
import android.view.MenuInflater
import android.view.View
import android.view.ViewGroup
import android.widget.SearchView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
@ -23,7 +22,7 @@ import de.nicidienase.chaosflix.touch.R
import de.nicidienase.chaosflix.touch.browse.adapters.EventRecyclerViewAdapter
import de.nicidienase.chaosflix.touch.databinding.FragmentEventsListBinding
abstract class EventsListFragment : Fragment(), SearchView.OnQueryTextListener {
abstract class EventsListFragment : Fragment() {
protected val viewModel: BrowseViewModel by viewModels { ViewModelFactory.getInstance(requireContext()) }
@ -79,7 +78,7 @@ abstract class EventsListFragment : Fragment(), SearchView.OnQueryTextListener {
}
protected fun setEvents(events: List<Event>) {
eventAdapter?.items = events
eventAdapter?.submitList(events)
val layoutState = arguments?.getParcelable<Parcelable>(LAYOUTMANAGER_STATE)
if (layoutState != null) {
layoutManager?.onRestoreInstanceState(layoutState)
@ -104,15 +103,6 @@ abstract class EventsListFragment : Fragment(), SearchView.OnQueryTextListener {
// }
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
eventAdapter?.filter?.filter(newText)
return true
}
companion object {
private const val ARG_TYPE = "type"
private const val ARG_CONFERENCE = "conference"

View file

@ -109,6 +109,7 @@ class EventDetailsFragment : Fragment() {
}
eventLivedata.observe(viewLifecycleOwner, Observer { event ->
if (event != null) {
Log.d(TAG, "Update Event")
binding.event = event
binding.lifecycleOwner = viewLifecycleOwner
Log.d(TAG, "Loading Event ${event.title}, ${event.guid}")
@ -124,11 +125,18 @@ class EventDetailsFragment : Fragment() {
})
viewModel.getRelatedEvents().observe(viewLifecycleOwner, Observer {
if (it != null) {
relatedEventsAdapter.items = it
Log.d(TAG, "update related events")
relatedEventsAdapter.submitList(it)
}
if (it?.isNotEmpty() == true) {
binding.relatedItemsText.visibility = View.VISIBLE
} else {
binding.relatedItemsText.visibility = View.GONE
}
})
viewModel.getBookmarkForEvent()
.observe(viewLifecycleOwner, Observer { watchlistItem: WatchlistItem? ->
Log.d(TAG, "Update bookmark")
val shouldInvalidate = this@EventDetailsFragment.watchlistItem == null || watchlistItem == null
this@EventDetailsFragment.watchlistItem = watchlistItem
if(shouldInvalidate){
@ -225,17 +233,6 @@ class EventDetailsFragment : Fragment() {
}
}
})
viewModel.getRelatedEvents().observe(viewLifecycleOwner, Observer {
if (it != null) {
relatedEventsAdapter.items = it
}
if (it?.isNotEmpty() == true) {
binding.relatedItemsText.visibility = View.VISIBLE
} else {
binding.relatedItemsText.visibility = View.GONE
}
})
}
private fun updateBookmark() {

View file

@ -19,10 +19,11 @@
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TabsStyle"
style="@style/ColoredTabLayout"
app:layout_anchor="@id/toolbar"
app:layout_anchorGravity="bottom"
app:tabMode="auto"/>
<!-- style="@style/TabsStyle"-->
</com.google.android.material.appbar.AppBarLayout>