Realized Masterdetail
continuous-integration/drone/push Build is passing Details

Masterdetail_Next_Step
Emre KARTAL 2 years ago
parent 284d3b564d
commit ea3cde21a0

@ -138,6 +138,7 @@ Team --> "-area" Area
Match --> "-HomeTeam" Team Match --> "-HomeTeam" Team
Match --> "-AwayTeam" Team Match --> "-AwayTeam" Team
Match --> "-competition" Competition
Competition --> "-area" Area Competition --> "-area" Area
Competition --> "-currentSeason" Season Competition --> "-currentSeason" Season

@ -40,6 +40,7 @@ dependencies {
//Glide //Glide
implementation 'com.github.bumptech.glide:glide:4.12.0' implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.caverock:androidsvg:1.4'
implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'

@ -258,7 +258,8 @@ class StubData : DataManager() {
Calendar.getInstance() Calendar.getInstance()
.apply { set(2022, random.nextInt(12), random.nextInt(28) + 1) }, .apply { set(2022, random.nextInt(12), random.nextInt(28) + 1) },
"FINISHED", "FINISHED",
Score(1, 1, "DRAW") Score(1, 1, "DRAW"),
competitionList[1]
) )
) )
matchList.add( matchList.add(
@ -269,7 +270,8 @@ class StubData : DataManager() {
Calendar.getInstance() Calendar.getInstance()
.apply { set(2022, random.nextInt(12), random.nextInt(28) + 1) }, .apply { set(2022, random.nextInt(12), random.nextInt(28) + 1) },
"FINISHED", "FINISHED",
Score(2, 0, "HOME_TEAM") Score(2, 0, "HOME_TEAM"),
competitionList[0]
) )
) )
matchList.add( matchList.add(
@ -280,7 +282,8 @@ class StubData : DataManager() {
Calendar.getInstance() Calendar.getInstance()
.apply { set(2022, random.nextInt(12), random.nextInt(28) + 1) }, .apply { set(2022, random.nextInt(12), random.nextInt(28) + 1) },
"FINISHED", "FINISHED",
Score(0, 4, "AWAY_TEAM") Score(0, 4, "AWAY_TEAM"),
competitionList[0]
) )
) )
matchList.add( matchList.add(
@ -291,7 +294,8 @@ class StubData : DataManager() {
Calendar.getInstance() Calendar.getInstance()
.apply { set(2023, random.nextInt(12), random.nextInt(28) + 1) }, .apply { set(2023, random.nextInt(12), random.nextInt(28) + 1) },
"FINISHED", "FINISHED",
Score(0, 1, "AWAY_TEAM") Score(0, 1, "AWAY_TEAM"),
competitionList[0]
) )
) )
matchList.add( matchList.add(
@ -302,7 +306,8 @@ class StubData : DataManager() {
Calendar.getInstance() Calendar.getInstance()
.apply { set(2023, random.nextInt(12), random.nextInt(28) + 1) }, .apply { set(2023, random.nextInt(12), random.nextInt(28) + 1) },
"FINISHED", "FINISHED",
Score(0, 0, "DRAW") Score(0, 0, "DRAW"),
competitionList[1]
) )
) )
matchList.add( matchList.add(
@ -313,7 +318,8 @@ class StubData : DataManager() {
Calendar.getInstance() Calendar.getInstance()
.apply { set(2023, random.nextInt(12), random.nextInt(28) + 1) }, .apply { set(2023, random.nextInt(12), random.nextInt(28) + 1) },
"FINISHED", "FINISHED",
Score(2, 0, "HOME_TEAM") Score(2, 0, "HOME_TEAM"),
competitionList[0]
) )
) )
} }
@ -434,6 +440,11 @@ class StubData : DataManager() {
} }
class StubMatchesManager(private val parent: StubData) : MatchesManager { class StubMatchesManager(private val parent: StubData) : MatchesManager {
override fun getNbItemsByCompetition(substring: String) =
parent.matchList.filter { it.competition.name.contains(substring) }.count()
override fun getItemsByCompetition(substring: String) =
parent.matchList.filter { it.competition.name.contains(substring) }
override fun getItems(): List<Match> = parent.matchList override fun getItems(): List<Match> = parent.matchList

@ -45,6 +45,13 @@ class ApiManager : DataManager() {
} }
class ApiMatchesManager : MatchesManager { class ApiMatchesManager : MatchesManager {
override fun getNbItemsByCompetition(substring: String): Int {
TODO("Not yet implemented")
}
override fun getItemsByCompetition(substring: String): List<Match> {
TODO("Not yet implemented")
}
override fun getItems(): List<Match> { override fun getItems(): List<Match> {
TODO("Not yet implemented") TODO("Not yet implemented")

@ -17,7 +17,12 @@ interface PeopleManager : GenericDataManager<Personne> {
fun getItemsByName(substring: String): List<Personne> fun getItemsByName(substring: String): List<Personne>
} }
interface MatchesManager : GenericDataManager<Match> interface MatchesManager : GenericDataManager<Match> {
fun getNbItemsByCompetition(substring: String): Int
fun getItemsByCompetition(substring: String): List<Match>
}
interface CompetitionsManager : GenericDataManager<Competition> { interface CompetitionsManager : GenericDataManager<Competition> {
fun getItemsByName(substring: String): List<Competition> fun getItemsByName(substring: String): List<Competition>

@ -8,5 +8,6 @@ class Match(
val awayTeam: Team, val awayTeam: Team,
val date: Calendar, val date: Calendar,
val status: String, val status: String,
val score: Score val score: Score,
val competition: Competition
) )

@ -10,9 +10,12 @@ import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import uca.iut.clermont.R import uca.iut.clermont.R
import uca.iut.clermont.model.Competition import uca.iut.clermont.model.Competition
import uca.iut.clermont.view.adapter.MatchesAdapter
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
class DetailFragment : Fragment() { class DetailFragment : Fragment() {
@ -33,6 +36,8 @@ class DetailFragment : Fragment() {
competition = (activity as MainActivity).manager.competitionsMgr.getItemById(id)!! competition = (activity as MainActivity).manager.competitionsMgr.getItemById(id)!!
initializeView(view) initializeView(view)
initRecyclerView(view)
return view; return view;
} }
@ -41,6 +46,7 @@ class DetailFragment : Fragment() {
val buttonExit = view.findViewById<ImageButton>(R.id.buttonExit) val buttonExit = view.findViewById<ImageButton>(R.id.buttonExit)
val imageHeader = view.findViewById<ImageView>(R.id.imageDetail) val imageHeader = view.findViewById<ImageView>(R.id.imageDetail)
val titleHeader = view.findViewById<TextView>(R.id.title) val titleHeader = view.findViewById<TextView>(R.id.title)
val nbMatches = view.findViewById<TextView>(R.id.nbMatches)
val dateEnd = view.findViewById<TextView>(R.id.dateEnd) val dateEnd = view.findViewById<TextView>(R.id.dateEnd)
val dateStart = view.findViewById<TextView>(R.id.dateStart) val dateStart = view.findViewById<TextView>(R.id.dateStart)
@ -72,6 +78,22 @@ class DetailFragment : Fragment() {
formattedDate = formatter.format(date.time) formattedDate = formatter.format(date.time)
dateStart.text = formattedDate dateStart.text = formattedDate
nbMatches.text =
(activity as MainActivity).manager.matchesMgr.getNbItemsByCompetition(competition.name)
.toString()
}
private fun initRecyclerView(view: View) {
val recyclerViewMatches = view.findViewById<RecyclerView>(R.id.listRecentsMatches)
with(recyclerViewMatches) {
layoutManager = LinearLayoutManager(view.context)
adapter = MatchesAdapter(
(activity as MainActivity).manager.matchesMgr.getItemsByCompetition(competition.name)
.toList().toTypedArray()
)
} }
} }
}

@ -43,8 +43,8 @@ class MainActivity : AppCompatActivity() {
supportActionBar?.hide() supportActionBar?.hide()
manager.initTeams() manager.initTeams()
manager.initMatches()
manager.initCompetitions() manager.initCompetitions()
manager.initMatches()
val navHostFragment = val navHostFragment =
supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment

@ -34,11 +34,10 @@ class FavoritesAdapter(
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = FavoriteHolder(
return FavoriteHolder(
LayoutInflater.from(parent.context).inflate(R.layout.cellule_favorite, parent, false) LayoutInflater.from(parent.context).inflate(R.layout.cellule_favorite, parent, false)
) )
}
override fun onBindViewHolder(holder: FavoriteHolder, position: Int) { override fun onBindViewHolder(holder: FavoriteHolder, position: Int) {
holder.textFavorites.text = favoriteCompetition[position].name holder.textFavorites.text = favoriteCompetition[position].name

@ -7,14 +7,14 @@ import com.bumptech.glide.Glide
import uca.iut.clermont.R import uca.iut.clermont.R
import uca.iut.clermont.model.Match import uca.iut.clermont.model.Match
import uca.iut.clermont.view.viewHolder.MatchHolder import uca.iut.clermont.view.viewHolder.MatchHolder
import java.text.SimpleDateFormat
class MatchesAdapter(private val recentMatches: Array<Match>) : class MatchesAdapter(private val recentMatches: Array<Match>) :
RecyclerView.Adapter<MatchHolder>() { RecyclerView.Adapter<MatchHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MatchHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = MatchHolder(
return MatchHolder(
LayoutInflater.from(parent.context).inflate(R.layout.cellule_match, parent, false) LayoutInflater.from(parent.context).inflate(R.layout.cellule_match, parent, false)
) )
}
override fun onBindViewHolder(holder: MatchHolder, position: Int) { override fun onBindViewHolder(holder: MatchHolder, position: Int) {
holder.titleFirstTeam.text = recentMatches[position].homeTeam.name holder.titleFirstTeam.text = recentMatches[position].homeTeam.name
@ -22,6 +22,13 @@ class MatchesAdapter(private val recentMatches: Array<Match>) :
holder.scoreHomeTeam.text = recentMatches[position].score.home.toString() holder.scoreHomeTeam.text = recentMatches[position].score.home.toString()
holder.scoreAwayTeam.text = recentMatches[position].score.away.toString() holder.scoreAwayTeam.text = recentMatches[position].score.away.toString()
var date = recentMatches[position].date
var formatter = SimpleDateFormat("dd-MM-yyyy")
var formattedDate = formatter.format(date.time)
holder.dateCompetition.text = recentMatches[position].competition.name + " : " + formattedDate
Glide.with(holder.itemView.context) Glide.with(holder.itemView.context)
.load(recentMatches[position].homeTeam.crest) .load(recentMatches[position].homeTeam.crest)
.error(R.drawable.imagenotfound) .error(R.drawable.imagenotfound)

@ -13,6 +13,7 @@ class MatchHolder(view: View) : RecyclerView.ViewHolder(view) {
val scoreAwayTeam: TextView val scoreAwayTeam: TextView
val imageHomeTeam: ImageView val imageHomeTeam: ImageView
val imageAwayTeam: ImageView val imageAwayTeam: ImageView
val dateCompetition: TextView
init { init {
titleFirstTeam = view.findViewById(R.id.TitleFirstTeam) titleFirstTeam = view.findViewById(R.id.TitleFirstTeam)
@ -21,6 +22,8 @@ class MatchHolder(view: View) : RecyclerView.ViewHolder(view) {
scoreAwayTeam = view.findViewById(R.id.ScoreAwayTeam) scoreAwayTeam = view.findViewById(R.id.ScoreAwayTeam)
imageHomeTeam = view.findViewById(R.id.ImageFirstTeam) imageHomeTeam = view.findViewById(R.id.ImageFirstTeam)
imageAwayTeam = view.findViewById(R.id.ImageSecondTeam) imageAwayTeam = view.findViewById(R.id.ImageSecondTeam)
dateCompetition = view.findViewById(R.id.DateCompetition)
} }

@ -5,17 +5,18 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="350dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:background="@drawable/background" android:background="@drawable/background"
android:gravity="center_vertical" android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:paddingHorizontal="20dp" android:paddingHorizontal="20dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<TextView <TextView
android:id="@+id/DateCompetition"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
@ -23,9 +24,8 @@
android:ellipsize="end" android:ellipsize="end"
android:fontFamily="@font/mulish_bold" android:fontFamily="@font/mulish_bold"
android:maxLines="1" android:maxLines="1"
android:text="Champions League - Groupe Stage: Matchay"
android:textColor="@color/title" android:textColor="@color/title"
android:textSize="14sp" android:textSize="15sp"
android:textStyle="bold" /> android:textStyle="bold" />
<LinearLayout <LinearLayout

@ -119,12 +119,13 @@
android:paddingHorizontal="10dp"> android:paddingHorizontal="10dp">
<TextView <TextView
android:layout_width="wrap_content" android:id="@+id/nbMatches"
android:layout_width="100dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="30dp" android:layout_marginTop="30dp"
android:fontFamily="@font/mulish_bold" android:fontFamily="@font/mulish_bold"
android:maxLines="1" android:maxLines="1"
android:text="14" android:textAlignment="center"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="26dp" /> android:textSize="26dp" />

Loading…
Cancel
Save