From 3d198fac54576b7b8e28125cfd0ac168089e7a86 Mon Sep 17 00:00:00 2001 From: louwar Date: Fri, 7 Apr 2023 09:42:41 +0200 Subject: [PATCH] =?UTF-8?q?test=20=C3=A0=20voir=20plus=20tard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CineCool/app/build.gradle | 18 ++++-- CineCool/app/src/main/AndroidManifest.xml | 34 +++++------ .../cinecool/API/OpenStreetMap/ApiService.kt | 16 +++++ .../API/OpenStreetMap/CinemaResponse.kt | 17 ++++++ .../cinecool/API/OpenStreetMap/Repository.kt | 34 +++++++++++ .../iut/cinecool/API/{ => THMDB}/ApiClient.kt | 2 +- .../cinecool/API/{ => THMDB}/ApiService.kt | 2 +- .../cinecool/API/{ => THMDB}/MovieResponse.kt | 2 +- .../cinecool/API/{ => THMDB}/Repository.kt | 2 +- .../main/java/fr/iut/cinecool/MainActivity.kt | 61 ++++++++++++++----- .../fr/iut/cinecool/adapter/CinemaAdapter.kt | 43 +++++++++++++ .../fr/iut/cinecool/adapter/MovieAdapter.kt | 50 ++++++--------- .../fragments/CinemaDetailFragment.kt | 57 +++++++++++++++++ .../{ => fragments}/CinemaFragment.kt | 3 +- .../cinecool/fragments/CinemaListFragment.kt | 45 ++++++++++++++ .../fr/iut/cinecool/fragments/MapFragment.kt | 45 ++++++++++++++ .../{ => fragments}/MovieDetailFragment.kt | 9 +-- .../{ => fragments}/MoviesFragment.kt | 5 +- .../{ => fragments}/SessionFragment.kt | 6 +- .../fr/iut/cinecool/model/cineViewModel.kt | 7 ++- .../{ => viewModel}/MovieViewModel.kt | 6 +- .../app/src/main/res/layout/activity_main.xml | 61 +++---------------- .../src/main/res/layout/fragment_cinema.xml | 2 +- .../res/layout/fragment_cinema_detail.xml | 31 ++++++++++ .../main/res/layout/fragment_cinema_list.xml | 20 ++++++ .../main/res/layout/fragment_container.xml | 18 ++++++ .../app/src/main/res/layout/fragment_map.xml | 11 ++++ .../src/main/res/layout/fragment_movies.xml | 2 +- .../src/main/res/layout/fragment_session.xml | 2 +- .../app/src/main/res/layout/item_cinema.xml | 17 ++++++ .../app/src/main/res/layout/movie_item.xml | 25 ++++++++ .../app/src/main/res/navigation/nav_graph.xml | 6 +- CineCool/app/src/main/res/values/strings.xml | 1 + .../app/src/main/res/xml/osmdroid_config.xml | 5 ++ CineCool/build.gradle | 2 +- 35 files changed, 508 insertions(+), 159 deletions(-) create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/ApiService.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/CinemaResponse.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/Repository.kt rename CineCool/app/src/main/java/fr/iut/cinecool/API/{ => THMDB}/ApiClient.kt (92%) rename CineCool/app/src/main/java/fr/iut/cinecool/API/{ => THMDB}/ApiService.kt (92%) rename CineCool/app/src/main/java/fr/iut/cinecool/API/{ => THMDB}/MovieResponse.kt (96%) rename CineCool/app/src/main/java/fr/iut/cinecool/API/{ => THMDB}/Repository.kt (91%) create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/adapter/CinemaAdapter.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaDetailFragment.kt rename CineCool/app/src/main/java/fr/iut/cinecool/{ => fragments}/CinemaFragment.kt (88%) create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaListFragment.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/fragments/MapFragment.kt rename CineCool/app/src/main/java/fr/iut/cinecool/{ => fragments}/MovieDetailFragment.kt (86%) rename CineCool/app/src/main/java/fr/iut/cinecool/{ => fragments}/MoviesFragment.kt (95%) rename CineCool/app/src/main/java/fr/iut/cinecool/{ => fragments}/SessionFragment.kt (92%) rename CineCool/app/src/main/java/fr/iut/cinecool/{ => viewModel}/MovieViewModel.kt (87%) create mode 100644 CineCool/app/src/main/res/layout/fragment_cinema_detail.xml create mode 100644 CineCool/app/src/main/res/layout/fragment_cinema_list.xml create mode 100644 CineCool/app/src/main/res/layout/fragment_container.xml create mode 100644 CineCool/app/src/main/res/layout/fragment_map.xml create mode 100644 CineCool/app/src/main/res/layout/item_cinema.xml create mode 100644 CineCool/app/src/main/res/layout/movie_item.xml create mode 100644 CineCool/app/src/main/res/xml/osmdroid_config.xml diff --git a/CineCool/app/build.gradle b/CineCool/app/build.gradle index e5353a1..39e2f4d 100644 --- a/CineCool/app/build.gradle +++ b/CineCool/app/build.gradle @@ -9,7 +9,7 @@ android { defaultConfig { applicationId "fr.iut.cinecool" - minSdk 21 + minSdk 19 targetSdk 33 versionCode 1 versionName "1.0" @@ -36,7 +36,6 @@ android { } dependencies { - implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' @@ -44,6 +43,13 @@ dependencies { implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' implementation 'com.google.android.gms:play-services-location:21.0.1' + implementation 'com.google.android.gms:play-services-maps:18.1.0' + implementation 'androidx.fragment:fragment-ktx:1.5.6' + implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' + implementation 'androidx.core:core-ktx:+' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' @@ -65,6 +71,10 @@ dependencies { // Jetpack Compose Integration implementation("androidx.navigation:navigation-compose:2.5.3") + // Map + implementation 'org.osmdroid:osmdroid-android:6.1.10' + implementation 'com.github.MKergall:osmbonuspack:6.6.0' + // API implementation "com.squareup.okhttp3:okhttp:4.9.3" implementation "com.squareup.okhttp3:logging-interceptor:4.9.3" @@ -72,10 +82,6 @@ dependencies { implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' - implementation 'androidx.fragment:fragment-ktx:1.5.6' - implementation 'androidx.multidex:multidex:2.0.1' - implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' } \ No newline at end of file diff --git a/CineCool/app/src/main/AndroidManifest.xml b/CineCool/app/src/main/AndroidManifest.xml index 248342b..953d85d 100644 --- a/CineCool/app/src/main/AndroidManifest.xml +++ b/CineCool/app/src/main/AndroidManifest.xml @@ -1,36 +1,30 @@ - + package="com.example.myapplication"> - - - - + + + + - - + android:theme="@style/AppTheme"> + + + + - - \ No newline at end of file + diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/ApiService.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/ApiService.kt new file mode 100644 index 0000000..38090af --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/ApiService.kt @@ -0,0 +1,16 @@ +package fr.iut.cinecool.API.OpenStreetMap + +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Headers +import retrofit2.http.Query + +interface ApiService { + @Headers("User-Agent: MyApp") + @GET("search") + fun searchCinemas( + @Query("q") query: String, + @Query("format") format: String = "json", + @Query("limit") limit: Int = 10 + ): Call> +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/CinemaResponse.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/CinemaResponse.kt new file mode 100644 index 0000000..cb627fc --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/CinemaResponse.kt @@ -0,0 +1,17 @@ +package fr.iut.cinecool.API.OpenStreetMap + +import com.google.gson.annotations.SerializedName + +data class Cinema( + @SerializedName("place_id") + val placeId: Long, + + @SerializedName("lat") + val latitude: Double, + + @SerializedName("lon") + val longitude: Double, + + @SerializedName("display_name") + val displayName: String +) diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/Repository.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/Repository.kt new file mode 100644 index 0000000..158e658 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/OpenStreetMap/Repository.kt @@ -0,0 +1,34 @@ +package fr.iut.cinecool.API.OpenStreetMap + +import android.location.Location +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class Repository { + private fun fetchNearbyCinemas(location: Location) { + val retrofit = Retrofit.Builder() + .baseUrl("https://nominatim.openstreetmap.org/") + .addConverterFactory(GsonConverterFactory.create()) + .build() + + val nominatimService = retrofit.create(NominatimService::class.java) + val call = nominatimService.searchCinemas("cinema near ${location.latitude},${location.longitude}") + call.enqueue(object : Callback> { + override fun onResponse(call: Call>, response: Response>) { + if (response.isSuccessful) { + val cinemas = response.body() ?: emptyList() + displayCinemas(cinemas) + } + } + + override fun onFailure(call: Call>, t: Throwable) { + // Gérer l'erreur + } + }) + } + + +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/ApiClient.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/ApiClient.kt similarity index 92% rename from CineCool/app/src/main/java/fr/iut/cinecool/API/ApiClient.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/ApiClient.kt index 178d92e..f3f8e27 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/API/ApiClient.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/ApiClient.kt @@ -1,4 +1,4 @@ -package fr.iut.cinecool.API +package fr.iut.cinecool.API.THMDB import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/ApiService.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/ApiService.kt similarity index 92% rename from CineCool/app/src/main/java/fr/iut/cinecool/API/ApiService.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/ApiService.kt index 81012be..1fc1174 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/API/ApiService.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/ApiService.kt @@ -1,4 +1,4 @@ -package fr.iut.cinecool.API +package fr.iut.cinecool.API.THMDB import retrofit2.http.GET import retrofit2.http.Query diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/MovieResponse.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/MovieResponse.kt similarity index 96% rename from CineCool/app/src/main/java/fr/iut/cinecool/API/MovieResponse.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/MovieResponse.kt index 862daa3..56454cc 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/API/MovieResponse.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/MovieResponse.kt @@ -1,4 +1,4 @@ -package fr.iut.cinecool.API +package fr.iut.cinecool.API.THMDB import android.os.Parcel import android.os.Parcelable diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/API/Repository.kt b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/Repository.kt similarity index 91% rename from CineCool/app/src/main/java/fr/iut/cinecool/API/Repository.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/Repository.kt index 5894918..b5830e9 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/API/Repository.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/API/THMDB/Repository.kt @@ -1,4 +1,4 @@ -package fr.iut.cinecool.API +package fr.iut.cinecool.API.THMDB class Repository { private val apiService = ApiClient.apiService diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt b/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt index d6d302e..302e3ad 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/MainActivity.kt @@ -1,32 +1,61 @@ package fr.iut.cinecool -import android.content.Intent +import android.Manifest +import android.content.pm.PackageManager +import android.location.Location import android.os.Bundle -import android.widget.EditText -import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import com.google.android.gms.location.FusedLocationProviderClient +import com.google.android.gms.location.LocationServices +import fr.iut.cinecool.fragments.CinemaListFragment class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { + + private lateinit var fusedLocationClient: FusedLocationProviderClient + private val locationPermissionRequestCode = 1 + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - val loginButton = findViewById(R.id.loginButton) - loginButton.setOnClickListener(){ - login() + + fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) + + if (savedInstanceState == null) { + supportFragmentManager.beginTransaction() + .add(R.id.fragment_container, CinemaListFragment()) + .commit() } + requestLocationPermission() + } - /*ActivityCompat.requestPermissions(this, - arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,1) - )*/ + private fun requestLocationPermission() { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) + != PackageManager.PERMISSION_GRANTED + ) { + ActivityCompat.requestPermissions( + this, + arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), + locationPermissionRequestCode + ) + } } - fun login(){ - val name = findViewById(R.id.name).text - if (name.isNotEmpty()){ - val intent = Intent(applicationContext,CinemaActivity::class.java) - startActivity(intent) - System.out.println(name) + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) { + if (requestCode == locationPermissionRequestCode) { + if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // La permission de localisation a été accordée, vous pouvez effectuer les actions correspondantes + } else { + // La permission de localisation a été refusée, vous devez gérer ce cas + } } } } + diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/adapter/CinemaAdapter.kt b/CineCool/app/src/main/java/fr/iut/cinecool/adapter/CinemaAdapter.kt new file mode 100644 index 0000000..10c8868 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/adapter/CinemaAdapter.kt @@ -0,0 +1,43 @@ +package fr.iut.cinecool.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import fr.iut.cinecool.API.OpenStreetMap.Cinema +import fr.iut.cinecool.R + +class CinemaAdapter(private val onCinemaClickListener: (Cinema) -> Unit) : + RecyclerView.Adapter() { + + private val cinemas = mutableListOf() + + fun updateCinemas(newCinemas: List) { + cinemas.clear() + cinemas.addAll(newCinemas) + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CinemaViewHolder { + val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_cinema, parent, false) + return CinemaViewHolder(itemView, onCinemaClickListener) + } + + override fun onBindViewHolder(holder: CinemaViewHolder, position: Int) { + holder.bind(cinemas[position]) + } + + override fun getItemCount(): Int = cinemas.size + + class CinemaViewHolder(itemView: View, private val onCinemaClickListener: (Cinema) -> Unit) : + RecyclerView.ViewHolder(itemView) { + + private val cinemaNameTextView: TextView = itemView.findViewById(R.id.cinemaNameTextView) + + fun bind(cinema: Cinema) { + cinemaNameTextView.text = cinema.displayName + itemView.setOnClickListener { onCinemaClickListener(cinema) } + } + } +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MovieAdapter.kt b/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MovieAdapter.kt index b999383..8d25979 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MovieAdapter.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MovieAdapter.kt @@ -8,47 +8,33 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import fr.iut.cinecool.R -import fr.iut.cinecool.API.Movie +import fr.iut.cinecool.API.THMDB.Movie -class MovieAdapter(private var moviesList: List) : - RecyclerView.Adapter() { - var onItemClick : ((Movie)->Unit)?=null - class MovieViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val imageView = itemView.findViewById(R.id.imageView) - val MovieName = itemView.findViewById(R.id.MovieName) - val OtherInformations = itemView.findViewById(R.id.OtherInformations) - } +class MovieAdapter : RecyclerView.Adapter() { + + private var movies: List = emptyList() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder { - val view = LayoutInflater.from(parent.context).inflate(R.layout.movie, parent, false) + val view = LayoutInflater.from(parent.context).inflate(R.layout.movie_item, parent, false) return MovieViewHolder(view) } - override fun getItemCount(): Int { - return moviesList.size + override fun onBindViewHolder(holder: MovieViewHolder, position: Int) { + holder.bind(movies[position]) } - override fun onBindViewHolder(holder: MovieViewHolder, position: Int) { - val movie = moviesList[position] - val imageUrl = "https://image.tmdb.org/t/p/w500${movie.poster_path}" - - Glide.with(holder.itemView.context) - .load(imageUrl) - .placeholder(R.drawable.imitation_game) - .into(holder.imageView) - - holder.MovieName.text = movie.title - holder.OtherInformations.text = movie.overview - holder.itemView.setOnClickListener { - onItemClick?.invoke(movie) - } + override fun getItemCount(): Int = movies.size - // Pour cet exemple, je mets l'overview en tant qu'OtherInformations, vous pouvez le personnaliser selon vos besoins + fun setMovies(movies: List) { + this.movies = movies + notifyDataSetChanged() } - // Ajoutez cette méthode pour mettre à jour la liste des films - fun updateMovies(newMovies: List) { - moviesList = newMovies - notifyDataSetChanged() + class MovieViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + private val titleTextView: TextView = itemView.findViewById(R.id.titleTextView) + + fun bind(movie: Movie) { + titleTextView.text = movie.title + } } -} \ No newline at end of file +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaDetailFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaDetailFragment.kt new file mode 100644 index 0000000..17ccb79 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaDetailFragment.kt @@ -0,0 +1,57 @@ +package fr.iut.cinecool.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import fr.iut.cinecool.API.OpenStreetMap.Cinema +import fr.iut.cinecool.R +import fr.iut.cinecool.adapter.MovieAdapter + +class CinemaDetailFragment : Fragment() { + + private lateinit var cinemaNameTextView: TextView + private lateinit var recyclerView: RecyclerView + private lateinit var adapter: MovieAdapter + private lateinit var cinema: Cinema + + companion object { + private const val ARG_CINEMA = "cinema" + + fun newInstance(cinema: Cinema): CinemaDetailFragment { + val fragment = CinemaDetailFragment() + val args = Bundle() + args.putParcelable(ARG_CINEMA, cinema) + fragment.arguments = args + return fragment + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + cinema = arguments?.getParcelable(ARG_CINEMA) ?: throw IllegalStateException("Cinema not provided") + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_cinema_detail, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + cinemaNameTextView = view.findViewById(R.id.cinemaNameTextView) + recyclerView = view.findViewById(R.id.recyclerView) + recyclerView.layoutManager = LinearLayoutManager(requireContext()) + + adapter = MovieAdapter() + recyclerView.adapter = adapter + + cinemaNameTextView.text = cinema.displayName + + // Récupérez et affichez la liste des films à l'affiche pour le cinéma sélectionné + } +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaFragment.kt similarity index 88% rename from CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaFragment.kt index 2bf909b..4187c35 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaFragment.kt @@ -1,10 +1,11 @@ -package fr.iut.cinecool +package fr.iut.cinecool.fragments import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import fr.iut.cinecool.R class CinemaFragment : Fragment() { diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaListFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaListFragment.kt new file mode 100644 index 0000000..a6765d6 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/CinemaListFragment.kt @@ -0,0 +1,45 @@ +package fr.iut.cinecool.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.google.android.gms.location.FusedLocationProviderClient +import com.google.android.gms.location.LocationServices +import fr.iut.cinecool.R +import fr.iut.cinecool.adapter.CinemaAdapter + +class CinemaListFragment : Fragment() { + + private lateinit var recyclerView: RecyclerView + private lateinit var adapter: CinemaAdapter + private lateinit var fusedLocationClient: FusedLocationProviderClient + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_cinema_list, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + recyclerView = view.findViewById(R.id.recyclerView) + recyclerView.layoutManager = LinearLayoutManager(requireContext()) + + adapter = CinemaAdapter { cinema -> + val fragment = CinemaDetailFragment.newInstance(cinema) + requireActivity().supportFragmentManager.beginTransaction() + .replace(R.id.fragment_container, fragment) + .addToBackStack(null) + .commit() + } + + recyclerView.adapter = adapter + + fusedLocationClient = LocationServices.getFusedLocationProviderClient(requireActivity()) + + // Récupérez la position de l'utilisateur et affichez les cinémas à proximité + } +} diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MapFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MapFragment.kt new file mode 100644 index 0000000..8e5c9cf --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MapFragment.kt @@ -0,0 +1,45 @@ +package fr.iut.cinecool.fragments + +import android.content.res.Configuration +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +//import androidx.lifecycle.viewmodel.CreationExtras.Empty.map +import com.google.android.gms.maps.CameraUpdateFactory +import com.google.android.gms.maps.GoogleMap +import com.google.android.gms.maps.SupportMapFragment +import com.google.android.gms.maps.model.LatLng +import com.google.android.gms.maps.model.MarkerOptions + +class MapFragment : Fragment() { +/* + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.fragment_map) + + map = findViewById(R.id.map) + + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map) + mapFragment.getMapAsync(this) + } + + override fun onMapReady(googleMap: GoogleMap) { + this.gMap = googleMap + + val mapIndia = LatLng(20.5937, 789629) + this.gMap.addMarker(MarkerOptions().position(mapIndia).title("Marker in India")) + this.gMap.moveCamera(CameraUpdateFactory.newLatLng(mapIndia)) + } + + + override fun onDestroyView() { + super.onDestroyView() + + } + + // TODO https://youtu.be/JzxjNNCYt_o + // https://console.cloud.google.com/apis/credentials?hl=fr&project=upbeat-grammar-382309 + */ +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MovieDetailFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MovieDetailFragment.kt similarity index 86% rename from CineCool/app/src/main/java/fr/iut/cinecool/MovieDetailFragment.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/fragments/MovieDetailFragment.kt index de6b77e..2c8562b 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MovieDetailFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MovieDetailFragment.kt @@ -1,12 +1,7 @@ -package fr.iut.cinecool +package fr.iut.cinecool.fragments -import android.os.Bundle import androidx.fragment.app.Fragment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.navigation.fragment.findNavController -import fr.iut.cinecool.API.Movie + // import fr.iut.cinecool.databinding.FragmentMovieDetailBinding class MovieDetailFragment : Fragment() { diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MoviesFragment.kt similarity index 95% rename from CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/fragments/MoviesFragment.kt index 0de6f9a..60e58e5 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/MoviesFragment.kt @@ -1,6 +1,5 @@ -package fr.iut.cinecool +package fr.iut.cinecool.fragments -import android.content.Intent import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -10,6 +9,8 @@ import androidx.fragment.app.viewModels import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import fr.iut.cinecool.viewModel.MovieViewModel +import fr.iut.cinecool.R import fr.iut.cinecool.adapter.MovieAdapter import fr.iut.cinecool.databinding.FragmentMoviesBinding import fr.iut.cinecool.model.cineViewModel diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/SessionFragment.kt similarity index 92% rename from CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/fragments/SessionFragment.kt index 4734e9b..9d9437e 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/fragments/SessionFragment.kt @@ -1,4 +1,4 @@ -package fr.iut.cinecool +package fr.iut.cinecool.fragments import android.os.Bundle import android.text.method.ScrollingMovementMethod @@ -6,15 +6,13 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Button import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import com.bumptech.glide.Glide -import fr.iut.cinecool.API.Movie -import fr.iut.cinecool.databinding.FragmentSessionBinding +import fr.iut.cinecool.R import fr.iut.cinecool.model.cineViewModel class SessionFragment : Fragment() { diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/model/cineViewModel.kt b/CineCool/app/src/main/java/fr/iut/cinecool/model/cineViewModel.kt index cbc149f..3612a7a 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/model/cineViewModel.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/model/cineViewModel.kt @@ -3,13 +3,14 @@ package fr.iut.cinecool.model import androidx.lifecycle.ViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import fr.iut.cinecool.API.THMDB.Movie class cineViewModel : ViewModel() { - private val _cine = MutableLiveData() - val cine: LiveData = _cine + private val _cine = MutableLiveData() + val cine: LiveData = _cine - fun setCine(cine: fr.iut.cinecool.API.Movie) { + fun setCine(cine: Movie) { _cine.value = cine } diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MovieViewModel.kt b/CineCool/app/src/main/java/fr/iut/cinecool/viewModel/MovieViewModel.kt similarity index 87% rename from CineCool/app/src/main/java/fr/iut/cinecool/MovieViewModel.kt rename to CineCool/app/src/main/java/fr/iut/cinecool/viewModel/MovieViewModel.kt index 14f1a2a..1a19080 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MovieViewModel.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/viewModel/MovieViewModel.kt @@ -1,11 +1,11 @@ -package fr.iut.cinecool +package fr.iut.cinecool.viewModel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch import androidx.lifecycle.MutableLiveData -import fr.iut.cinecool.API.Movie -import fr.iut.cinecool.API.Repository +import fr.iut.cinecool.API.THMDB.Movie +import fr.iut.cinecool.API.THMDB.Repository class MovieViewModel : ViewModel() { private val repository = Repository() diff --git a/CineCool/app/src/main/res/layout/activity_main.xml b/CineCool/app/src/main/res/layout/activity_main.xml index b21508c..59dcc15 100644 --- a/CineCool/app/src/main/res/layout/activity_main.xml +++ b/CineCool/app/src/main/res/layout/activity_main.xml @@ -1,65 +1,18 @@ - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> - \ No newline at end of file + diff --git a/CineCool/app/src/main/res/layout/fragment_cinema.xml b/CineCool/app/src/main/res/layout/fragment_cinema.xml index f4e118c..891b233 100644 --- a/CineCool/app/src/main/res/layout/fragment_cinema.xml +++ b/CineCool/app/src/main/res/layout/fragment_cinema.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".CinemaFragment"> + tools:context=".fragments.CinemaFragment"> + + + + + + + diff --git a/CineCool/app/src/main/res/layout/fragment_cinema_list.xml b/CineCool/app/src/main/res/layout/fragment_cinema_list.xml new file mode 100644 index 0000000..54dd807 --- /dev/null +++ b/CineCool/app/src/main/res/layout/fragment_cinema_list.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/CineCool/app/src/main/res/layout/fragment_container.xml b/CineCool/app/src/main/res/layout/fragment_container.xml new file mode 100644 index 0000000..17008a0 --- /dev/null +++ b/CineCool/app/src/main/res/layout/fragment_container.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/CineCool/app/src/main/res/layout/fragment_map.xml b/CineCool/app/src/main/res/layout/fragment_map.xml new file mode 100644 index 0000000..96ffe29 --- /dev/null +++ b/CineCool/app/src/main/res/layout/fragment_map.xml @@ -0,0 +1,11 @@ + + + diff --git a/CineCool/app/src/main/res/layout/fragment_movies.xml b/CineCool/app/src/main/res/layout/fragment_movies.xml index 8dfadcf..306c087 100644 --- a/CineCool/app/src/main/res/layout/fragment_movies.xml +++ b/CineCool/app/src/main/res/layout/fragment_movies.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MoviesFragment"> + tools:context=".fragments.MoviesFragment"> + tools:context=".fragments.SessionFragment"> + + + + + diff --git a/CineCool/app/src/main/res/layout/movie_item.xml b/CineCool/app/src/main/res/layout/movie_item.xml new file mode 100644 index 0000000..e1b756b --- /dev/null +++ b/CineCool/app/src/main/res/layout/movie_item.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/CineCool/app/src/main/res/navigation/nav_graph.xml b/CineCool/app/src/main/res/navigation/nav_graph.xml index c05711b..019aa0d 100644 --- a/CineCool/app/src/main/res/navigation/nav_graph.xml +++ b/CineCool/app/src/main/res/navigation/nav_graph.xml @@ -7,13 +7,13 @@ @@ -28,7 +28,7 @@ Hello second fragment. Arg: %1$s erreur de chargement des films a97243d7813d31446f6c43284e6854d5 + Movie Title \ No newline at end of file diff --git a/CineCool/app/src/main/res/xml/osmdroid_config.xml b/CineCool/app/src/main/res/xml/osmdroid_config.xml new file mode 100644 index 0000000..053924c --- /dev/null +++ b/CineCool/app/src/main/res/xml/osmdroid_config.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CineCool/build.gradle b/CineCool/build.gradle index 3e76939..71ad002 100644 --- a/CineCool/build.gradle +++ b/CineCool/build.gradle @@ -2,5 +2,5 @@ plugins { id 'com.android.application' version '7.4.2' apply false id 'com.android.library' version '7.4.2' apply false - id 'org.jetbrains.kotlin.android' version '1.8.20-RC2' apply false + id 'org.jetbrains.kotlin.android' version '1.8.20' apply false } \ No newline at end of file