1.9.9.8
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
package com.yaros.RadioUrl.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.yaros.RadioUrl.R
|
||||
import com.yaros.RadioUrl.adapters.CategoryAdapter
|
||||
import com.yaros.RadioUrl.adapters.NewsAdapter
|
||||
import com.yaros.RadioUrl.adapters.RadioStationAdapter
|
||||
import com.yaros.RadioUrl.adapters.RecommendedStationAdapter
|
||||
import com.yaros.RadioUrl.core.supabase.SupabaseApiRepository
|
||||
import com.yaros.RadioUrl.core.APIInterface.data.Category
|
||||
import com.yaros.RadioUrl.core.APIInterface.data.NewsItem
|
||||
import com.yaros.RadioUrl.data.Station
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
|
||||
class HomeFragment : Fragment() {
|
||||
|
||||
private lateinit var recommendedStationsRecyclerView: RecyclerView
|
||||
private lateinit var categoriesRecyclerView: RecyclerView
|
||||
private lateinit var newsRecyclerView: RecyclerView
|
||||
private lateinit var recentlyPlayedRecyclerView: RecyclerView
|
||||
|
||||
private lateinit var recommendedStationAdapter: RecommendedStationAdapter
|
||||
private lateinit var categoryAdapter: CategoryAdapter
|
||||
private lateinit var newsAdapter: NewsAdapter
|
||||
private lateinit var stationAdapter: RadioStationAdapter
|
||||
|
||||
private val apiRepository by lazy { SupabaseApiRepository() }
|
||||
|
||||
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)
|
||||
|
||||
initViews(view)
|
||||
setupAdapters()
|
||||
loadDataFromAPI()
|
||||
}
|
||||
|
||||
private fun initViews(view: View) {
|
||||
recommendedStationsRecyclerView = view.findViewById(R.id.recommendedStationsRecyclerView)
|
||||
categoriesRecyclerView = view.findViewById(R.id.categoriesRecyclerView)
|
||||
newsRecyclerView = view.findViewById(R.id.newsRecyclerView)
|
||||
recentlyPlayedRecyclerView = view.findViewById(R.id.recentlyPlayedRecyclerView)
|
||||
}
|
||||
|
||||
private fun setupAdapters() {
|
||||
setupRecommendedStationsRecyclerView()
|
||||
setupCategoriesRecyclerView()
|
||||
setupNewsRecyclerView()
|
||||
setupRecentlyPlayedRecyclerView()
|
||||
}
|
||||
|
||||
private fun loadDataFromAPI() {
|
||||
lifecycleScope.launch {
|
||||
fetchHomeData()
|
||||
fetchCategories()
|
||||
fetchRecentStations()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupRecommendedStationsRecyclerView() {
|
||||
recommendedStationAdapter = RecommendedStationAdapter(
|
||||
imageLoader = { imageView: ImageView, url: String ->
|
||||
// TODO: Реализация загрузки изображения (Glide/Picasso)
|
||||
},
|
||||
onItemClick = { station: Station ->
|
||||
// TODO: Обработка клика
|
||||
}
|
||||
)
|
||||
recommendedStationsRecyclerView.apply {
|
||||
layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
|
||||
adapter = recommendedStationAdapter
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupCategoriesRecyclerView() {
|
||||
categoryAdapter = CategoryAdapter(
|
||||
imageLoader = { imageView: ImageView, url: String ->
|
||||
// TODO: Реализация загрузки изображения
|
||||
},
|
||||
onItemClick = { category: Category ->
|
||||
// TODO: Обработка клика
|
||||
}
|
||||
)
|
||||
categoriesRecyclerView.apply {
|
||||
layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
|
||||
adapter = categoryAdapter
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupNewsRecyclerView() {
|
||||
newsAdapter = NewsAdapter(
|
||||
imageLoader = { imageView: ImageView, url: String ->
|
||||
// TODO: Реализация загрузки изображения
|
||||
},
|
||||
onItemClick = { news: NewsItem ->
|
||||
// TODO: Обработка клика
|
||||
}
|
||||
)
|
||||
newsRecyclerView.apply {
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
adapter = newsAdapter
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupRecentlyPlayedRecyclerView() {
|
||||
stationAdapter = RadioStationAdapter(
|
||||
imageLoader = { imageView: ImageView, url: String ->
|
||||
// TODO: Реализация загрузки изображения
|
||||
},
|
||||
onItemClick = { station: Station ->
|
||||
// TODO: Обработка клика
|
||||
}
|
||||
)
|
||||
recentlyPlayedRecyclerView.apply {
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
adapter = stationAdapter
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchHomeData() {
|
||||
when (val result = apiRepository.getHomeData()) {
|
||||
is SupabaseApiRepository.NetworkResult.Success -> {
|
||||
result.data.news?.let(newsAdapter::submitList)
|
||||
result.data.favorites?.let(recommendedStationAdapter::submitList)
|
||||
}
|
||||
is SupabaseApiRepository.NetworkResult.Error -> {
|
||||
Timber.e("Home data error: ${result.message}")
|
||||
// Показать состояние ошибки
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchCategories() {
|
||||
when (val result = apiRepository.getCategories()) {
|
||||
is SupabaseApiRepository.NetworkResult.Success -> {
|
||||
categoryAdapter.submitList(result.data)
|
||||
}
|
||||
is SupabaseApiRepository.NetworkResult.Error -> {
|
||||
Timber.e("Categories error: ${result.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchRecentStations() {
|
||||
when (val result = apiRepository.getRecentRadio()) {
|
||||
is SupabaseApiRepository.NetworkResult.Success -> {
|
||||
stationAdapter.submitList(result.data)
|
||||
}
|
||||
is SupabaseApiRepository.NetworkResult.Error -> {
|
||||
Timber.e("Recent stations error: ${result.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user