Compare commits

...

9 Commits

@ -37,13 +37,15 @@ android {
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.core:core-ktx:1.10.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
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 'androidx.core:core-ktx:1.10.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
@ -69,7 +71,7 @@ dependencies {
implementation "com.squareup.okhttp3:okhttp:4.9.3"
implementation "com.squareup.okhttp3:logging-interceptor:4.9.3"
implementation "com.google.code.gson:gson:2.8.9"
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson: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'

@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- Ajoutez cette ligne pour autoriser l'accès à la localisation -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
@ -17,14 +18,12 @@
android:supportsRtl="true"
android:theme="@style/Theme.CineCool"
tools:targetApi="31">
<activity
android:name=".CinemaActivity"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/title_activity_main"
android:theme="@style/Theme.CineCool.NoActionBar">
android:theme="@style/Theme.CineCool.NoActionBar"
tools:ignore="DuplicateActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

@ -1,47 +0,0 @@
package fr.iut.cinecool.API
import android.os.Parcel
import android.os.Parcelable
data class MovieResponse(
val page: Int,
val results: List<Movie>,
val total_pages: Int,
val total_results: Int
)
data class Movie(
val id: Int,
val title: String,
val poster_path: String?,
val overview: String
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString()!!,
parcel.readString(),
parcel.readString()!!
) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(id)
parcel.writeString(title)
parcel.writeString(poster_path)
parcel.writeString(overview)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Movie> {
override fun createFromParcel(parcel: Parcel): Movie {
return Movie(parcel)
}
override fun newArray(size: Int): Array<Movie?> {
return arrayOfNulls(size)
}
}
}

@ -0,0 +1,25 @@
package fr.iut.cinecool.API.OSM
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object ApiClientOSM {
private const val OSM_BASE_URL = "https://nominatim.openstreetmap.org/"
private const val ORS_BASE_URL = "https://api.openrouteservice.org/"
fun getOSMClient(): ApiService {
return Retrofit.Builder()
.baseUrl(OSM_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
fun getORSClient(): ApiService {
return Retrofit.Builder()
.baseUrl(ORS_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}

@ -0,0 +1,22 @@
package fr.iut.cinecool.API.OSM
import fr.iut.cinecool.model.CinemaResult
import fr.iut.cinecool.model.RouteResult
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query
interface ApiService {
@GET("search")
fun searchCinemas(
@Query("q") query: String,
@Query("format") format: String = "json"
): Call<List<CinemaResult>>
@GET("v2/directions/driving-car")
fun getRoute(
@Query("api_key") apiKey: String,
@Query("start") start: String,
@Query("end") end: String
): Call<RouteResult>
}

@ -0,0 +1,47 @@
package fr.iut.cinecool.API.OSM
import fr.iut.cinecool.model.CinemaResult
import fr.iut.cinecool.model.RouteResult
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class MethodApiOSM {
fun searchCinemas(latitude: Double, longitude: Double) {
val apiService = ApiClientOSM.getOSMClient()
val call = apiService.searchCinemas("cinema near $latitude,$longitude")
call.enqueue(object : Callback<List<CinemaResult>> {
override fun onResponse(call: Call<List<CinemaResult>>, response: Response<List<CinemaResult>>) {
val cinemas = response.body()
// Trouvez le cinéma le plus proche ou affichez la liste des cinémas
// Puis, utilisez la fonction getRoute() pour obtenir l'itinéraire
}
override fun onFailure(call: Call<List<CinemaResult>>, t: Throwable) {
// Gérer l'échec
}
})
}
fun getRoute(startLat: Double, startLon: Double, endLat: Double, endLon: Double) {
val apiKey = "5b3ce3597851110001cf6248953315121da3401d85fa50fce9c0991e"
val apiService = ApiClientOSM.getORSClient()
val call = apiService.getRoute(apiKey, "$startLat,$startLon", "$endLat,$endLon")
call.enqueue(object : Callback<RouteResult> {
override fun onResponse(call: Call<RouteResult>, response: Response<RouteResult>) {
val routeResult = response.body()
val steps = routeResult?.routes?.get(0)?.segments?.get(0)?.steps
if (steps != null) {
// Utilisez les instructions de l'itinéraire pour guider l'utilisateur
} else {
// Gérer le cas où il n'y a pas d'itinéraire disponible
}
}
override fun onFailure(call: Call<RouteResult>, t: Throwable) {
// Gérer l'échec
}
})
}
}

@ -1,9 +1,9 @@
package fr.iut.cinecool.API
package fr.iut.cinecool.API.THMDB
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object ApiClient {
object ApiClientTHMDB {
private const val BASE_URL = "https://api.themoviedb.org/3/"
private val retrofit: Retrofit = Retrofit.Builder()

@ -1,4 +1,4 @@
package fr.iut.cinecool.API
package fr.iut.cinecool.API.THMDB
import retrofit2.http.GET
import retrofit2.http.Query

@ -1,7 +1,7 @@
package fr.iut.cinecool.API
package fr.iut.cinecool.API.THMDB
class Repository {
private val apiService = ApiClient.apiService
class MethodApiTHMDB {
private val apiService = ApiClientTHMDB.apiService
suspend fun getPopularMovies(apiKey: String, page: Int): MovieResponse {
return apiService.getPopularMovies(apiKey, page)

@ -1,18 +0,0 @@
package fr.iut.cinecool
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
class CinemaActivity : AppCompatActivity() {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cinema)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment
navController = navHostFragment.navController
}
}

@ -1,18 +0,0 @@
package fr.iut.cinecool
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class CinemaFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_cinema, container, false)
}
}

@ -1,32 +1,43 @@
package fr.iut.cinecool
import android.content.Intent
import android.os.Bundle
import android.widget.EditText
import android.widget.ImageView
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import android.Manifest
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val loginButton = findViewById<ImageView>(R.id.loginButton)
loginButton.setOnClickListener(){
login()
}
setContentView(R.layout.activity_master)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment
navController = navHostFragment.navController
}
private val REQUEST_LOCATION_PERMISSION = 1
/*ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,1)
)*/
private fun checkLocationPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_PERMISSION)
} else {
// Appeler searchCinemas() avec les coordonnées de l'utilisateur
}
}
fun login(){
val name = findViewById<EditText>(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<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQUEST_LOCATION_PERMISSION) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Appeler searchCinemas() avec les coordonnées de l'utilisateur
} else {
// Gérer le cas où la permission est refusée
}
}
}
}
}

@ -1,52 +0,0 @@
package fr.iut.cinecool
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() {
/*private var _binding: FragmentDetailMovieBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentDetailMovieBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Récupérez le film passé en argument
val movie: Movie? = arguments?.getParcelable("movie")
// Mettez à jour les vues avec les données du film
if (movie != null) {
binding.titreFilm.text = movie.title
binding.description.text = movie.overview
val imageUrl = "https://image.tmdb.org/t/p/w500${movie.poster_path}"
Glide.with(binding.afficheFilm.context)
.load(imageUrl)
.placeholder(R.drawable.imitation_game)
.into(binding.afficheFilm)
}
// Gérer le clic sur le bouton de retour
binding.backButton.setOnClickListener {
findNavController().popBackStack()
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}*/
}

@ -8,7 +8,7 @@ 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<Movie>) :
RecyclerView.Adapter<MovieAdapter.MovieViewHolder>() {
@ -34,7 +34,7 @@ class MovieAdapter(private var moviesList: List<Movie>) :
Glide.with(holder.itemView.context)
.load(imageUrl)
.placeholder(R.drawable.imitation_game)
.placeholder(R.drawable.no_pictures)
.into(holder.imageView)
holder.MovieName.text = movie.title

@ -0,0 +1,45 @@
package fr.iut.cinecool.fragments
import android.content.Context.LOCATION_SERVICE
import android.location.LocationManager
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.ImageView
import androidx.core.content.ContextCompat.getSystemService
import androidx.navigation.fragment.findNavController
import fr.iut.cinecool.R
import fr.iut.cinecool.databinding.FragmentLoginBinding
import fr.iut.cinecool.databinding.FragmentMoviesBinding
class LoginFragment : Fragment() {
private var locationManager : LocationManager? = null
private var _binding: FragmentLoginBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentLoginBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
//locationManager = this.context?.let { getSystemService(it,LOCATION_SERVICE) } as LocationManager?
super.onViewCreated(view, savedInstanceState)
val loginButton = view.findViewById<ImageView>(R.id.loginButton)
loginButton.setOnClickListener(){
login()
}
}
fun login(){
val name = view?.findViewById<EditText>(R.id.name)?.text
if (name != null) {
findNavController().navigate(R.id.login_to_movies)
}
}
}

@ -1,4 +1,4 @@
package fr.iut.cinecool
package fr.iut.cinecool.fragments
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
@ -6,18 +6,16 @@ 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.model.cineViewModel
import fr.iut.cinecool.R
import fr.iut.cinecool.viewModel.cineViewModel
class SessionFragment : Fragment() {
class MovieDetailFragment : Fragment() {
private val sharedViewModel: cineViewModel by activityViewModels()
override fun onCreateView(
@ -25,7 +23,7 @@ class SessionFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_session, container, false)
val view = inflater.inflate(R.layout.fragment_detail, container, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

@ -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,9 +9,11 @@ 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
import fr.iut.cinecool.viewModel.cineViewModel
class MoviesFragment : Fragment() {
private val sharedViewModel: cineViewModel by activityViewModels()

@ -1,3 +1,23 @@
package fr.iut.cinecool.model
data class Cinema (val id:Int, val latitude:Int, val longitude:Int, val city:String, val name:String, /*var movies:ArrayList<Movie>*/)
data class CinemaResult(
val lat: Double,
val lon: Double,
val display_name: String
)
data class RouteResult(
val routes: List<Route>
)
data class Route(
val segments: List<Segment>
)
data class Segment(
val steps: List<Step>
)
data class Step(
val instruction: String
)

@ -1,5 +1,47 @@
package fr.iut.cinecool.model
package fr.iut.cinecool.API.THMDB
import android.graphics.drawable.Drawable
data class Movie(val id:Int, val name:String, var mark:Int, val realisator:String, var duration: Double, val icon:Int)
import android.os.Parcel
import android.os.Parcelable
data class MovieResponse(
val page: Int,
val results: List<Movie>,
val total_pages: Int,
val total_results: Int
)
data class Movie(
val id: Int,
val title: String,
val poster_path: String?,
val overview: String
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString()!!,
parcel.readString(),
parcel.readString()!!
) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(id)
parcel.writeString(title)
parcel.writeString(poster_path)
parcel.writeString(overview)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Movie> {
override fun createFromParcel(parcel: Parcel): Movie {
return Movie(parcel)
}
override fun newArray(size: Int): Array<Movie?> {
return arrayOfNulls(size)
}
}
}

@ -1,5 +0,0 @@
package fr.iut.cinecool.model
import java.util.Date
data class Session(val id:Int, val date: Date, val beginHour:Int, val endingHour:Int, val room:String)

@ -1,16 +0,0 @@
package fr.iut.cinecool.model
import android.graphics.drawable.Drawable
import fr.iut.cinecool.R
import java.util.Date
class Stub( var sessions:ArrayList<Session> = ArrayList(),var movies:ArrayList<Movie> = ArrayList(),var cinemas:ArrayList<Cinema> = ArrayList()) {
fun loading(){
val date = Date(2023,3,12)
sessions.addAll(listOf(Session(0,date,14,16,"2A"),Session(1,date,4,6,"5B")))
movies.add(Movie(1,"trop bg",2,"Pas moi",2.0, R.drawable.no_pictures))
movies.add(Movie(0,"Imitation Game",4,"Moi",3.0,R.drawable.imitation_game))
cinemas.add(Cinema(0,12367,67894,"clf","CineJaude"))
cinemas.add(Cinema(1,87634,43567,"Aubière","CGR Le Paris"))
}
}

@ -1,16 +0,0 @@
package fr.iut.cinecool.model
import androidx.lifecycle.ViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
class cineViewModel : ViewModel() {
private val _cine = MutableLiveData<fr.iut.cinecool.API.Movie>()
val cine: LiveData<fr.iut.cinecool.API.Movie> = _cine
fun setCine(cine: fr.iut.cinecool.API.Movie) {
_cine.value = cine
}
}

@ -0,0 +1,17 @@
package fr.iut.cinecool.viewModel
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<Movie>()
val cine: LiveData<Movie> = _cine
fun setCine(cine: Movie) {
_cine.value = cine
}
}

@ -1,28 +1,28 @@
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.MethodApiTHMDB
class MovieViewModel : ViewModel() {
private val repository = Repository()
private val methodApiTHMDB = MethodApiTHMDB()
val popularMovies = MutableLiveData<List<Movie>>()
val searchResults = MutableLiveData<List<Movie>>()
fun getPopularMovies(apiKey: String, page: Int) {
viewModelScope.launch {
val movies = repository.getPopularMovies(apiKey, page)
val movies = methodApiTHMDB.getPopularMovies(apiKey, page)
popularMovies.postValue(movies.results)
}
}
fun searchMovies(apiKey: String, query: String, page: Int) {
viewModelScope.launch {
val movies = repository.searchMovies(apiKey, query, page)
val movies = methodApiTHMDB.searchMovies(apiKey, query, page)
searchResults.postValue(movies.results)
}
}

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CinemaActivity">
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment"

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CinemaFragment">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerCinemas"/>
</FrameLayout>

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SessionFragment">
tools:context=".fragments.MovieDetailFragment">
<ImageButton
android:id="@+id/returnButton"

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
<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"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
@ -18,13 +18,14 @@
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="300sp"
android:layout_marginBottom="100dp"
android:background="@drawable/login_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.821">
app:layout_constraintTop_toBottomOf="@+id/Logo"
app:layout_constraintVertical_bias="1.0">
<EditText
android:id="@+id/name"
@ -47,16 +48,17 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName"
app:layout_constraintTop_toBottomOf="@+id/name"
app:srcCompat="@drawable/connection_button" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/Logo"
android:background="@color/white"
android:layout_width="189dp"
android:layout_height="199dp"
app:layout_constraintBottom_toTopOf="@+id/constraintLayout"
android:layout_marginTop="60dp"
android:background="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

@ -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">
<ImageView
android:id="@+id/imageView"
android:layout_width="66dp"
@ -20,10 +20,12 @@
android:id="@+id/toolbar"
android:layout_width="211dp"
android:layout_height="27dp"
android:layout_marginTop="16dp"
android:background="?attr/colorPrimary"
app:layout_constraintEnd_toStartOf="@+id/settings"
app:layout_constraintHorizontal_bias="0.391"
app:layout_constraintStart_toEndOf="@+id/imageView"
tools:layout_editor_absoluteY="29dp"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints">
<androidx.appcompat.widget.SearchView
@ -31,7 +33,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
app:queryHint="Rechercher" />
app:queryHint="@string/research" />
</androidx.appcompat.widget.Toolbar>
@ -47,26 +49,27 @@
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp"
/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="All movies"
android:id="@+id/welcomeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:text="@string/welcome"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.534"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/toolbar"
app:layout_constraintVertical_bias="0.024" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerMovie"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="16dp"
app:layout_constraintBottom_toBottomOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:layout_constraintVertical_bias="1.0" />
app:layout_constraintTop_toBottomOf="@+id/welcomeTextView" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -3,17 +3,22 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/fragment_movies">
app:startDestination="@id/fragment_login">
<fragment
android:id="@+id/CinemaFragment"
android:name="fr.iut.cinecool.CinemaFragment"
android:label="Cinema Fragment"
tools:layout="@layout/fragment_cinema"/>
android:id="@+id/fragment_login"
android:name="fr.iut.cinecool.fragments.LoginFragment"
android:label="login_fragment"
tools:layout="@layout/fragment_login">
<action
android:id="@+id/login_to_movies"
app:destination="@id/fragment_movies" />
</fragment>
<fragment
android:id="@+id/fragment_movies"
android:name="fr.iut.cinecool.MoviesFragment"
android:name="fr.iut.cinecool.fragments.MoviesFragment"
android:label="@string/first_fragment_label"
tools:layout="@layout/fragment_movies">
@ -21,16 +26,13 @@
android:id="@+id/movies_to_sessions"
app:destination="@id/SessionFragment">
</action>
<action
android:id="@+id/movies_to_cinema"
app:destination="@id/CinemaFragment" />
</fragment>
<fragment
android:id="@+id/SessionFragment"
android:name="fr.iut.cinecool.SessionFragment"
android:name="fr.iut.cinecool.fragments.MovieDetailFragment"
android:label="SessionFragment"
tools:layout="@layout/fragment_session">
tools:layout="@layout/fragment_detail">
<action
android:id="@+id/action_SessionFragment_to_fragment_movies"
app:destination="@id/fragment_movies" />

@ -0,0 +1,16 @@
<resources>
<string name="app_name">CineCool</string>
<string name="title_activity_main">MainActivity</string>
<!-- Strings used for fragments for navigation -->
<string name="first_fragment_label">First Fragment</string>
<string name="second_fragment_label">Second Fragment</string>
<string name="next">Suivant</string>
<string name="previous">Précédent</string>
<string name="hello_first_fragment">Hello first fragment</string>
<string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
<string name="error_loading_movie">erreur de chargement des films</string>
<string name="tmdb_api_key">a97243d7813d31446f6c43284e6854d5</string>
<string name="welcome">Bienvenue dans CineCool</string>
<string name="research">Recherche</string>
</resources>

@ -11,4 +11,6 @@
<string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
<string name="error_loading_movie">erreur de chargement des films</string>
<string name="tmdb_api_key">a97243d7813d31446f6c43284e6854d5</string>
<string name="welcome">Welcome on CineCool</string>
<string name="research">Research</string>
</resources>

@ -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
}
Loading…
Cancel
Save