diff --git a/src/app/src/main/java/uca/iut/clermont/api/ApiManager.kt b/src/app/src/main/java/uca/iut/clermont/api/ApiManager.kt index 442ca43..48b9d2e 100644 --- a/src/app/src/main/java/uca/iut/clermont/api/ApiManager.kt +++ b/src/app/src/main/java/uca/iut/clermont/api/ApiManager.kt @@ -66,7 +66,7 @@ class ApiManager : DataManager() { override suspend fun getItemsByCompetition(id: Int): List = coroutineScope { - val matches = footballApi.getMatches() + val matches = footballApi.getMatchesByCompetition(id) return@coroutineScope matches.matches.map { it.toModel() } } diff --git a/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt b/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt index 3eaabb8..93ba88f 100644 --- a/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt +++ b/src/app/src/main/java/uca/iut/clermont/api/FootballApi.kt @@ -25,11 +25,11 @@ interface FootballApi { @GET("persons/{id}") suspend fun getPlayer(@Path("id") playerId: Int): PlayerResponse - @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") + @Headers("X-Auth-Token: 621ef06e148542f98b4993a5442421eb") @GET("competitions") suspend fun getCompetitions(): CompetitionResponse - @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") + @Headers("X-Auth-Token: 8f51b43de0444026bd3ec3484f082575") @GET("competitions/{id}") suspend fun getCompetition(@Path("id") id: Int): CompetitionResult @@ -37,12 +37,12 @@ interface FootballApi { @GET("matches") suspend fun getMatches(): MatchResponse - @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") + @Headers("X-Auth-Token: 621ef06e148542f98b4993a5442421eb") @GET("matches/{id}") suspend fun getMatch(@Path("id") id: Int): MatchResult - @Headers("X-Auth-Token: 7814ffe5b0314b5291a287d32a178e57") - @GET("matches/{id}/matches") + @Headers("X-Auth-Token: b002ff114afa41a590e2baef63d8c689") + @GET("competitions/{id}/matches") suspend fun getMatchesByCompetition(@Path("id") id: Int): MatchResponse } diff --git a/src/app/src/main/java/uca/iut/clermont/view/DetailFragment.kt b/src/app/src/main/java/uca/iut/clermont/view/DetailFragment.kt index 01d8c18..41ca7fc 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/DetailFragment.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/DetailFragment.kt @@ -8,10 +8,16 @@ import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.bumptech.glide.Glide import uca.iut.clermont.R +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import uca.iut.clermont.model.Competition +import uca.iut.clermont.view.adapter.MatchesAdapter +import uca.iut.clermont.view.viewModel.DetailViewModel import java.text.SimpleDateFormat import java.util.* @@ -19,6 +25,8 @@ class DetailFragment : Fragment() { private var isLiked = false private lateinit var competition: Competition + private val viewModel: DetailViewModel by viewModels() + override fun onCreateView( inflater: LayoutInflater, @@ -30,10 +38,33 @@ class DetailFragment : Fragment() { val id = arguments?.getInt("idItem")!! - //competition = (activity as MainActivity).manager.competitionsMgr.getItemById(id)!! - initializeView(view) - initRecyclerView(view) + viewModel.competition.observe(viewLifecycleOwner, Observer { comp -> + comp?.let { + competition = comp + initializeView(view) + initRecyclerView(view) + } + }) + + viewModel.loadCurrentCompetition(id) + + viewModel.nbCompetitionMatches.observe(viewLifecycleOwner, Observer { comp -> + comp?.let { + initNumberMatches(view) + } + }) + + viewModel.loadNumberMatches(id) + + viewModel.competitionMatches.observe(viewLifecycleOwner, Observer { competitions -> + competitions?.let { + initRecyclerView(view) + } + }) + + + viewModel.loadMatches(id) return view; } @@ -76,21 +107,24 @@ class DetailFragment : Fragment() { dateStart.text = formattedDate - /*nbMatches.text = - (activity as MainActivity).manager.matchesMgr.getNbItemsByCompetition(competition.name) - .toString()*/ } + private fun initNumberMatches(view: View) { + val nbMatches = view.findViewById(R.id.nbMatches) + + nbMatches.text = viewModel.nbCompetitionMatches.value.toString() + } private fun initRecyclerView(view: View) { - /*val recyclerViewMatches = view.findViewById(R.id.listRecentsMatches) + val recyclerViewMatches = view.findViewById(R.id.listRecentsMatches) with(recyclerViewMatches) { layoutManager = LinearLayoutManager(view.context) - adapter = MatchesAdapter( - (activity as MainActivity).manager.matchesMgr.getItemsByCompetition(competition.name) - .toList().toTypedArray() - ) - }*/ + adapter = viewModel.competitionMatches.value?.toList()?.let { + MatchesAdapter( + it.toTypedArray() + ) + } + } } } \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/view/FavoriteFragment.kt b/src/app/src/main/java/uca/iut/clermont/view/FavoriteFragment.kt index 5fc5156..8052d67 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/FavoriteFragment.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/FavoriteFragment.kt @@ -6,6 +6,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.ImageButton +import androidx.core.os.bundleOf import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer @@ -19,7 +20,7 @@ import uca.iut.clermont.view.viewModel.FavoriteViewModel class FavoriteFragment : Fragment(), FavoritesAdapter.OnItemClickListener { - private val viewModel: FavoriteViewModel by viewModels() + private val viewModel: FavoriteViewModel by viewModels() override fun onCreateView( inflater: LayoutInflater, @@ -70,8 +71,8 @@ class FavoriteFragment : Fragment(), FavoritesAdapter.OnItemClickListener { } override fun onItemClick(position: Int) { - /*val competitions = viewModel.competitions + val competitions = viewModel.competitions.value!! val bundle = bundleOf("idItem" to competitions[position].id) - findNavController().navigate(R.id.action_favoriteFragment_to_detailFragment, bundle)*/ + findNavController().navigate(R.id.action_favoriteFragment_to_detailFragment, bundle) } } \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt b/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt index da0288a..3a17e9b 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/HomeFragment.kt @@ -19,7 +19,7 @@ import uca.iut.clermont.view.viewModel.HomeViewModel class HomeFragment : Fragment() { - val viewModel: HomeViewModel by viewModels() + val viewModel: HomeViewModel by viewModels() override fun onCreateView( inflater: LayoutInflater, @@ -38,19 +38,19 @@ class HomeFragment : Fragment() { if (it.isNotEmpty()) { initRecyclerView(view, it) } else { - text.setText("No games started yet!") + text.setText(R.string.noMatches) } } }) - displayMatches(view) + displayMatches() buttonFavorite.setOnClickListener { findNavController().navigate(R.id.favoriteFragment) } restartMatches.setOnClickListener { - displayMatches(view) + displayMatches() } return view @@ -61,12 +61,10 @@ class HomeFragment : Fragment() { with(recyclerViewMatches) { layoutManager = LinearLayoutManager(view.context) adapter = MatchesAdapter(matches.toList().toTypedArray()) - } - } - private fun displayMatches(view: View) { + private fun displayMatches() { viewModel.loadMatches() } diff --git a/src/app/src/main/java/uca/iut/clermont/view/adapter/MatchesAdapter.kt b/src/app/src/main/java/uca/iut/clermont/view/adapter/MatchesAdapter.kt index acf8f04..42422cb 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/adapter/MatchesAdapter.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/adapter/MatchesAdapter.kt @@ -36,6 +36,16 @@ class MatchesAdapter(private val recentMatches: Array) : val formatter = SimpleDateFormat("dd/MM/yyyy' 'HH:mm", Locale.US) val formattedDate = formatter.format(date.time) + with(holder.iconStatus) { + setImageResource(R.drawable.mi_temp) + layoutParams.width = 0 + layoutParams.height = 0 + (layoutParams as ViewGroup.MarginLayoutParams).apply { + topMargin = 8 + bottomMargin = 7 + } + } + if (recentMatches[position].status == "IN_PLAY") { with(holder.iconStatus) { setImageResource(R.drawable.live) @@ -46,7 +56,6 @@ class MatchesAdapter(private val recentMatches: Array) : bottomMargin = 0 } } - } if (recentMatches[position].status == "PAUSED") { @@ -57,7 +66,8 @@ class MatchesAdapter(private val recentMatches: Array) : } } - holder.dateCompetition.text = recentMatches[position].competition.name.plus(" : ").plus(formattedDate) + holder.dateCompetition.text = + recentMatches[position].competition.name.plus(" : ").plus(formattedDate) Glide.with(holder.itemView.context) .load(recentMatches[position].homeTeam.crest) diff --git a/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt b/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt index 8865287..2e531fc 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/viewModel/DetailViewModel.kt @@ -1,4 +1,37 @@ package uca.iut.clermont.view.viewModel -class DetailViewModel { +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.launch +import uca.iut.clermont.api.ApiManager +import uca.iut.clermont.model.Competition +import uca.iut.clermont.model.Match +import java.util.* + +class DetailViewModel : ViewModel() { + + val manager = ApiManager() + val competition = MutableLiveData() + val competitionMatches = MutableLiveData>() + val nbCompetitionMatches = MutableLiveData() + + fun loadCurrentCompetition(id: Int) = viewModelScope.launch { + val result = manager.competitionsMgr.getItemById(id) + competition.value = result + } + + fun loadMatches(id: Int) = viewModelScope.launch { + + val matchResults = manager.matchesMgr.getItemsByCompetition(id) + competitionMatches.value = matchResults.filter { it.status != "TIMED" && it.status != "SCHEDULED" } + .apply { forEach { it.date.add(Calendar.HOUR_OF_DAY, 2) } } + .sortedBy { it.competition.name } + .sortedByDescending { it.date } + } + + fun loadNumberMatches(id: Int) = viewModelScope.launch { + val nb = manager.matchesMgr.getNbItemsByCompetition(id) + nbCompetitionMatches.value = nb + } } \ No newline at end of file diff --git a/src/app/src/main/res/layout-land/fragment_favorite.xml b/src/app/src/main/res/layout-land/fragment_favorite.xml index dbc24bd..ec5cd2f 100644 --- a/src/app/src/main/res/layout-land/fragment_favorite.xml +++ b/src/app/src/main/res/layout-land/fragment_favorite.xml @@ -20,7 +20,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" - android:src="@drawable/arrow" /> + android:src="@drawable/arrow" + android:contentDescription="@string/imageNotFound" />