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 77e588b..6aa8f54 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 @@ -38,7 +38,6 @@ class DetailFragment : Fragment() { val id = arguments?.getInt("idItem")!! - viewModel.competition.observe(viewLifecycleOwner, Observer { comp -> comp?.let { competition = comp @@ -73,12 +72,15 @@ class DetailFragment : Fragment() { val buttonExit = view.findViewById(R.id.buttonExit) val imageHeader = view.findViewById(R.id.imageDetail) val titleHeader = view.findViewById(R.id.title) - val nbMatches = view.findViewById(R.id.nbMatches) val dateEnd = view.findViewById(R.id.dateEnd) val dateStart = view.findViewById(R.id.dateStart) + val fragmentId = arguments?.getInt("fragmentId") + buttonExit.setOnClickListener { - findNavController().navigate(R.id.favoriteFragment) + fragmentId?.let { + findNavController().navigate(fragmentId) + } } button.setOnClickListener { 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 8052d67..3627133 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 @@ -15,10 +15,10 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import uca.iut.clermont.R import uca.iut.clermont.model.Competition -import uca.iut.clermont.view.adapter.FavoritesAdapter +import uca.iut.clermont.view.adapter.CompetitionsAdapter import uca.iut.clermont.view.viewModel.FavoriteViewModel -class FavoriteFragment : Fragment(), FavoritesAdapter.OnItemClickListener { +class FavoriteFragment : Fragment(), CompetitionsAdapter.OnItemClickListener { private val viewModel: FavoriteViewModel by viewModels() @@ -61,18 +61,21 @@ class FavoriteFragment : Fragment(), FavoritesAdapter.OnItemClickListener { private fun initRecyclerView( view: View, favorites: List, - listener: FavoritesAdapter.OnItemClickListener + listener: CompetitionsAdapter.OnItemClickListener ) { val recyclerViewFavorites = view.findViewById(R.id.listFavorites) with(recyclerViewFavorites) { layoutManager = LinearLayoutManager(view.context) - adapter = FavoritesAdapter(favorites.toList().toTypedArray(), listener) + adapter = CompetitionsAdapter(favorites.toList().toTypedArray(), listener) } } override fun onItemClick(position: Int) { val competitions = viewModel.competitions.value!! - val bundle = bundleOf("idItem" to competitions[position].id) + val bundle = bundleOf( + "idItem" to competitions[position].id, + "fragmentId" to R.id.favoriteFragment + ) 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 3a17e9b..af31b60 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 @@ -1,11 +1,15 @@ package uca.iut.clermont.view import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.EditText import android.widget.ImageButton import android.widget.TextView +import androidx.core.os.bundleOf import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer @@ -13,13 +17,17 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import uca.iut.clermont.R +import uca.iut.clermont.model.Competition import uca.iut.clermont.model.Match +import uca.iut.clermont.view.adapter.CompetitionsAdapter import uca.iut.clermont.view.adapter.MatchesAdapter import uca.iut.clermont.view.viewModel.HomeViewModel -class HomeFragment : Fragment() { +class HomeFragment : Fragment(), CompetitionsAdapter.OnItemClickListener { - val viewModel: HomeViewModel by viewModels() + private val viewModel: HomeViewModel by viewModels() + private lateinit var searchBar: EditText + private lateinit var searchAdapter: RecyclerView override fun onCreateView( inflater: LayoutInflater, @@ -31,19 +39,26 @@ class HomeFragment : Fragment() { val buttonFavorite = view.findViewById(R.id.buttonFavorite) val restartMatches = view.findViewById(R.id.restartMatches) + searchAdapter = view.findViewById(R.id.listSearch) + searchBar = view.findViewById(R.id.searchBar); + searchBar.addTextChangedListener(textWatcher); val text = view.findViewById(R.id.textEmpty) viewModel.matches.observe(viewLifecycleOwner, Observer { matches -> matches?.let { if (it.isNotEmpty()) { - initRecyclerView(view, it) + initRecyclerView(view, it, this) } else { text.setText(R.string.noMatches) } } }) + searchAdapter.layoutManager = LinearLayoutManager(view.context) + + displayMatches() + viewModel.loadCompetitions() buttonFavorite.setOnClickListener { findNavController().navigate(R.id.favoriteFragment) @@ -56,17 +71,70 @@ class HomeFragment : Fragment() { return view } - private fun initRecyclerView(view: View, matches: List) { + private val textWatcher = object : TextWatcher { + + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + searchNames(s.toString()) + } + + override fun afterTextChanged(s: Editable?) { + } + } + + private fun searchNames(query: String) { + val filteredCompetition = mutableListOf() + if (query.isNotEmpty()) { + for (competition in viewModel.competitions.value!!) { + if (competition.name.lowercase() + .contains(query.lowercase()) && filteredCompetition.size < 3 + ) { + filteredCompetition.add(competition) + } + } + } + searchList(filteredCompetition, this) + } + + private fun initRecyclerView( + view: View, + matches: List, + listener: CompetitionsAdapter.OnItemClickListener + ) { val recyclerViewMatches = view.findViewById(R.id.listRecentsMatches) with(recyclerViewMatches) { layoutManager = LinearLayoutManager(view.context) adapter = MatchesAdapter(matches.toList().toTypedArray()) } + + } + + private fun searchList( + competitons: List, + listener: CompetitionsAdapter.OnItemClickListener + ) { + searchAdapter.adapter = CompetitionsAdapter(competitons.toTypedArray(), listener) + } private fun displayMatches() { viewModel.loadMatches() } + override fun onPause() { + super.onPause() + searchBar.removeTextChangedListener(textWatcher) + } + + override fun onItemClick(position: Int) { + val competitions = viewModel.competitions.value!! + val bundle = bundleOf( + "idItem" to competitions[position].id, + "fragmentId" to R.id.homeFragment + ) + findNavController().navigate(R.id.action_homeFragment_to_detailFragment, bundle) + } } \ No newline at end of file diff --git a/src/app/src/main/java/uca/iut/clermont/view/adapter/FavoritesAdapter.kt b/src/app/src/main/java/uca/iut/clermont/view/adapter/CompetitionsAdapter.kt similarity index 94% rename from src/app/src/main/java/uca/iut/clermont/view/adapter/FavoritesAdapter.kt rename to src/app/src/main/java/uca/iut/clermont/view/adapter/CompetitionsAdapter.kt index 95c6edd..437b5b8 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/adapter/FavoritesAdapter.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/adapter/CompetitionsAdapter.kt @@ -10,11 +10,11 @@ import com.bumptech.glide.Glide import uca.iut.clermont.R import uca.iut.clermont.model.Competition -class FavoritesAdapter( +class CompetitionsAdapter( private val favoriteCompetition: Array, private val listener: OnItemClickListener, ) : - RecyclerView.Adapter() { + RecyclerView.Adapter() { inner class FavoriteHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener { diff --git a/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt b/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt index 454642f..93892d0 100644 --- a/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt +++ b/src/app/src/main/java/uca/iut/clermont/view/viewModel/HomeViewModel.kt @@ -5,6 +5,7 @@ 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.* @@ -12,6 +13,7 @@ class HomeViewModel : ViewModel() { val manager = ApiManager() val matches = MutableLiveData?>() + val competitions = MutableLiveData>() fun loadMatches() = viewModelScope.launch { val matchResults = manager.matchesMgr.getItems() @@ -21,4 +23,9 @@ class HomeViewModel : ViewModel() { .sortedByDescending { it.date } } + fun loadCompetitions() = viewModelScope.launch { + val result = manager.competitionsMgr.getItems() + competitions.value = result + } + } \ 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 ec5cd2f..2424253 100644 --- a/src/app/src/main/res/layout-land/fragment_favorite.xml +++ b/src/app/src/main/res/layout-land/fragment_favorite.xml @@ -50,7 +50,7 @@ + android:src="@drawable/icon_like" /> @@ -91,33 +91,56 @@ + + + + + + + + + + + + android:textSize="20dp" /> diff --git a/src/app/src/main/res/layout/fragment_favorite.xml b/src/app/src/main/res/layout/fragment_favorite.xml index dadce04..ceef60c 100644 --- a/src/app/src/main/res/layout/fragment_favorite.xml +++ b/src/app/src/main/res/layout/fragment_favorite.xml @@ -52,7 +52,7 @@ + + + app:layout_constraintTop_toBottomOf="@+id/listSearch" /> + app:layout_constraintTop_toBottomOf="@id/listSearch" /> +