🐛 coorection display medias

master
Julien THEME 2 years ago
parent d6f162ce92
commit a5e9129f61

@ -12,6 +12,6 @@
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-02-05T14:31:31.881994Z" />
<timeTargetWasSelectedWithDropDown value="2023-02-11T19:19:16.483021Z" />
</component>
</project>

@ -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")

@ -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() {

@ -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<Demmy> {
override fun onResponse(call: Call<Demmy>, response: Response<Demmy>) {
Log.d("Liste1", response.body().toString())
Log.d("Liste1 search", response.body().toString())
val allMedia = response.body()
val listMediaResponse = allMedia?.results
listMediaResponse?.forEach { mediaResponse ->

@ -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

@ -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

@ -1,6 +1,4 @@
package com.example.cinapp.Request
import com.example.cinapp.model.Movie
package com.example.cinapp.api.dto
class Demmy (

@ -1,4 +1,4 @@
package com.example.cinapp.Request
package com.example.cinapp.api.dto
import com.example.cinapp.model.Season

@ -1,4 +1,4 @@
package com.example.cinapp.Room.DAO
package com.example.cinapp.data.persistance.DAO
import androidx.room.Dao

@ -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 {

@ -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 {

@ -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 {

@ -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

@ -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

@ -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

@ -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

@ -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() {

@ -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<Int>? = null
){
val genreIds: List<Int>? = 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<Media> {
override fun createFromParcel(parcel: Parcel): Media {
return Media(parcel)
}
override fun newArray(size: Int): Array<Media?> {
return arrayOfNulls(size)
}
}
}

@ -14,7 +14,8 @@ class Movie(
posterPath: String? = null,
voteAverage: Double? = null,
voteCount: Int? = null,
genreIds: List<Int>? = null
genreIds: List<Int>? = null,
isView: Boolean? = null
): Media(
adult,
id,
@ -29,6 +30,7 @@ class Movie(
posterPath,
voteAverage,
voteCount,
genreIds
genreIds,
isView
) {
}

@ -15,6 +15,7 @@ class Serie(
voteAverage: Double? = null,
voteCount: Int? = null,
genreIds: List<Int>? = null,
isView: Boolean? = null,
var seasons: List<Season>? = null,
var numberOfSeasons: Int? = null,
var numberOfEpisodes: Int? = null
@ -32,6 +33,7 @@ class Serie(
posterPath,
voteAverage,
voteCount,
genreIds
genreIds,
isView
) {
}

@ -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<TextView>(R.id.info_name)
viewModel.getMediaLiveData(mediaId).observe(this, Observer { media ->
textView.text = media.title
})
}*/
}

@ -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<InfosMediaAdapter.MediaViewHolder>() {
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
}*/
}
}

@ -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<Media>) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
/*class MediaAdapter(private val viewModel: MainViewModel, private val lifecycleOwner: LifecycleOwner, private val nbLiveData: Int) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {*/
class MediaAdapter(private val mediaList: LiveData<List<Media>>) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
//private var mediaList = emptyList<Media>()
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" + movie.posterPath)
.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: $movie")
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)*/
/* 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)

@ -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,42 +34,44 @@ class HomeFragment : Fragment() {
}
}
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)
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
val popularMoviesList = viewModel.popularMovies.value
val popularMoviesArrayList = popularMoviesList?.toCollection(ArrayList())
MediaApi().getPopularMovies() { listMedia ->
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_popular_movies)
addMediaToRecyclerView(listMedia, recyclerView)
}
val popularSeriesList = viewModel.popularTvShows.value
val popularSeriesArrayList = popularSeriesList?.toCollection(ArrayList())
MediaApi().getPopularSeries() { listMedia ->
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_popular_series)
addMediaToRecyclerView(listMedia, recyclerView)
}
val topRatedMoviesList = viewModel.topRatedMovies.value
val topRatedMoviesArrayList = topRatedMoviesList?.toCollection(ArrayList())
MediaApi().getTopRatedMovie() { listMedia ->
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_top_rated_movies)
addMediaToRecyclerView(listMedia, recyclerView)
}
val topRatedSeriesList = viewModel.topRatedTvShows.value
val topRatedSeriesArrayList = topRatedSeriesList?.toCollection(ArrayList())
MediaApi().getTopRatedSerie() { listMedia ->
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_top_rated_series)
addMediaToRecyclerView(listMedia, recyclerView)
outState.putParcelableArrayList("popularMovies", popularMoviesArrayList)
outState.putParcelableArrayList("popularSeries", popularSeriesArrayList)
outState.putParcelableArrayList("topRatedMovies", topRatedMoviesArrayList)
outState.putParcelableArrayList("topRatedSeries", topRatedSeriesArrayList)
}
return rootView
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val rootView = inflater.inflate(R.layout.fragment_home, container, false)
if (savedInstanceState != null) {
val list = savedInstanceState.getParcelableArrayList<Media>("popularMovies")
viewModel.popularMovies.postValue(list)
val list2 = savedInstanceState.getParcelableArrayList<Media>("popularSeries")
viewModel.popularTvShows.postValue(list2)
val list3 = savedInstanceState.getParcelableArrayList<Media>("topRatedMovies")
viewModel.topRatedMovies.postValue(list3)
val list4 = savedInstanceState.getParcelableArrayList<Media>("topRatedSeries")
viewModel.topRatedTvShows.postValue(list4)
}
fun addMediaToRecyclerView(listMedia: List<Media>, recyclerView: RecyclerView) {
val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)
recyclerView.layoutManager = layoutManager
val adapter = MediaAdapter(listMedia)
recyclerView.adapter = adapter
viewModel = HomeViewModel()
viewModel.addMedia(rootView)
return rootView
}
companion object {

@ -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

@ -1,4 +1,4 @@
package com.example.cinapp.fragments
package com.example.cinapp.ui.fragments
import android.os.Bundle
import androidx.fragment.app.Fragment

@ -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<Media>("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)
}

@ -1,4 +1,4 @@
package com.example.cinapp.fragments
package com.example.cinapp.ui.fragments
import android.os.Bundle
import androidx.fragment.app.Fragment

@ -1,4 +1,4 @@
package com.example.cinapp.fragments
package com.example.cinapp.ui.fragments
import android.os.Bundle
import androidx.fragment.app.Fragment

@ -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<List<Media>>()
var popularTvShows = MutableLiveData<List<Media>>()
var topRatedMovies = MutableLiveData<List<Media>>()
var topRatedTvShows = MutableLiveData<List<Media>>()
@SuppressLint("StaticFieldLeak")
val context : MainActivity = MainActivity()
fun addMedia(rootView: View) {
viewModelScope.launch(Dispatchers.IO){
MediaApi().getPopularMovies { listMedia ->
popularMovies.postValue(listMedia)
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_popular_movies)
addMediaToRecyclerView(recyclerView, popularMovies)
}
}
viewModelScope.launch(Dispatchers.IO){
MediaApi().getPopularSeries { listMedia ->
popularTvShows.postValue(listMedia)
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_popular_series)
addMediaToRecyclerView(recyclerView, popularTvShows)
}
}
viewModelScope.launch(Dispatchers.IO){
MediaApi().getTopRatedMovie { listMedia ->
topRatedMovies.postValue(listMedia)
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_top_rated_movies)
addMediaToRecyclerView(recyclerView, topRatedMovies)
}
}
viewModelScope.launch(Dispatchers.IO) {
MediaApi().getTopRatedSerie { listMedia ->
topRatedTvShows.postValue(listMedia)
val recyclerView = rootView.findViewById<RecyclerView>(R.id.rc_top_rated_series)
addMediaToRecyclerView(recyclerView, topRatedTvShows)
}
}
}
fun addMediaToRecyclerView(recyclerView: RecyclerView, mediaList: MutableLiveData<List<Media>>) {
Log.d("HomeViewModel ------", "addMediaToRecyclerView: $recyclerView")
val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)
recyclerView.layoutManager = layoutManager
recyclerView.adapter = MediaAdapter(mediaList)
}
}

@ -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()
}
}

@ -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<List<Media>>()
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")
}*/
}

@ -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">
<!-- TODO: Update blank fragment layout -->

@ -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">
<com.google.android.material.tabs.TabLayout

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.Movies2SeeFragment">
tools:context=".ui.fragments.Movies2SeeFragment">
<!-- TODO: Update blank fragment layout -->
<TextView

@ -5,7 +5,7 @@
<data>
<variable
name="viewModel"
type="com.example.cinapp.viewModel.SearchViewModel" />
type="com.example.cinapp.ui.viewModel.SearchViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
@ -13,7 +13,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/first_grey"
tools:context=".fragments.SearchFragment">
tools:context=".ui.fragments.SearchFragment">
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.SeenMoviesFragment">
tools:context=".ui.fragments.SeenMoviesFragment">
<!-- TODO: Update blank fragment layout -->
<TextView

@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/purple_200"
tools:context=".fragments.SerieFragment">
tools:context=".ui.fragments.SerieFragment">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"

@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView android:layout_width="wrap_content"
<androidx.cardview.widget.CardView xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginHorizontal="5dp"
app:cardBackgroundColor="@color/first_grey"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardview">
android:id="@+id/cardview"
tools:ignore="OnClick">
<ImageView
android:id="@+id/poster"

@ -2,18 +2,19 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/movie_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:id="@+id/info_image"
android:layout_width="409dp"
android:layout_height="187dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:id="@+id/info_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
@ -23,17 +24,17 @@
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView7"
android:id="@+id/info_time_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="16dp"
android:text="Heure - Type"
app:layout_constraintStart_toStartOf="@+id/imageView"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
app:layout_constraintStart_toStartOf="@+id/info_image"
app:layout_constraintTop_toBottomOf="@+id/info_name" />
<TextView
android:id="@+id/textView9"
android:id="@+id/info_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
@ -42,7 +43,7 @@
tools:layout_editor_absoluteY="148dp" />
<TextView
android:id="@+id/textView10"
android:id="@+id/info_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
@ -51,22 +52,24 @@
tools:layout_editor_absoluteY="148dp" />
<TextView
android:id="@+id/textView11"
android:id="@+id/info_title_overview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="20dp"
android:text="Info film"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
app:layout_constraintTop_toBottomOf="@+id/info_image" />
<Button
android:id="@+id/button"
android:id="@+id/info_add_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginEnd="28dp"
android:text="Vu"
tools:layout_editor_absoluteX="301dp"
tools:layout_editor_absoluteY="194dp" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/info_image" />
<ImageView
android:id="@+id/imageView2"
@ -75,7 +78,7 @@
android:layout_marginStart="12dp"
android:layout_marginTop="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView7"
app:layout_constraintTop_toBottomOf="@+id/info_time_type"
app:srcCompat="@drawable/ic_outline_calendar_month_24" />
<ImageView
@ -83,17 +86,17 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="68dp"
app:layout_constraintStart_toEndOf="@+id/textView9"
app:layout_constraintStart_toEndOf="@+id/info_date"
app:srcCompat="@drawable/ic_outline_remove_red_eye_24"
tools:layout_editor_absoluteY="146dp" />
<TextView
android:id="@+id/textView12"
android:id="@+id/info_overview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="La description"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView11" />
app:layout_constraintTop_toBottomOf="@+id/info_title_overview" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save