From e6a55656dc7e2a979fc0fa737661174b165ec0c6 Mon Sep 17 00:00:00 2001 From: Bastien Jacquelin Date: Fri, 17 Mar 2023 11:04:31 +0100 Subject: [PATCH 1/5] adding 3 fragment --- CineCool/app/build.gradle | 17 ++++++ .../java/fr/iut/cinecool/CinemaActivity.kt | 2 + .../java/fr/iut/cinecool/CinemaFragment.kt | 59 +++++++++++++++++++ .../java/fr/iut/cinecool/MoviesFragment.kt | 59 +++++++++++++++++++ .../java/fr/iut/cinecool/SessionFragment.kt | 59 +++++++++++++++++++ .../java/fr/iut/cinecool/adapter/MyAdapter.kt | 4 ++ .../java/fr/iut/cinecool/model/Session.kt | 2 +- .../src/main/res/layout/activity_cinema.xml | 18 +++--- .../src/main/res/layout/fragment_cinema.xml | 13 ++++ .../src/main/res/layout/fragment_movies.xml | 14 +++++ .../src/main/res/layout/fragment_session.xml | 14 +++++ CineCool/app/src/main/res/layout/movie.xml | 11 ++++ .../app/src/main/res/navigation/nav_graph.xml | 34 ++++++----- CineCool/app/src/main/res/values/strings.xml | 2 + 14 files changed, 286 insertions(+), 22 deletions(-) create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt create mode 100644 CineCool/app/src/main/java/fr/iut/cinecool/adapter/MyAdapter.kt create mode 100644 CineCool/app/src/main/res/layout/fragment_cinema.xml create mode 100644 CineCool/app/src/main/res/layout/fragment_movies.xml create mode 100644 CineCool/app/src/main/res/layout/fragment_session.xml create mode 100644 CineCool/app/src/main/res/layout/movie.xml diff --git a/CineCool/app/build.gradle b/CineCool/app/build.gradle index 8154b2c..e5763d7 100644 --- a/CineCool/app/build.gradle +++ b/CineCool/app/build.gradle @@ -47,4 +47,21 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + + // Java language implementation + implementation("androidx.navigation:navigation-fragment:2.5.3") + implementation("androidx.navigation:navigation-ui:2.5.3") + + // Kotlin + implementation("androidx.navigation:navigation-fragment-ktx:2.5.3") + implementation("androidx.navigation:navigation-ui-ktx:2.5.3") + + // Feature module Support + implementation("androidx.navigation:navigation-dynamic-features-fragment:2.5.3") + + // Testing Navigation + androidTestImplementation("androidx.navigation:navigation-testing:2.5.3") + + // Jetpack Compose Integration + implementation("androidx.navigation:navigation-compose:2.5.3") } \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt index 7781066..6ae3a70 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt @@ -1,5 +1,6 @@ package fr.iut.cinecool +import android.app.Activity import androidx.appcompat.app.AppCompatActivity import android.os.Bundle @@ -7,5 +8,6 @@ class CinemaActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cinema) + Activity.findNavController(viewId: Int) } } \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt new file mode 100644 index 0000000..4cfa2be --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt @@ -0,0 +1,59 @@ +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 + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [CinemaFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class CinemaFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + 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) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment CinemaFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + CinemaFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt new file mode 100644 index 0000000..76ed5a0 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt @@ -0,0 +1,59 @@ +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 + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [MoviesFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class MoviesFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_movies, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment MoviesFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + MoviesFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt new file mode 100644 index 0000000..8fd1924 --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/SessionFragment.kt @@ -0,0 +1,59 @@ +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 + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [SessionFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class SessionFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_session, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment SessionFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + SessionFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MyAdapter.kt b/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MyAdapter.kt new file mode 100644 index 0000000..168f4ab --- /dev/null +++ b/CineCool/app/src/main/java/fr/iut/cinecool/adapter/MyAdapter.kt @@ -0,0 +1,4 @@ +package fr.iut.cinecool.adapter + +class MyAdapter { +} \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/model/Session.kt b/CineCool/app/src/main/java/fr/iut/cinecool/model/Session.kt index 902981f..f60ddac 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/model/Session.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/model/Session.kt @@ -2,4 +2,4 @@ package fr.iut.cinecool.model import java.util.Date -class Session(val id:Int, val date: Date, val beginHour:Int, val endingHour:Int, val room:String) \ No newline at end of file +data class Session(val id:Int, val date: Date, val beginHour:Int, val endingHour:Int, val room:String) \ No newline at end of file diff --git a/CineCool/app/src/main/res/layout/activity_cinema.xml b/CineCool/app/src/main/res/layout/activity_cinema.xml index 288abc0..6cf60db 100644 --- a/CineCool/app/src/main/res/layout/activity_cinema.xml +++ b/CineCool/app/src/main/res/layout/activity_cinema.xml @@ -5,12 +5,16 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".CinemaActivity"> - - + app:defaultNavHost="true" + app:navGraph="@navigation/nav_graph" /> + \ 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 new file mode 100644 index 0000000..8dc1681 --- /dev/null +++ b/CineCool/app/src/main/res/layout/fragment_cinema.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/CineCool/app/src/main/res/layout/fragment_movies.xml b/CineCool/app/src/main/res/layout/fragment_movies.xml new file mode 100644 index 0000000..034bff2 --- /dev/null +++ b/CineCool/app/src/main/res/layout/fragment_movies.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/CineCool/app/src/main/res/layout/fragment_session.xml b/CineCool/app/src/main/res/layout/fragment_session.xml new file mode 100644 index 0000000..ca40073 --- /dev/null +++ b/CineCool/app/src/main/res/layout/fragment_session.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/CineCool/app/src/main/res/layout/movie.xml b/CineCool/app/src/main/res/layout/movie.xml new file mode 100644 index 0000000..d0101ce --- /dev/null +++ b/CineCool/app/src/main/res/layout/movie.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/CineCool/app/src/main/res/navigation/nav_graph.xml b/CineCool/app/src/main/res/navigation/nav_graph.xml index ca33455..419b35f 100644 --- a/CineCool/app/src/main/res/navigation/nav_graph.xml +++ b/CineCool/app/src/main/res/navigation/nav_graph.xml @@ -3,26 +3,32 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph" - app:startDestination="@id/FirstFragment"> - + app:startDestination="@id/CinemaFragment"> - + android:id="@+id/CinemaFragment" + android:name="fr.iut.cinecool.CinemaFragment" + android:label="Cinema Fragment" + tools:layout="@layout/fragment_cinema"> + app:destination="@id/fragment_movies"> + + android:id="@+id/fragment_movies" + android:name="fr.iut.cinecool.MoviesFragment" + android:label="@string/first_fragment_label" + tools:layout="@layout/fragment_movies"> + android:id="@+id/action_FirstFragment_to_SessionFragment" + app:destination="@id/SessionFragment"> + + + \ No newline at end of file diff --git a/CineCool/app/src/main/res/values/strings.xml b/CineCool/app/src/main/res/values/strings.xml index 02dd242..4a365df 100644 --- a/CineCool/app/src/main/res/values/strings.xml +++ b/CineCool/app/src/main/res/values/strings.xml @@ -9,4 +9,6 @@ Hello first fragment Hello second fragment. Arg: %1$s + + Hello blank fragment \ No newline at end of file From 9c0891693ef2b78e7c427e643e7ec34f4043ae0a Mon Sep 17 00:00:00 2001 From: Bastien Jacquelin Date: Sat, 18 Mar 2023 12:38:19 +0100 Subject: [PATCH 2/5] moving between fragments --- CineCool/app/build.gradle | 18 +++---- .../java/fr/iut/cinecool/CinemaActivity.kt | 7 ++- .../java/fr/iut/cinecool/CinemaFragment.kt | 41 --------------- .../java/fr/iut/cinecool/MoviesFragment.kt | 51 +++---------------- .../java/fr/iut/cinecool/SessionFragment.kt | 50 +++--------------- .../src/main/res/layout/activity_cinema.xml | 14 ++--- .../src/main/res/layout/fragment_cinema.xml | 6 +-- .../src/main/res/layout/fragment_movies.xml | 30 +++++++++-- .../src/main/res/layout/fragment_session.xml | 19 ++++--- .../app/src/main/res/navigation/nav_graph.xml | 7 ++- 10 files changed, 83 insertions(+), 160 deletions(-) diff --git a/CineCool/app/build.gradle b/CineCool/app/build.gradle index e5763d7..6981a31 100644 --- a/CineCool/app/build.gradle +++ b/CineCool/app/build.gradle @@ -9,7 +9,7 @@ android { defaultConfig { applicationId "fr.iut.cinecool" - minSdk 19 + minSdk 21 targetSdk 33 versionCode 1 versionName "1.0" @@ -37,16 +37,16 @@ android { dependencies { - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.3' - implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1' - implementation 'androidx.navigation:navigation-ui-ktx:2.4.1' + implementation 'androidx.core:core-ktx:1.9.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' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' // Java language implementation implementation("androidx.navigation:navigation-fragment:2.5.3") diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt index 6ae3a70..7ad53b5 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaActivity.kt @@ -3,11 +3,16 @@ 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) - Activity.findNavController(viewId: Int) + val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment + navController = navHostFragment.navController } + } \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt index 4cfa2be..2bf909b 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/CinemaFragment.kt @@ -6,29 +6,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" -/** - * A simple [Fragment] subclass. - * Use the [CinemaFragment.newInstance] factory method to - * create an instance of this fragment. - */ class CinemaFragment : Fragment() { - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -36,24 +15,4 @@ class CinemaFragment : Fragment() { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_cinema, container, false) } - - companion object { - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment CinemaFragment. - */ - // TODO: Rename and change types and number of parameters - @JvmStatic - fun newInstance(param1: String, param2: String) = - CinemaFragment().apply { - arguments = Bundle().apply { - putString(ARG_PARAM1, param1) - putString(ARG_PARAM2, param2) - } - } - } } \ No newline at end of file diff --git a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt b/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt index 76ed5a0..dbb260f 100644 --- a/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt +++ b/CineCool/app/src/main/java/fr/iut/cinecool/MoviesFragment.kt @@ -5,55 +5,20 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button +import androidx.navigation.fragment.findNavController -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" - -/** - * A simple [Fragment] subclass. - * Use the [MoviesFragment.newInstance] factory method to - * create an instance of this fragment. - */ class MoviesFragment : Fragment() { - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_movies, container, false) - } - - companion object { - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment MoviesFragment. - */ - // TODO: Rename and change types and number of parameters - @JvmStatic - fun newInstance(param1: String, param2: String) = - MoviesFragment().apply { - arguments = Bundle().apply { - putString(ARG_PARAM1, param1) - putString(ARG_PARAM2, param2) - } - } + val view = inflater.inflate(R.layout.fragment_movies, container, false) + val button = view.findViewById