109 lines
4.0 KiB
Kotlin
109 lines
4.0 KiB
Kotlin
package com.github.apognu.otter.fragments
|
|
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import com.github.apognu.otter.R
|
|
import com.github.apognu.otter.adapters.home.HomeMediaAdapter
|
|
import com.github.apognu.otter.repositories.Repository
|
|
import com.github.apognu.otter.repositories.home.RecentlyAddedRepository
|
|
import com.github.apognu.otter.repositories.home.RecentlyListenedRepository
|
|
import com.github.apognu.otter.repositories.home.TagsRepository
|
|
import com.github.apognu.otter.utils.untilNetwork
|
|
import com.google.android.flexbox.FlexboxLayoutManager
|
|
import kotlinx.android.synthetic.main.fragment_home.*
|
|
import kotlinx.coroutines.Dispatchers.IO
|
|
import kotlinx.coroutines.Dispatchers.Main
|
|
import kotlinx.coroutines.GlobalScope
|
|
import kotlinx.coroutines.launch
|
|
|
|
class HomeFragment : Fragment() {
|
|
private lateinit var tagsRepository: TagsRepository
|
|
private lateinit var recentlyAddedRepository: RecentlyAddedRepository
|
|
private lateinit var recentlyListenedRepository: RecentlyListenedRepository
|
|
|
|
private lateinit var tagsAdapter: HomeMediaAdapter
|
|
private lateinit var recentlyAddedAdapter: HomeMediaAdapter
|
|
private lateinit var recentlyListenedAdapter: HomeMediaAdapter
|
|
private lateinit var randomAdapter: HomeMediaAdapter
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
tagsRepository = TagsRepository(context)
|
|
recentlyAddedRepository = RecentlyAddedRepository(context)
|
|
recentlyListenedRepository = RecentlyListenedRepository(context)
|
|
|
|
tagsAdapter = HomeMediaAdapter(context, R.layout.row_tag)
|
|
recentlyAddedAdapter = HomeMediaAdapter(context)
|
|
recentlyListenedAdapter = HomeMediaAdapter(context)
|
|
randomAdapter = HomeMediaAdapter(context)
|
|
}
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
|
return inflater.inflate(R.layout.fragment_home, container, false)
|
|
}
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
tags.apply {
|
|
adapter = tagsAdapter
|
|
layoutManager = FlexboxLayoutManager(context).apply {
|
|
isNestedScrollingEnabled = false
|
|
}
|
|
}
|
|
|
|
random.apply {
|
|
adapter = randomAdapter
|
|
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
|
}
|
|
|
|
recently_listened.apply {
|
|
adapter = recentlyListenedAdapter
|
|
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
|
}
|
|
|
|
recently_added.apply {
|
|
adapter = recentlyAddedAdapter
|
|
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
|
|
}
|
|
|
|
refresh()
|
|
}
|
|
|
|
private fun refresh() {
|
|
tagsRepository.fetch(Repository.Origin.Network.origin).untilNetwork(IO) {data, _, _ ->
|
|
GlobalScope.launch(Main) {
|
|
tagsAdapter.data = data.map { HomeMediaAdapter.HomeMediaItem(it.name, null) }
|
|
tagsAdapter.notifyDataSetChanged()
|
|
|
|
tags_loader.visibility = View.GONE
|
|
tags.visibility = View.VISIBLE
|
|
}
|
|
}
|
|
|
|
recentlyListenedRepository.fetch(Repository.Origin.Network.origin).untilNetwork(IO) { data, _, _ ->
|
|
GlobalScope.launch(Main) {
|
|
recentlyListenedAdapter.data = data.map { HomeMediaAdapter.HomeMediaItem(it.track.title, it.track.album.cover.original) }
|
|
recentlyListenedAdapter.notifyDataSetChanged()
|
|
|
|
recently_listened_loader.visibility = View.GONE
|
|
recently_listened.visibility = View.VISIBLE
|
|
}
|
|
}
|
|
|
|
recentlyAddedRepository.fetch(Repository.Origin.Network.origin).untilNetwork(IO) { data, _, _ ->
|
|
GlobalScope.launch(Main) {
|
|
recentlyAddedAdapter.data = data.map { HomeMediaAdapter.HomeMediaItem(it.title, it.album.cover.original) }
|
|
recentlyAddedAdapter.notifyDataSetChanged()
|
|
|
|
recently_added_loader.visibility = View.GONE
|
|
recently_added.visibility = View.VISIBLE
|
|
}
|
|
}
|
|
}
|
|
} |