petit ménage

master
louwar 2 years ago
parent 3db51c3cb0
commit 32d629f879

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

@ -17,14 +17,12 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.CineCool" android:theme="@style/Theme.CineCool"
tools:targetApi="31"> tools:targetApi="31">
<activity
android:name=".CinemaActivity"
android:exported="false" />
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/title_activity_main" android:label="@string/title_activity_main"
android:theme="@style/Theme.CineCool.NoActionBar"> android:theme="@style/Theme.CineCool.NoActionBar"
tools:ignore="DuplicateActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

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

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

@ -1,4 +1,4 @@
package fr.iut.cinecool.API package fr.iut.cinecool.API.THMDB
import android.os.Parcel import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable

@ -1,7 +1,7 @@
package fr.iut.cinecool.API package fr.iut.cinecool.API.THMDB
class Repository { class Repository {
private val apiService = ApiClient.apiService private val apiService = ApiClientTHMDB.apiService
suspend fun getPopularMovies(apiKey: String, page: Int): MovieResponse { suspend fun getPopularMovies(apiKey: String, page: Int): MovieResponse {
return apiService.getPopularMovies(apiKey, page) 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,32 +1,17 @@
package fr.iut.cinecool package fr.iut.cinecool
import android.content.Intent
import android.os.Bundle
import android.widget.EditText
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_master)
val loginButton = findViewById<ImageView>(R.id.loginButton) val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment
loginButton.setOnClickListener(){ navController = navHostFragment.navController
login()
}
/*ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,1)
)*/
} }
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)
}
}
}
}

@ -8,7 +8,7 @@ import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import fr.iut.cinecool.R 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>) : class MovieAdapter(private var moviesList: List<Movie>) :
RecyclerView.Adapter<MovieAdapter.MovieViewHolder>() { RecyclerView.Adapter<MovieAdapter.MovieViewHolder>() {

@ -1,18 +0,0 @@
package fr.iut.cinecool.data
import fr.iut.cinecool.R
import fr.iut.cinecool.model.Cinema
import fr.iut.cinecool.model.Movie
import fr.iut.cinecool.model.Session
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,52 +1,51 @@
package fr.iut.cinecool.fragments package fr.iut.cinecool.fragments
import android.os.Bundle import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import fr.iut.cinecool.API.Movie import com.bumptech.glide.Glide
// import fr.iut.cinecool.databinding.FragmentMovieDetailBinding import fr.iut.cinecool.R
import fr.iut.cinecool.viewModel.cineViewModel
class MovieDetailFragment : Fragment() { class MovieDetailFragment : Fragment() {
/*private var _binding: FragmentDetailMovieBinding? = null private val sharedViewModel: cineViewModel by activityViewModels()
private val binding get() = _binding!!
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
_binding = FragmentDetailMovieBinding.inflate(inflater, container, false) // Inflate the layout for this fragment
return binding.root val view = inflater.inflate(R.layout.fragment_detail, container, false)
return view
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) init()
val button = view.findViewById<ImageButton>(R.id.returnButton)
// Récupérez le film passé en argument button.setOnClickListener {
val movie: Movie? = arguments?.getParcelable("movie") findNavController().navigate(R.id.action_SessionFragment_to_fragment_movies)
// 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()
} }
} }
private fun init() {
override fun onDestroyView() { requireView().findViewById<TextView>(R.id.title).text= sharedViewModel.cine.value?.title
super.onDestroyView() val desc = requireView().findViewById<TextView>(R.id.description)
_binding = null desc.text=sharedViewModel.cine.value?.overview
}*/ desc.isScrollContainer = true
desc.movementMethod = ScrollingMovementMethod()
val img=requireView().findViewById<ImageView>(R.id.afficheFilm)
val imageUrl = "https://image.tmdb.org/t/p/w500${sharedViewModel.cine.value?.poster_path}"
Glide.with(this.requireContext())
.load(imageUrl)
.placeholder(R.drawable.no_pictures)
.into(img)
}
} }

@ -1,51 +0,0 @@
package fr.iut.cinecool.fragments
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
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.R
import fr.iut.cinecool.viewModel.cineViewModel
class SessionFragment : Fragment() {
private val sharedViewModel: cineViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_session, container, false)
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
init()
val button = view.findViewById<ImageButton>(R.id.returnButton)
button.setOnClickListener {
findNavController().navigate(R.id.action_SessionFragment_to_fragment_movies)
}
}
private fun init() {
requireView().findViewById<TextView>(R.id.title).text= sharedViewModel.cine.value?.title
val desc = requireView().findViewById<TextView>(R.id.description)
desc.text=sharedViewModel.cine.value?.overview
desc.isScrollContainer = true
desc.movementMethod = ScrollingMovementMethod()
val img=requireView().findViewById<ImageView>(R.id.afficheFilm)
val imageUrl = "https://image.tmdb.org/t/p/w500${sharedViewModel.cine.value?.poster_path}"
Glide.with(this.requireContext())
.load(imageUrl)
.placeholder(R.drawable.no_pictures)
.into(img)
}
}

@ -1,3 +1,23 @@
package fr.iut.cinecool.model 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
)

@ -3,13 +3,14 @@ package fr.iut.cinecool.viewModel
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import fr.iut.cinecool.API.THMDB.Movie
class cineViewModel : ViewModel() { class cineViewModel : ViewModel() {
private val _cine = MutableLiveData<fr.iut.cinecool.API.Movie>() private val _cine = MutableLiveData<Movie>()
val cine: LiveData<fr.iut.cinecool.API.Movie> = _cine val cine: LiveData<Movie> = _cine
fun setCine(cine: fr.iut.cinecool.API.Movie) { fun setCine(cine: Movie) {
_cine.value = cine _cine.value = cine
} }

@ -4,8 +4,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import fr.iut.cinecool.API.Movie import fr.iut.cinecool.API.THMDB.Movie
import fr.iut.cinecool.API.Repository import fr.iut.cinecool.API.THMDB.Repository
class MovieViewModel : ViewModel() { class MovieViewModel : ViewModel() {
private val repository = Repository() private val repository = Repository()

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<ImageView
android:id="@+id/Background"
android:layout_width="3000px"
android:layout_height="3000px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/background" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="300sp"
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">
<EditText
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="17"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.49"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.235" />
<ImageView
android:id="@+id/loginButton"
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName"
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"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/cinema" />
</androidx.constraintlayout.widget.ConstraintLayout>

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

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

@ -28,9 +28,9 @@
<fragment <fragment
android:id="@+id/SessionFragment" android:id="@+id/SessionFragment"
android:name="fr.iut.cinecool.fragments.SessionFragment" android:name="fr.iut.cinecool.fragments.MovieDetailFragment"
android:label="SessionFragment" android:label="SessionFragment"
tools:layout="@layout/fragment_session"> tools:layout="@layout/fragment_detail">
<action <action
android:id="@+id/action_SessionFragment_to_fragment_movies" android:id="@+id/action_SessionFragment_to_fragment_movies"
app:destination="@id/fragment_movies" /> app:destination="@id/fragment_movies" />

@ -2,5 +2,5 @@
plugins { plugins {
id 'com.android.application' version '7.4.2' apply false id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' 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