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" />
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/info_image" />
+ app:layout_constraintTop_toBottomOf="@+id/info_title_overview" />
\ No newline at end of file