Nantes Université

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

add docs

parent 7a55d37b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!23Merge branch 'florian.G' into 'main'
Affichage de avec 122 ajouts et 15 suppressions
......@@ -11,7 +11,7 @@ import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.example.tdsaeandroid.favourites.FavouritesData
import com.example.tdsaeandroid.favourites.FavouritesDao
import com.example.tdsaeandroid.model.media.Media
import com.example.tdsaeandroid.model.media.MediaInList
import com.example.tdsaeandroid.model.movie.Movie
......@@ -22,7 +22,6 @@ import com.squareup.picasso.Picasso
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
class DisplayMediaActivity : AppCompatActivity() {
......@@ -40,7 +39,7 @@ class DisplayMediaActivity : AppCompatActivity() {
private val displayMediaViewModel: DisplayMediaViewModel by viewModels()
private val favoritesData = FavouritesData
private val favoritesData = FavouritesDao
private lateinit var mediaInList: MediaInList
private var inFavorites: Boolean = false
......
......@@ -9,7 +9,7 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import com.example.tdsaeandroid.adapter.MediaItemAdapter
import com.example.tdsaeandroid.contract.DisplayMediaActivityContract
import com.example.tdsaeandroid.favourites.FavouritesData
import com.example.tdsaeandroid.favourites.FavouritesDao
import com.example.tdsaeandroid.model.media.MediaInList
class FavouritesActivity: AppCompatActivity() {
......@@ -18,7 +18,7 @@ class FavouritesActivity: AppCompatActivity() {
private lateinit var btClose: ImageButton
private lateinit var adapter: ArrayAdapter<MediaInList>
private val favoritesData = FavouritesData
private val favoritesData = FavouritesDao
private val displayMediaContract = registerForActivityResult(DisplayMediaActivityContract()) { found: Boolean ->
if (!found) {
......
......@@ -6,7 +6,7 @@ import android.widget.Button
import android.widget.ImageButton
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import com.example.tdsaeandroid.favourites.FavouritesData
import com.example.tdsaeandroid.favourites.FavouritesDao
class MainActivity : AppCompatActivity() {
......@@ -37,7 +37,7 @@ class MainActivity : AppCompatActivity() {
startFavoritesActivity()
}
FavouritesData.init(this)
FavouritesDao.init(this)
}
private fun startMediasActivity(type: ActivityType) {
......
......@@ -10,6 +10,9 @@ import android.widget.TextView
import com.example.tdsaeandroid.R
import com.example.tdsaeandroid.model.media.MediaInList
/**
* Créer un adapteur pour les listView de medias
*/
class MediaItemAdapter(context: Context, items: List<MediaInList>) : ArrayAdapter<MediaInList>(
context, 0, items
) {
......
......@@ -6,6 +6,13 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.NumberPicker
/**
* Affiche une popup pour chosir une année
*
* @param context
* @param onCancel Callback quand le bouton "Annulé est clicker
* @param onOk Callback quand le bouton "Ok est clicker
*/
fun yearPickerDialog(
context: Context,
onCancel: () -> (Unit),
......
......@@ -12,6 +12,12 @@ import com.example.tdsaeandroid.model.movie.MovieInList
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
/**
* Contrat pour lancer l'activité DisplayMedia
*
* @property MediaInList Le media à afficher
* @property Boolean Si l'activté a trouvée les données du media
*/
class DisplayMediaActivityContract : ActivityResultContract<MediaInList, Boolean>() {
override fun createIntent(context: Context, input: MediaInList): Intent {
val intent = Intent(context, DisplayMediaActivity::class.java)
......
......@@ -30,8 +30,22 @@ import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.Json
import java.util.Locale
/**
* DAO pour appeller l'api themoviedb
*
* @constructor Dao.instance
*/
class Dao private constructor() {
// MOVIES
/**
* Recupérer les films les plus populaire
*
* @param page La page actuelle
*
* @return le body de la reponse de l'api
*/
fun getPopularMovies(page: Int): respond<MovieInList> {
val result: String = runBlocking(Dispatchers.IO) {
kTorClient.get(URL +"movie/popular"){
......@@ -42,6 +56,13 @@ class Dao private constructor() {
return Json.decodeFromString<respond<MovieInList>>(result)
}
/**
* Recupérer un films par son id
*
* @param id L'id du film
*
* @return Le film
*/
fun getMovieById(id: Int): Movie? {
val result: HttpResponse = runBlocking(Dispatchers.IO) {
kTorClient.get(URL +"movie/${id}"){
......@@ -60,12 +81,20 @@ class Dao private constructor() {
return null
}
fun findMovie(texte: String, page: Int = 1): respond<MovieInList> {
/**
* Recupérer les films avec leur nom qui correspond au texte
*
* @param text La partie du titre cherché
* @param page La page actuelle
*
* @return le body de la reponse de l'api
*/
fun findMovie(text: String, page: Int = 1): respond<MovieInList> {
val result: String = runBlocking(Dispatchers.IO) {
kTorClient.get(URL +"search/movie"){
parameter("language", language())
parameter("include_adult", "false")
parameter("query", texte)
parameter("query", text)
parameter("page", page)
}.body()
}
......@@ -124,6 +153,8 @@ class Dao private constructor() {
* Obtient tout les genres disponible pour les film et les séries
*
* @param isTv Recherche les genres de série sinon de film
*
* @return La liste des genres
*/
fun getGenres(isTv: Boolean = false): List<Genre>{
val result: String = runBlocking(Dispatchers.IO) {
......@@ -143,6 +174,13 @@ class Dao private constructor() {
// TV SHOWS
/**
* Recupérer les séries les plus populaire
*
* @param page La page actuelle
*
* @return le body de la reponse de l'api
*/
fun getPopularTv(page: Int): respond<TvInList> {
val result: String = runBlocking(Dispatchers.IO) {
kTorClient.get(URL +"tv/popular"){
......@@ -153,6 +191,13 @@ class Dao private constructor() {
return Json.decodeFromString<respond<TvInList>>(result)
}
/**
* Recupérer une série par son id
*
* @param id L'id de la série
*
* @return La série
*/
fun getTvById(id: Int): Tv? {
// crée une methode générique pour les films et séries ?
val result: HttpResponse = runBlocking(Dispatchers.IO) {
......@@ -172,19 +217,27 @@ class Dao private constructor() {
return null
}
fun findTV(texte: String, page: Int = 1): respond<TvInList> {
/**
* Recupérer les séries avec leur nom qui correspond au texte
*
* @param text La partie du titre cherché
* @param page La page actuelle
*
* @return le body de la reponse de l'api
*/
fun findTV(text: String, page: Int = 1): respond<TvInList> {
val result: String = runBlocking(Dispatchers.IO) {
kTorClient.get(URL +"search/tv"){
parameter("language", language())
parameter("include_adult", "false")
parameter("query", texte)
parameter("query", text)
parameter("page", page)
}.body()
}
return Json.decodeFromString<respond<TvInList>>(result)
}
fun language() : String {
private fun language() : String {
return when (Locale.getDefault().language) {
"fr" -> "fr-FR"
"en" -> "en-US"
......
......@@ -5,6 +5,9 @@ import kotlinx.serialization.Serializable
@Serializable
@Polymorphic
/**
* Filtre pour le DAO
*/
abstract class Filter {
abstract fun getKey(): String
......
......@@ -7,9 +7,18 @@ import com.example.tdsaeandroid.json
import com.example.tdsaeandroid.model.media.MediaInList
import kotlinx.serialization.encodeToString
object FavouritesData {
/**
* Dao pour manipuler les medias favoris de l'utilisateur
* @constructor init() pour initializer le dao
*/
object FavouritesDao {
private lateinit var sharedPreferences: SharedPreferences
/**
* Initialisation
*
* @param context
*/
fun init(context: Context) {
sharedPreferences = context.getSharedPreferences("Favourites", MODE_PRIVATE)
if (!sharedPreferences.contains("favourites")) {
......@@ -17,6 +26,11 @@ object FavouritesData {
}
}
/**
* Ajouter un favori
*
* @param media le media à ajouter
*/
fun addFavorite(media: MediaInList) {
val favorites = getFavorites()
if (!inFavorites(media)) {
......@@ -25,6 +39,11 @@ object FavouritesData {
write(favorites)
}
/**
* Enlever un favori
*
* @param media le media à retirer
*/
fun removeFavorite(media: MediaInList) {
val favorites = getFavorites()
if (inFavorites(media)) {
......@@ -33,16 +52,33 @@ object FavouritesData {
write(favorites)
}
/**
* Recupérer tout les favories
*
* @return La liste des favoris
*/
fun getFavorites(): MutableList<MediaInList> {
val savedName = sharedPreferences.getString("favourites", "") ?: ""
return json.decodeFromString(savedName)
val favouritesString = sharedPreferences.getString("favourites", "") ?: ""
return json.decodeFromString(favouritesString)
}
/**
* Permet de savoir si un media est dans les favoris
*
* @param media le media à tester
*
* @return Un booléen
*/
fun inFavorites(media: MediaInList): Boolean {
val favorites = getFavorites()
return media in favorites
}
/**
* Ecrit les favoris dans SharedPreferences
*
* @param favorites Liste des favoris
*/
private fun write(favorites: List<MediaInList>) {
val editor = sharedPreferences.edit()
editor.putString("favourites", json.encodeToString(favorites))
......
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