diff --git a/Cineapp/.idea/deploymentTargetDropDown.xml b/Cineapp/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index 7d0ccfb..0000000
--- a/Cineapp/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Cineapp/app/apikey.properties b/Cineapp/app/apikey.properties
new file mode 100644
index 0000000..2ccfef9
--- /dev/null
+++ b/Cineapp/app/apikey.properties
@@ -0,0 +1 @@
+TMDB_API_KEY="e53e59cf1e29b9afff93d9ca1208f0cf"
\ No newline at end of file
diff --git a/Cineapp/app/build.gradle b/Cineapp/app/build.gradle
index 4f80337..41e8984 100644
--- a/Cineapp/app/build.gradle
+++ b/Cineapp/app/build.gradle
@@ -3,11 +3,16 @@ plugins {
id 'org.jetbrains.kotlin.android'
}
+def apikeyPropertiesFile = rootProject.file("app/apikey.properties")
+def apikeyProperties = new Properties()
+apikeyProperties.load(new FileInputStream(apikeyPropertiesFile))
+
android {
namespace 'com.example.cinapp'
compileSdk 32
defaultConfig {
+ buildConfigField("String", "TMDB_API_KEY", apikeyProperties['TMDB_API_KEY'])
applicationId "com.example.cinapp"
minSdk 21
targetSdk 32
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 7a627c0..e40db50 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt
@@ -2,6 +2,7 @@ package com.example.cinapp
import androidx.appcompat.app.AppCompatActivity
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
diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt b/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt
index 8a17bf8..14590c1 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaApi.kt
@@ -17,8 +17,8 @@ class MediaApi {
private val service = retrofit.create(MediaService::class.java)
val mediaMapper = MediaMapper()
- fun search(apiKey: String, language: String, query: String, page: Int, includeAdult: Boolean, callback: (List) -> Unit) {
- val response: Call = service.searchMedia(apiKey, language, query, page, includeAdult)
+ fun search(query: String, page: Int, callback: (List) -> Unit) {
+ val response: Call = service.searchMedia(query, page)
val listMedia: MutableList = mutableListOf()
Log.d("TAG", "search: " + response.request().url())
@@ -42,8 +42,8 @@ class MediaApi {
Log.d("Liste2", listMedia.size.toString())
}
- fun getPopularMovies(apiKey: String, callback: (List) -> Unit ) {
- val response: Call = service.getPopularMovies(apiKey)
+ fun getPopularMovies(callback: (List) -> Unit ) {
+ val response: Call = service.getPopularMovies()
val listMedia: MutableList = mutableListOf()
response.enqueue(object : Callback {
@@ -63,8 +63,8 @@ class MediaApi {
})
}
- fun getPopularSeries(apiKey: String, callback: (List) -> Unit ) {
- val response: Call = service.getPopularSeries(apiKey)
+ fun getPopularSeries(callback: (List) -> Unit ) {
+ val response: Call = service.getPopularSeries()
val listMedia: MutableList = mutableListOf()
response.enqueue(object : Callback {
@@ -84,8 +84,8 @@ class MediaApi {
})
}
- fun getTopRatedMovie(apiKey: String, callback: (List) -> Unit ) {
- val response: Call = service.getTopRatedMovie(apiKey)
+ fun getTopRatedMovie(callback: (List) -> Unit ) {
+ val response: Call = service.getTopRatedMovie()
val listMedia: MutableList = mutableListOf()
response.enqueue(object : Callback {
@@ -105,8 +105,8 @@ class MediaApi {
})
}
- fun getTopRatedSerie(apiKey: String, callback: (List) -> Unit ) {
- val response: Call = service.getTopRatedSerie(apiKey)
+ fun getTopRatedSerie(callback: (List) -> Unit ) {
+ val response: Call = service.getTopRatedSerie()
val listMedia: MutableList = mutableListOf()
response.enqueue(object : Callback {
diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt b/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt
index 72fc2ee..bc52ed1 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/Request/MediaService.kt
@@ -1,5 +1,6 @@
package com.example.cinapp.Request
+import com.example.cinapp.BuildConfig
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query
@@ -7,22 +8,22 @@ import retrofit2.http.Query
interface MediaService {
@GET("search/multi")
fun searchMedia(
- @Query("api_key") apiKey: String,
- @Query("language") language: String,
@Query("query") query: String,
@Query("page") page: Int,
- @Query("include_adult") includeAdult: Boolean
+ @Query("api_key") apiKey: String = BuildConfig.TMDB_API_KEY,
+ @Query("language") language: String = "fr",
+ @Query("include_adult") includeAdult: Boolean = true
): Call
@GET("movie/popular")
- fun getPopularMovies(@Query("api_key") apiKey: String): Call
+ fun getPopularMovies(@Query("api_key") apiKey: String = BuildConfig.TMDB_API_KEY): Call
@GET("tv/popular")
- fun getPopularSeries(@Query("api_key") apiKey: String): Call
+ fun getPopularSeries(@Query("api_key") apiKey: String = BuildConfig.TMDB_API_KEY): Call
@GET("movie/top_rated")
- fun getTopRatedMovie(@Query("api_key") apiKey: String): Call
+ fun getTopRatedMovie(@Query("api_key") apiKey: String = BuildConfig.TMDB_API_KEY): Call
@GET("tv/top_rated")
- fun getTopRatedSerie(@Query("api_key") apiKey: String): Call
+ fun getTopRatedSerie(@Query("api_key") apiKey: String = BuildConfig.TMDB_API_KEY): Call
}
\ No newline at end of file
diff --git a/Cineapp/app/src/main/java/com/example/cinapp/fragments/HomeFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/fragments/HomeFragment.kt
index e060560..92a8c2f 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/fragments/HomeFragment.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/fragments/HomeFragment.kt
@@ -42,24 +42,23 @@ class HomeFragment : Fragment() {
//getPopularMovies
// Inflate the layout for this fragment
val rootView = inflater.inflate(R.layout.fragment_home, container, false)
- val apiKey = "e53e59cf1e29b9afff93d9ca1208f0cf"
- MediaApi().getPopularMovies(apiKey) { listMedia ->
+ MediaApi().getPopularMovies() { listMedia ->
val recyclerView = rootView.findViewById(R.id.rc_popular_movies)
addMediaToRecyclerView(listMedia, recyclerView)
}
- MediaApi().getPopularSeries(apiKey) { listMedia ->
+ MediaApi().getPopularSeries() { listMedia ->
val recyclerView = rootView.findViewById(R.id.rc_popular_series)
addMediaToRecyclerView(listMedia, recyclerView)
}
- MediaApi().getTopRatedMovie(apiKey) { listMedia ->
+ MediaApi().getTopRatedMovie() { listMedia ->
val recyclerView = rootView.findViewById(R.id.rc_top_rated_movies)
addMediaToRecyclerView(listMedia, recyclerView)
}
- MediaApi().getTopRatedSerie(apiKey) { listMedia ->
+ MediaApi().getTopRatedSerie() { listMedia ->
val recyclerView = rootView.findViewById(R.id.rc_top_rated_series)
addMediaToRecyclerView(listMedia, recyclerView)
}
diff --git a/Cineapp/app/src/main/java/com/example/cinapp/fragments/MovieFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/fragments/MovieFragment.kt
index fd1813c..3946bef 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/fragments/MovieFragment.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/fragments/MovieFragment.kt
@@ -41,38 +41,8 @@ class MovieFragment : Fragment() {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
-
// Récupération de la vue racine
val rootView = inflater.inflate(R.layout.fragment_movie, container, false)
-
- // Récupération de la vue souhaitée
- val myView = rootView.findViewById(R.id.name)
-
- //var listMedias : Unit = MediaApi().search("e53e59cf1e29b9afff93d9ca1208f0cf", "en-US", "One Piece", 1, false) { listMedia -> listMedia }
- //var listMedia : List = MediaApi().getPopularMovies("e53e59cf1e29b9afff93d9ca1208f0cf")
- //var listMedia : List = MediaApi().getForrestGump()
-
- val apiKey = "e53e59cf1e29b9afff93d9ca1208f0cf"
- val language = "en-US"
- val query = "One Piece"
- val page = 1
- val includeAdult = false
- MediaApi().search(apiKey, language, query, page, includeAdult) { listMedia ->
- //Do something with listMedia
- Log.d("TAG", "onCreateView: " + listMedia)
- Log.d("Image", "onCreateView: " + listMedia[0].posterPath.toString())
- myView.text = listMedia[0].title.toString() + " " + listMedia[0].id.toString() + " " + listMedia[0].posterPath.toString()
- //ajouter le recyclerView à la vue
-
- val recyclerView = rootView.findViewById(R.id.recycler_view_movies)
- //recyclerView.layoutManager = LinearLayoutManager(context)
- val layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)
- recyclerView.layoutManager = layoutManager
- val adapter = MediaAdapter(listMedia)
- recyclerView.adapter = adapter
-
- }
-
return rootView
}
diff --git a/Cineapp/app/src/main/java/com/example/cinapp/fragments/SearchFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/fragments/SearchFragment.kt
index 8eecb60..63f224a 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/fragments/SearchFragment.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/fragments/SearchFragment.kt
@@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.ViewModelProviders
import com.example.cinapp.R
import com.example.cinapp.viewModel.SearchViewModel
@@ -25,11 +26,11 @@ class SearchFragment : Fragment() {
// TODO: Rename and change types of parameters
private var param1: String? = null
private var param2: String? = null
- private lateinit var searchView: SearchView
- private lateinit var searchVM: SearchViewModel
+ private lateinit var searchViewModel: SearchViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ Log.d("InfoSearch", "onCreateView: ")
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
@@ -42,16 +43,16 @@ class SearchFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
- val view = inflater.inflate(R.layout.fragment_search, container, false)
- searchView = view.findViewById(R.id.searchView)
- Log.d("SearchViewModel", "setSearchView: $searchView")
- return view
+ 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)
+ return rootView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- searchVM = ViewModelProvider(this)[SearchViewModel::class.java]
- searchVM.setSearchView(searchView)
}
companion object {
diff --git a/Cineapp/app/src/main/java/com/example/cinapp/viewModel/SearchViewModel.kt b/Cineapp/app/src/main/java/com/example/cinapp/viewModel/SearchViewModel.kt
index 9adead8..2f52c90 100644
--- a/Cineapp/app/src/main/java/com/example/cinapp/viewModel/SearchViewModel.kt
+++ b/Cineapp/app/src/main/java/com/example/cinapp/viewModel/SearchViewModel.kt
@@ -2,32 +2,51 @@ package com.example.cinapp.viewModel
import android.annotation.SuppressLint
import android.util.Log
+import android.view.View
import androidx.appcompat.widget.SearchView
import androidx.lifecycle.ViewModel
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import com.example.cinapp.BuildConfig
+import com.example.cinapp.MainActivity
+import com.example.cinapp.R
+import com.example.cinapp.Request.MediaAdapter
+import com.example.cinapp.Request.MediaApi
@SuppressLint("StaticFieldLeak")
class SearchViewModel : ViewModel() {
var searchView: SearchView? = null
+ val context : MainActivity = MainActivity()
@JvmName("setSearchView1")
- fun setSearchView(searchView: SearchView) {
- this.searchView = searchView
+ fun setSearchView(rootView: View) {
+ searchView = rootView.findViewById(R.id.searchView)
Log.d("SearchViewModel", "setSearchView: $searchView")
- }
+ searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
+ override fun onQueryTextSubmit(query: String?): Boolean {
+ // Traitement lors de la soumission de la requête
+
+ MediaApi().search(query.toString(), 1)
+ { listMedia ->
+ val recyclerView = rootView.findViewById(R.id.searchRecyclerView)
+ recyclerView.layoutManager = GridLayoutManager(context, 2)
+ recyclerView.adapter = MediaAdapter(listMedia)
+
+ }
- var sv = searchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
- override fun onQueryTextSubmit(query: String?): Boolean {
- // Traitement lors de la soumission de la requête
- Log.d("SearchViewModel", "onQueryTextSubmit: $query")
- return false
- }
-
- override fun onQueryTextChange(newText: String?): Boolean {
- // Traitement lorsque le texte de la requête change
- Log.d("SearchViewModel", "onQueryTextSubmit: $newText")
- return false
- }
- })
-}
\ No newline at end of file
+
+ Log.d("SearchViewModel -----", "onQueryTextSubmit: $query")
+ return false
+ }
+
+ override fun onQueryTextChange(newText: String?): Boolean {
+ // Traitement lorsque le texte de la requête change
+ Log.d("SearchViewModel *******", "onQueryTextChange: $newText")
+ return false
+ }
+ })
+ }
+}
diff --git a/Cineapp/app/src/main/res/layout/fragment_search.xml b/Cineapp/app/src/main/res/layout/fragment_search.xml
index 5ad6e00..4b20a1d 100644
--- a/Cineapp/app/src/main/res/layout/fragment_search.xml
+++ b/Cineapp/app/src/main/res/layout/fragment_search.xml
@@ -1,14 +1,14 @@
-
+
-
+
+
diff --git a/Cineapp/app/src/main/res/layout/item_search.xml b/Cineapp/app/src/main/res/layout/item_search.xml
new file mode 100644
index 0000000..616415b
--- /dev/null
+++ b/Cineapp/app/src/main/res/layout/item_search.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file