From a5e9129f61c5aae1acc236bb1b8f9e3472c5b595 Mon Sep 17 00:00:00 2001 From: Julien THEME Date: Sat, 11 Feb 2023 23:23:03 +0100 Subject: [PATCH] :bug: coorection display medias --- Cineapp/.idea/deploymentTargetDropDown.xml | 2 +- Cineapp/app/build.gradle | 2 + .../java/com/example/cinapp/MainActivity.kt | 8 +- .../cinapp/{Request => api}/MediaApi.kt | 5 +- .../cinapp/{Request => api}/MediaMapper.kt | 3 +- .../cinapp/{Request => api}/MediaService.kt | 3 +- .../cinapp/{Request => api}/dto/Demmy.kt | 4 +- .../{Request => api}/dto/MediaResponse.kt | 2 +- .../cinapp/data/persistance/DAO/EpisodeDAO.kt | 2 +- .../cinapp/data/persistance/DAO/MovieDAO.kt | 4 +- .../cinapp/data/persistance/DAO/SeasonDAO.kt | 4 +- .../cinapp/data/persistance/DAO/SerieDAO.kt | 4 +- .../data/persistance/Entity/EpisodeEntity.kt | 2 +- .../data/persistance/Entity/MovieEntity.kt | 2 +- .../data/persistance/Entity/SeasonEntity.kt | 2 +- .../data/persistance/Entity/SerieEntity.kt | 2 +- .../cinapp/data/persistance/MediaDatabase.kt | 18 ++--- .../java/com/example/cinapp/model/Media.kt | 57 +++++++++++++- .../java/com/example/cinapp/model/Movie.kt | 6 +- .../java/com/example/cinapp/model/Serie.kt | 4 +- .../cinapp/ui/activity/MediaDetailActivity.kt | 30 ++++++++ .../cinapp/ui/adapter/InfosMediaAdapter.kt | 40 ++++++++++ .../example/cinapp/ui/adapter/MediaAdapter.kt | 43 +++++++++-- .../cinapp/ui/fragments/HomeFragment.kt | 69 ++++++++--------- .../cinapp/ui/fragments/MovieFragment.kt | 7 +- .../cinapp/ui/fragments/Movies2SeeFragment.kt | 2 +- .../cinapp/ui/fragments/SearchFragment.kt | 24 +++++- .../cinapp/ui/fragments/SeenMoviesFragment.kt | 2 +- .../cinapp/ui/fragments/SerieFragment.kt | 2 +- .../cinapp/ui/viewModel/HomeViewModel.kt | 74 +++++++++++++++++++ .../cinapp/ui/viewModel/MediaViewModel.kt | 6 +- .../cinapp/ui/viewModel/SearchViewModel.kt | 18 ++--- .../app/src/main/res/layout/fragment_home.xml | 2 +- .../src/main/res/layout/fragment_movie.xml | 2 +- .../main/res/layout/fragment_movies2_see.xml | 2 +- .../src/main/res/layout/fragment_search.xml | 4 +- .../main/res/layout/fragment_seen_movies.xml | 2 +- .../src/main/res/layout/fragment_serie.xml | 2 +- .../app/src/main/res/layout/item_movie.xml | 6 +- .../app/src/main/res/layout/movie_view.xml | 35 +++++---- 40 files changed, 381 insertions(+), 127 deletions(-) rename Cineapp/app/src/main/java/com/example/cinapp/{Request => api}/MediaApi.kt (97%) rename Cineapp/app/src/main/java/com/example/cinapp/{Request => api}/MediaMapper.kt (96%) rename Cineapp/app/src/main/java/com/example/cinapp/{Request => api}/MediaService.kt (93%) rename Cineapp/app/src/main/java/com/example/cinapp/{Request => api}/dto/Demmy.kt (64%) rename Cineapp/app/src/main/java/com/example/cinapp/{Request => api}/dto/MediaResponse.kt (95%) create mode 100644 Cineapp/app/src/main/java/com/example/cinapp/ui/activity/MediaDetailActivity.kt create mode 100644 Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/InfosMediaAdapter.kt create mode 100644 Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/HomeViewModel.kt diff --git a/Cineapp/.idea/deploymentTargetDropDown.xml b/Cineapp/.idea/deploymentTargetDropDown.xml index 54de0b4..4be9b37 100644 --- a/Cineapp/.idea/deploymentTargetDropDown.xml +++ b/Cineapp/.idea/deploymentTargetDropDown.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file diff --git a/Cineapp/app/build.gradle b/Cineapp/app/build.gradle index 41e8984..fd8786d 100644 --- a/Cineapp/app/build.gradle +++ b/Cineapp/app/build.gradle @@ -88,6 +88,8 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-service:2.4.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.4.0' + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") + diff --git a/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt b/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt index e40db50..13a7e9e 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt @@ -5,10 +5,10 @@ import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import com.example.cinapp.databinding.ActivityMainBinding -import com.example.cinapp.fragments.HomeFragment -import com.example.cinapp.fragments.MovieFragment -import com.example.cinapp.fragments.SearchFragment -import com.example.cinapp.fragments.SerieFragment +import com.example.cinapp.ui.fragments.HomeFragment +import com.example.cinapp.ui.fragments.MovieFragment +import com.example.cinapp.ui.fragments.SearchFragment +import com.example.cinapp.ui.fragments.SerieFragment class MainActivity : AppCompatActivity() { diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt b/Cineapp/app/src/main/java/com/example/cinapp/api/MediaApi.kt similarity index 97% rename from Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt rename to Cineapp/app/src/main/java/com/example/cinapp/api/MediaApi.kt index f5f900f..36c90e1 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/api/MediaApi.kt @@ -1,6 +1,7 @@ -package com.example.cinapp.Request +package com.example.cinapp.api import android.util.Log +import com.example.cinapp.api.dto.Demmy import com.example.cinapp.model.Media import retrofit2.Call import retrofit2.Callback @@ -24,7 +25,7 @@ class MediaApi { response.enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { - Log.d("Liste1", response.body().toString()) + Log.d("Liste1 search", response.body().toString()) val allMedia = response.body() val listMediaResponse = allMedia?.results listMediaResponse?.forEach { mediaResponse -> diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaMapper.kt b/Cineapp/app/src/main/java/com/example/cinapp/api/MediaMapper.kt similarity index 96% rename from Cineapp/app/src/main/java/com/example/cinapp/Request/MediaMapper.kt rename to Cineapp/app/src/main/java/com/example/cinapp/api/MediaMapper.kt index cd2afa9..ddb0b2a 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaMapper.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/api/MediaMapper.kt @@ -1,5 +1,6 @@ -package com.example.cinapp.Request +package com.example.cinapp.api +import com.example.cinapp.api.dto.MediaResponse import com.example.cinapp.model.Media import com.example.cinapp.model.Movie import com.example.cinapp.model.Serie diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt b/Cineapp/app/src/main/java/com/example/cinapp/api/MediaService.kt similarity index 93% rename from Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt rename to Cineapp/app/src/main/java/com/example/cinapp/api/MediaService.kt index bc52ed1..22f3e73 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/api/MediaService.kt @@ -1,6 +1,7 @@ -package com.example.cinapp.Request +package com.example.cinapp.api import com.example.cinapp.BuildConfig +import com.example.cinapp.api.dto.Demmy import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/dto/Demmy.kt b/Cineapp/app/src/main/java/com/example/cinapp/api/dto/Demmy.kt similarity index 64% rename from Cineapp/app/src/main/java/com/example/cinapp/Request/dto/Demmy.kt rename to Cineapp/app/src/main/java/com/example/cinapp/api/dto/Demmy.kt index 3f1d452..5f2c256 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Request/dto/Demmy.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/api/dto/Demmy.kt @@ -1,6 +1,4 @@ -package com.example.cinapp.Request - -import com.example.cinapp.model.Movie +package com.example.cinapp.api.dto class Demmy ( diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/dto/MediaResponse.kt b/Cineapp/app/src/main/java/com/example/cinapp/api/dto/MediaResponse.kt similarity index 95% rename from Cineapp/app/src/main/java/com/example/cinapp/Request/dto/MediaResponse.kt rename to Cineapp/app/src/main/java/com/example/cinapp/api/dto/MediaResponse.kt index 8bcb195..3e7c00b 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Request/dto/MediaResponse.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/api/dto/MediaResponse.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.Request +package com.example.cinapp.api.dto import com.example.cinapp.model.Season diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/EpisodeDAO.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/EpisodeDAO.kt index 2a7b99c..1e9db40 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/EpisodeDAO.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/EpisodeDAO.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.Room.DAO +package com.example.cinapp.data.persistance.DAO import androidx.room.Dao diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/MovieDAO.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/MovieDAO.kt index 20f547f..d5af060 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/MovieDAO.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/MovieDAO.kt @@ -1,7 +1,7 @@ -package com.example.cinapp.Room.DAO +package com.example.cinapp.data.persistance.DAO import androidx.room.* -import com.example.cinapp.Room.Entity.MovieEntity +import com.example.cinapp.data.persistance.Entity.MovieEntity @Dao interface MovieDAO { diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SeasonDAO.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SeasonDAO.kt index 8863542..a149cc4 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SeasonDAO.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SeasonDAO.kt @@ -1,9 +1,9 @@ -package com.example.cinapp.Room.DAO +package com.example.cinapp.data.persistance.DAO import androidx.room.Dao import androidx.room.Delete import androidx.room.Query -import com.example.cinapp.Room.Entity.SeasonEntity +import com.example.cinapp.data.persistance.Entity.SeasonEntity @Dao interface SeasonDAO { diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SerieDAO.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SerieDAO.kt index aad0887..4732bd7 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SerieDAO.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/DAO/SerieDAO.kt @@ -1,7 +1,7 @@ -package com.example.cinapp.Room.DAO +package com.example.cinapp.data.persistance.DAO import androidx.room.* -import com.example.cinapp.Room.Entity.SerieEntity +import com.example.cinapp.data.persistance.Entity.SerieEntity @Dao interface SerieDAO { diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/EpisodeEntity.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/EpisodeEntity.kt index eebf7e8..1683dd0 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/EpisodeEntity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/EpisodeEntity.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.Room.Entity +package com.example.cinapp.data.persistance.Entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/MovieEntity.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/MovieEntity.kt index 72b7b8e..9822ed1 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/MovieEntity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/MovieEntity.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.Room.Entity +package com.example.cinapp.data.persistance.Entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SeasonEntity.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SeasonEntity.kt index cfc9a47..8f3a943 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SeasonEntity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SeasonEntity.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.Room.Entity +package com.example.cinapp.data.persistance.Entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SerieEntity.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SerieEntity.kt index c06112c..44549c5 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SerieEntity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/Entity/SerieEntity.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.Room.Entity +package com.example.cinapp.data.persistance.Entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/MediaDatabase.kt b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/MediaDatabase.kt index 31341b6..6d48e3d 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/MediaDatabase.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/data/persistance/MediaDatabase.kt @@ -1,15 +1,15 @@ -package com.example.cinapp.Room +package com.example.cinapp.data.persistance import androidx.room.Database import androidx.room.RoomDatabase -import com.example.cinapp.Room.DAO.EpisodeDAO -import com.example.cinapp.Room.DAO.MovieDAO -import com.example.cinapp.Room.DAO.SeasonDAO -import com.example.cinapp.Room.DAO.SerieDAO -import com.example.cinapp.Room.Entity.EpisodeEntity -import com.example.cinapp.Room.Entity.MovieEntity -import com.example.cinapp.Room.Entity.SeasonEntity -import com.example.cinapp.Room.Entity.SerieEntity +import com.example.cinapp.data.persistance.DAO.EpisodeDAO +import com.example.cinapp.data.persistance.DAO.MovieDAO +import com.example.cinapp.data.persistance.DAO.SeasonDAO +import com.example.cinapp.data.persistance.DAO.SerieDAO +import com.example.cinapp.data.persistance.Entity.EpisodeEntity +import com.example.cinapp.data.persistance.Entity.MovieEntity +import com.example.cinapp.data.persistance.Entity.SeasonEntity +import com.example.cinapp.data.persistance.Entity.SerieEntity @Database(entities = [SeasonEntity::class, EpisodeEntity::class, MovieEntity::class, SerieEntity::class], version = 1) abstract class MediaDatabase: RoomDatabase() { diff --git a/Cineapp/app/src/main/java/com/example/cinapp/model/Media.kt b/Cineapp/app/src/main/java/com/example/cinapp/model/Media.kt index c08eb9c..1483810 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/model/Media.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/model/Media.kt @@ -1,5 +1,8 @@ package com.example.cinapp.model +import android.os.Parcel +import android.os.Parcelable + open class Media ( val adult: Boolean? = null, val id: Int, @@ -14,6 +17,56 @@ open class Media ( val posterPath: String? = null, val voteAverage: Double? = null, val voteCount: Int? = null, - val genreIds: List? = null - ){ + val genreIds: List? = null, + val isView: Boolean? = null + ) : Parcelable { + constructor(parcel: Parcel) : this( + parcel.readValue(Boolean::class.java.classLoader) as? Boolean, + parcel.readInt(), + parcel.readString(), + parcel.readString(), + parcel.readString(), + parcel.createStringArrayList(), + parcel.readString(), + parcel.readString(), + parcel.readString(), + parcel.readValue(Double::class.java.classLoader) as? Double, + parcel.readString(), + parcel.readValue(Double::class.java.classLoader) as? Double, + parcel.readValue(Int::class.java.classLoader) as? Int, + TODO("genreIds"), + parcel.readValue(Boolean::class.java.classLoader) as? Boolean + ) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeValue(adult) + parcel.writeInt(id) + parcel.writeString(title) + parcel.writeString(backdropPath) + parcel.writeString(releaseDate) + parcel.writeStringList(originCountry) + parcel.writeString(originalLanguage) + parcel.writeString(originalName) + parcel.writeString(overview) + parcel.writeValue(popularity) + parcel.writeString(posterPath) + parcel.writeValue(voteAverage) + parcel.writeValue(voteCount) + parcel.writeValue(isView) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): Media { + return Media(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/model/Movie.kt b/Cineapp/app/src/main/java/com/example/cinapp/model/Movie.kt index 071a49e..a6ff2bf 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/model/Movie.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/model/Movie.kt @@ -14,7 +14,8 @@ class Movie( posterPath: String? = null, voteAverage: Double? = null, voteCount: Int? = null, - genreIds: List? = null + genreIds: List? = null, + isView: Boolean? = null ): Media( adult, id, @@ -29,6 +30,7 @@ class Movie( posterPath, voteAverage, voteCount, - genreIds + genreIds, + isView ) { } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/model/Serie.kt b/Cineapp/app/src/main/java/com/example/cinapp/model/Serie.kt index d93b3b2..c08c500 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/model/Serie.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/model/Serie.kt @@ -15,6 +15,7 @@ class Serie( voteAverage: Double? = null, voteCount: Int? = null, genreIds: List? = null, + isView: Boolean? = null, var seasons: List? = null, var numberOfSeasons: Int? = null, var numberOfEpisodes: Int? = null @@ -32,6 +33,7 @@ class Serie( posterPath, voteAverage, voteCount, - genreIds + genreIds, + isView ) { } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/activity/MediaDetailActivity.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/activity/MediaDetailActivity.kt new file mode 100644 index 0000000..052d59c --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/activity/MediaDetailActivity.kt @@ -0,0 +1,30 @@ +package com.example.cinapp.ui.activity + +import android.os.Bundle +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.Observer +import androidx.lifecycle.ViewModelProvider +import com.example.cinapp.R +import com.example.cinapp.model.Media +import com.example.cinapp.ui.viewModel.MediaViewModel + +class MediaDetailActivity : AppCompatActivity() { + /*private lateinit var viewModel: MediaViewModel + + public lateinit var media: Media + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.movie_view) + + val media = intent.getIntExtra("MEDIA", 0) + viewModel = ViewModelProvider(this).get(MediaViewModel::class.java) + + var textView = findViewById(R.id.info_name) + + viewModel.getMediaLiveData(mediaId).observe(this, Observer { media -> + textView.text = media.title + }) + }*/ +} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/InfosMediaAdapter.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/InfosMediaAdapter.kt new file mode 100644 index 0000000..5312626 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/InfosMediaAdapter.kt @@ -0,0 +1,40 @@ +package com.example.cinapp.ui.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.cinapp.R +import com.example.cinapp.model.Media +import com.example.cinapp.ui.viewModel.MediaViewModel + +class InfosMediaAdapter(private val viewModel: MediaViewModel) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MediaViewHolder { + val itemView = LayoutInflater.from(parent.context).inflate(R.layout.movie_view, parent, false) + return MediaViewHolder(itemView) + } + + override fun onBindViewHolder(holder: MediaViewHolder, position: Int) { + /*val media = mediaList[position] + holder.bind(media)*/ + } + + override fun getItemCount(): Int { + /*return mediaList.size*/ + return 0 + } + + inner class MediaViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + /*private val titleTextView: TextView = itemView.findViewById(R.id.title_text_view) + private val descriptionTextView: TextView = itemView.findViewById(R.id.description_text_view) + private val mediaImageView: ImageView = itemView.findViewById(R.id.media_image_view) + + fun bind(media: Media) { + titleTextView.text = media.title + descriptionTextView.text = media.description + // Ajoutez une logique pour charger l'image à partir de l'URL pour le média + }*/ + } +} + diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/MediaAdapter.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/MediaAdapter.kt index 4957023..57b5614 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/MediaAdapter.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/adapter/MediaAdapter.kt @@ -1,34 +1,61 @@ -package com.example.cinapp.adapter +package com.example.cinapp.ui.adapter import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView +import androidx.lifecycle.LiveData import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.example.cinapp.R import com.example.cinapp.model.Media -class MediaAdapter(private val medias: List) : RecyclerView.Adapter() { +/*class MediaAdapter(private val viewModel: MainViewModel, private val lifecycleOwner: LifecycleOwner, private val nbLiveData: Int) : RecyclerView.Adapter() {*/ +class MediaAdapter(private val mediaList: LiveData>) : RecyclerView.Adapter() { + //private var mediaList = emptyList() + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_movie, parent, false) + Log.d("MediaAdapter", "onCreateViewHolder: $view") return ViewHolder(view) } + + /*fun subscribe(viewModel: MainViewModel, lifecycleOwner: LifecycleOwner, nbLiveData: Int) { + viewModel.getMediaLiveData(nbLiveData).observe(lifecycleOwner, Observer { + mediaList = it + notifyDataSetChanged() + Log.d("MediaAdapter", "subscribe: $it") + }) + }*/ + override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val movie = medias[position] + mediaList.observeForever { + var media = it[position] + Glide.with(holder.itemView.context) + .load("https://image.tmdb.org/t/p/w500" + media.posterPath) + .override(400, 600) + .into(holder.poster) + Log.d("MediaAdapter", "onBindViewHolder: $media") + holder.poster.setOnClickListener { + Log.d("MediaAdapter", "onBindViewHolder: $media") + } + } + /*Log.d("MediaAdapter", "onBindViewHolder: $media")*/ + /* subscribe(viewModel, lifecycleOwner, nbLiveData)*/ + /*val movie = mediaList[position] Glide.with(holder.itemView.context) .load("https://image.tmdb.org/t/p/w500" + movie.posterPath) .override(400, 600) - .into(holder.poster) + .into(holder.poster)*/ - holder.poster.setOnClickListener { - Log.d("MediaAdapter", "onBindViewHolder: $movie") - } + /* holder.poster.setOnClickListener { + Log.d("MediaAdapter", "onBindViewHolder: $media") + }*/ } override fun getItemCount(): Int { - return medias.size + return mediaList.value?.size ?: 0 } inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val poster: ImageView = itemView.findViewById(R.id.poster) diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/HomeFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/HomeFragment.kt index fa57364..8fcec66 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/HomeFragment.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/HomeFragment.kt @@ -1,16 +1,14 @@ -package com.example.cinapp.fragments +package com.example.cinapp.ui.fragments import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.StaggeredGridLayoutManager +import androidx.lifecycle.MutableLiveData import com.example.cinapp.R -import com.example.cinapp.adapter.MediaAdapter -import com.example.cinapp.Request.MediaApi import com.example.cinapp.model.Media +import com.example.cinapp.ui.viewModel.HomeViewModel // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -26,6 +24,7 @@ class HomeFragment : Fragment() { // TODO: Rename and change types of parameters private var param1: String? = null private var param2: String? = null + private var viewModel = HomeViewModel() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -35,44 +34,46 @@ class HomeFragment : Fragment() { } } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + val popularMoviesList = viewModel.popularMovies.value + val popularMoviesArrayList = popularMoviesList?.toCollection(ArrayList()) + + val popularSeriesList = viewModel.popularTvShows.value + val popularSeriesArrayList = popularSeriesList?.toCollection(ArrayList()) + + val topRatedMoviesList = viewModel.topRatedMovies.value + val topRatedMoviesArrayList = topRatedMoviesList?.toCollection(ArrayList()) + + val topRatedSeriesList = viewModel.topRatedTvShows.value + val topRatedSeriesArrayList = topRatedSeriesList?.toCollection(ArrayList()) + + outState.putParcelableArrayList("popularMovies", popularMoviesArrayList) + outState.putParcelableArrayList("popularSeries", popularSeriesArrayList) + outState.putParcelableArrayList("topRatedMovies", topRatedMoviesArrayList) + outState.putParcelableArrayList("topRatedSeries", topRatedSeriesArrayList) + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - //getPopularMovies - // Inflate the layout for this fragment val rootView = inflater.inflate(R.layout.fragment_home, container, false) - - MediaApi().getPopularMovies() { listMedia -> - val recyclerView = rootView.findViewById(R.id.rc_popular_movies) - addMediaToRecyclerView(listMedia, recyclerView) - } - - MediaApi().getPopularSeries() { listMedia -> - val recyclerView = rootView.findViewById(R.id.rc_popular_series) - addMediaToRecyclerView(listMedia, recyclerView) - } - - MediaApi().getTopRatedMovie() { listMedia -> - val recyclerView = rootView.findViewById(R.id.rc_top_rated_movies) - addMediaToRecyclerView(listMedia, recyclerView) - } - - MediaApi().getTopRatedSerie() { listMedia -> - val recyclerView = rootView.findViewById(R.id.rc_top_rated_series) - addMediaToRecyclerView(listMedia, recyclerView) + if (savedInstanceState != null) { + val list = savedInstanceState.getParcelableArrayList("popularMovies") + viewModel.popularMovies.postValue(list) + val list2 = savedInstanceState.getParcelableArrayList("popularSeries") + viewModel.popularTvShows.postValue(list2) + val list3 = savedInstanceState.getParcelableArrayList("topRatedMovies") + viewModel.topRatedMovies.postValue(list3) + val list4 = savedInstanceState.getParcelableArrayList("topRatedSeries") + viewModel.topRatedTvShows.postValue(list4) } - + viewModel = HomeViewModel() + viewModel.addMedia(rootView) return rootView } - fun addMediaToRecyclerView(listMedia: List, recyclerView: RecyclerView) { - val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL) - recyclerView.layoutManager = layoutManager - val adapter = MediaAdapter(listMedia) - recyclerView.adapter = adapter - } - companion object { /** * Use this factory method to create a new instance of diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/MovieFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/MovieFragment.kt index 3946bef..b5c8877 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/MovieFragment.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/MovieFragment.kt @@ -1,16 +1,11 @@ -package com.example.cinapp.fragments +package com.example.cinapp.ui.fragments import android.os.Bundle -import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.StaggeredGridLayoutManager import com.example.cinapp.R -import com.example.cinapp.Request.* // TODO: Rename parameter arguments, choose names that match diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/Movies2SeeFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/Movies2SeeFragment.kt index 3714d5d..8867f64 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/Movies2SeeFragment.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/Movies2SeeFragment.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.fragments +package com.example.cinapp.ui.fragments import android.os.Bundle import androidx.fragment.app.Fragment diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SearchFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SearchFragment.kt index 26ab0a9..75a4f9a 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SearchFragment.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SearchFragment.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.fragments +package com.example.cinapp.ui.fragments import android.os.Bundle import android.util.Log @@ -10,8 +10,10 @@ import androidx.appcompat.widget.SearchView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProviders import com.example.cinapp.R -import com.example.cinapp.viewModel.MediaViewModel -import com.example.cinapp.viewModel.SearchViewModel +import com.example.cinapp.model.Media +import com.example.cinapp.ui.viewModel.HomeViewModel +import com.example.cinapp.ui.viewModel.MediaViewModel +import com.example.cinapp.ui.viewModel.SearchViewModel // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER @@ -50,11 +52,27 @@ class SearchFragment : Fragment() { Log.d("InfoSearch", "onCreateView: ") val rootView = inflater.inflate(R.layout.fragment_search, container, false) val viewModelProvider = ViewModelProvider(this) + searchViewModel = viewModelProvider.get(SearchViewModel::class.java) searchViewModel.setSearchView(rootView) + + savedInstanceState?.let { + val searchList = it.getParcelableArrayList("popularMovies") + searchViewModel.medias.postValue(searchList) + Log.d("InfoSearch", "onCreateView: ${searchList?.size}") + } + return rootView } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + val searchmedias = searchViewModel.medias.value + val searchmediasArrayList = searchmedias?.toCollection(ArrayList()) + + outState.putParcelableArrayList("searchMedias", searchmediasArrayList) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) } diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SeenMoviesFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SeenMoviesFragment.kt index 1b1fc61..908c7f9 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SeenMoviesFragment.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SeenMoviesFragment.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.fragments +package com.example.cinapp.ui.fragments import android.os.Bundle import androidx.fragment.app.Fragment diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SerieFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SerieFragment.kt index ed3b944..2966f9f 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SerieFragment.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/fragments/SerieFragment.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.fragments +package com.example.cinapp.ui.fragments import android.os.Bundle import androidx.fragment.app.Fragment diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/HomeViewModel.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/HomeViewModel.kt new file mode 100644 index 0000000..c2527e0 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/HomeViewModel.kt @@ -0,0 +1,74 @@ +package com.example.cinapp.ui.viewModel + +import android.annotation.SuppressLint +import android.util.Log +import android.view.View +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.example.cinapp.MainActivity +import com.example.cinapp.R +import com.example.cinapp.api.MediaApi +import com.example.cinapp.model.Media +import com.example.cinapp.ui.adapter.MediaAdapter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +class HomeViewModel: ViewModel() { + + var popularMovies = MutableLiveData>() + + var popularTvShows = MutableLiveData>() + + var topRatedMovies = MutableLiveData>() + + var topRatedTvShows = MutableLiveData>() + + @SuppressLint("StaticFieldLeak") + val context : MainActivity = MainActivity() + + fun addMedia(rootView: View) { + viewModelScope.launch(Dispatchers.IO){ + MediaApi().getPopularMovies { listMedia -> + popularMovies.postValue(listMedia) + val recyclerView = rootView.findViewById(R.id.rc_popular_movies) + addMediaToRecyclerView(recyclerView, popularMovies) + } + } + + viewModelScope.launch(Dispatchers.IO){ + MediaApi().getPopularSeries { listMedia -> + popularTvShows.postValue(listMedia) + val recyclerView = rootView.findViewById(R.id.rc_popular_series) + addMediaToRecyclerView(recyclerView, popularTvShows) + } + } + + viewModelScope.launch(Dispatchers.IO){ + MediaApi().getTopRatedMovie { listMedia -> + topRatedMovies.postValue(listMedia) + val recyclerView = rootView.findViewById(R.id.rc_top_rated_movies) + addMediaToRecyclerView(recyclerView, topRatedMovies) + } + } + + viewModelScope.launch(Dispatchers.IO) { + MediaApi().getTopRatedSerie { listMedia -> + topRatedTvShows.postValue(listMedia) + val recyclerView = rootView.findViewById(R.id.rc_top_rated_series) + addMediaToRecyclerView(recyclerView, topRatedTvShows) + } + } + } + + fun addMediaToRecyclerView(recyclerView: RecyclerView, mediaList: MutableLiveData>) { + Log.d("HomeViewModel ------", "addMediaToRecyclerView: $recyclerView") + val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL) + recyclerView.layoutManager = layoutManager + recyclerView.adapter = MediaAdapter(mediaList) + } + + +} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/MediaViewModel.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/MediaViewModel.kt index 6df32fd..a0edb0f 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/MediaViewModel.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/MediaViewModel.kt @@ -1,4 +1,4 @@ -package com.example.cinapp.viewModel +package com.example.cinapp.ui.viewModel import android.content.Intent import androidx.lifecycle.ViewModel @@ -9,4 +9,8 @@ class MediaViewModel: ViewModel() { fun onMediaClicked(media: Media) { } + + fun getMediaLiveData(mediaId: Int): Any { + return Intent() + } } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/SearchViewModel.kt b/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/SearchViewModel.kt index 5c26139..020c89f 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/SearchViewModel.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/ui/viewModel/SearchViewModel.kt @@ -1,20 +1,23 @@ -package com.example.cinapp.viewModel +package com.example.cinapp.ui.viewModel import android.annotation.SuppressLint import android.util.Log import android.view.View import androidx.appcompat.widget.SearchView -import androidx.lifecycle.ViewModel +import androidx.lifecycle.* import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.cinapp.MainActivity import com.example.cinapp.R -import com.example.cinapp.adapter.MediaAdapter -import com.example.cinapp.Request.MediaApi +import com.example.cinapp.ui.adapter.MediaAdapter +import com.example.cinapp.api.MediaApi +import com.example.cinapp.model.Media @SuppressLint("StaticFieldLeak") class SearchViewModel : ViewModel() { + var medias = MutableLiveData>() + var searchView: SearchView? = null val context : MainActivity = MainActivity() @@ -32,9 +35,10 @@ class SearchViewModel : ViewModel() { if(listMedia.isEmpty()){ textView.visibility = View.VISIBLE }else{ + medias.postValue(listMedia) textView.visibility = View.GONE recyclerView.layoutManager = GridLayoutManager(context, 2) - recyclerView.adapter = MediaAdapter(listMedia) + recyclerView.adapter = MediaAdapter(medias) } } return false @@ -45,8 +49,4 @@ class SearchViewModel : ViewModel() { } }) } - - /*fun onMediaClicked(media: Media) { - Log.d("SearchViewModel", "onMediaClicked: $media") - }*/ } diff --git a/Cineapp/app/src/main/res/layout/fragment_home.xml b/Cineapp/app/src/main/res/layout/fragment_home.xml index 95febc6..082ab88 100644 --- a/Cineapp/app/src/main/res/layout/fragment_home.xml +++ b/Cineapp/app/src/main/res/layout/fragment_home.xml @@ -12,7 +12,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/first_grey" - tools:context=".fragments.HomeFragment"> + tools:context=".ui.fragments.HomeFragment"> diff --git a/Cineapp/app/src/main/res/layout/fragment_movie.xml b/Cineapp/app/src/main/res/layout/fragment_movie.xml index 06fd3b3..bb83840 100644 --- a/Cineapp/app/src/main/res/layout/fragment_movie.xml +++ b/Cineapp/app/src/main/res/layout/fragment_movie.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/first_grey" - tools:context=".fragments.MovieFragment"> + tools:context=".ui.fragments.MovieFragment"> + tools:context=".ui.fragments.Movies2SeeFragment"> + type="com.example.cinapp.ui.viewModel.SearchViewModel" /> + tools:context=".ui.fragments.SearchFragment"> + tools:context=".ui.fragments.SeenMoviesFragment"> + tools:context=".ui.fragments.SerieFragment"> - + android:id="@+id/cardview" + tools:ignore="OnClick"> + app:layout_constraintStart_toStartOf="@+id/info_image" + app:layout_constraintTop_toBottomOf="@+id/info_name" /> + app:layout_constraintTop_toBottomOf="@+id/info_image" />