Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider ac1612b2 rédigé par FlorianGandon's avatar FlorianGandon
Parcourir les fichiers

add MediasFiltersViewModel

parent 914254c2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!21Merge branch 'florian.G' into 'main'
......@@ -13,9 +13,13 @@ import android.widget.Button
import android.widget.DatePicker
import android.widget.RatingBar
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope
import com.example.tdsaeandroid.component.DatePickerFragment
import com.example.tdsaeandroid.component.DatePickerListener
import com.example.tdsaeandroid.component.DateType
import kotlinx.coroutines.launch
import com.example.tdsaeandroid.component.yearPickerDialog
import com.example.tdsaeandroid.dao.Dao
......@@ -28,6 +32,8 @@ import com.example.tdsaeandroid.dao.VotesFilter
import com.example.tdsaeandroid.dao.YearFilter
import com.example.tdsaeandroid.dao.formatDate
import com.example.tdsaeandroid.model.media.Genre
import com.example.tdsaeandroid.viewmodel.MediasFiltersViewModel
import com.example.tdsaeandroid.viewmodel.ResultsViewModel
import com.google.android.material.chip.Chip
import com.google.android.material.chip.ChipGroup
import com.google.android.material.switchmaterial.SwitchMaterial
......@@ -47,13 +53,13 @@ class MediasFiltersActivity : AppCompatActivity(), DatePickerListener {
private lateinit var releaseAfter: Button
private lateinit var ratingMin: RatingBar
private lateinit var includeAdult: SwitchMaterial
private val dao = Dao.instance
private lateinit var genres: Array<Genre>
private var releaseDateBefore: Date? = null
private var releaseDateAfter: Date? = null
private lateinit var type: ActivityType
private val mediasFiltersViewModel: MediasFiltersViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
......@@ -95,6 +101,7 @@ class MediasFiltersActivity : AppCompatActivity(), DatePickerListener {
if (ratingMin.progress != 0){
fc.addFilter(VotesFilter(ratingMin.progress))
fc.addFilter(VotesFilter(ratingMin.progress))
}
if (releaseDateBefore != null){
......@@ -138,14 +145,19 @@ class MediasFiltersActivity : AppCompatActivity(), DatePickerListener {
val chip: Chip = LayoutInflater.from(this@MediasFiltersActivity).inflate(R.layout.chip_layout, null) as Chip
chip.text = it.name
chip.id = it.id
chip.isChecked = mediasFiltersViewModel.isChecked(it.id)
chipGroup.addView(chip)
}
}
chipGroup.setOnCheckedStateChangeListener { _, checkedIds ->
mediasFiltersViewModel.onChecked(checkedIds)
}
}
private suspend fun loadGenres(): Array<Genre> {
return withContext(Dispatchers.IO) {
dao.getGenres().toTypedArray()
mediasFiltersViewModel.load()
}
}
......@@ -170,58 +182,4 @@ class MediasFiltersActivity : AppCompatActivity(), DatePickerListener {
}
}
interface DatePickerListener {
fun onDateSetBefore(date: Date)
fun onDateSetAfter(date: Date)
fun onDateCancelBefore()
fun onDateCancelAfter()
}
class DatePickerFragment(val type: DateType) : DialogFragment(), DatePickerDialog.OnDateSetListener {
private lateinit var listener: DatePickerListener
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is DatePickerListener) {
listener = context
} else {
throw RuntimeException("$context must implement DatePickerListener")
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// Use the current date as the default date in the picker.
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
// Create a new instance of DatePickerDialog and return it.
return DatePickerDialog(requireContext(), this, year, month, day)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
val date = java.util.Calendar.Builder().setDate(year, month, day).build().time
when(type){
DateType.BEFORE -> listener.onDateSetBefore(date)
DateType.AFTER -> listener.onDateSetAfter(date)
}
}
override fun onCancel(dialog: DialogInterface) {
when(type){
DateType.BEFORE -> listener.onDateCancelBefore()
DateType.AFTER -> listener.onDateCancelAfter()
}
super.onCancel(dialog)
}
}
enum class DateType{
BEFORE,
AFTER
}
package com.example.tdsaeandroid.component
import android.app.DatePickerDialog
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
import android.icu.util.Calendar
import android.os.Bundle
import android.widget.DatePicker
import androidx.fragment.app.DialogFragment
import java.util.Date
interface DatePickerListener {
fun onDateSetBefore(date: Date)
fun onDateSetAfter(date: Date)
fun onDateCancelBefore()
fun onDateCancelAfter()
}
class DatePickerFragment(val type: DateType) : DialogFragment(), DatePickerDialog.OnDateSetListener {
private lateinit var listener: DatePickerListener
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is DatePickerListener) {
listener = context
} else {
throw RuntimeException("$context must implement DatePickerListener")
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// Use the current date as the default date in the picker.
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
// Create a new instance of DatePickerDialog and return it.
return DatePickerDialog(requireContext(), this, year, month, day)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
val date = java.util.Calendar.Builder().setDate(year, month, day).build().time
when(type){
DateType.BEFORE -> listener.onDateSetBefore(date)
DateType.AFTER -> listener.onDateSetAfter(date)
}
}
override fun onCancel(dialog: DialogInterface) {
when(type){
DateType.BEFORE -> listener.onDateCancelBefore()
DateType.AFTER -> listener.onDateCancelAfter()
}
super.onCancel(dialog)
}
}
enum class DateType{
BEFORE,
AFTER
}
package com.example.tdsaeandroid.viewmodel
import androidx.lifecycle.ViewModel
import com.example.tdsaeandroid.dao.Dao
import com.example.tdsaeandroid.model.media.Genre
class MediasFiltersViewModel : ViewModel() {
private var allGenres: Array<Genre>? = null
private var genresSelected: List<Int>? = null
private val dao = Dao.instance
fun load(): Array<Genre> {
if (allGenres == null) {
allGenres = dao.getGenres().toTypedArray()
}
return allGenres!!
}
fun onChecked(newGenresSelected: List<Int>) {
genresSelected = newGenresSelected
}
fun isChecked(id: Int): Boolean {
return genresSelected?.contains(id) ?: false
}
}
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter