diff --git a/Cineapp/app/build.gradle b/Cineapp/app/build.gradle index 0254c11..3d2adef 100644 --- a/Cineapp/app/build.gradle +++ b/Cineapp/app/build.gradle @@ -23,6 +23,11 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + buildFeatures { + viewBinding true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 diff --git a/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt b/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt index 2c27bf3..d8788cb 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt @@ -5,49 +5,39 @@ import android.os.Bundle import android.widget.TextView import androidx.activity.compose.setContent import androidx.compose.material.MaterialTheme +import androidx.fragment.app.Fragment import com.android.volley.VolleyError import com.android.volley.toolbox.StringRequest import com.android.volley.toolbox.Volley +import com.example.cinapp.databinding.ActivityMainBinding import com.example.cinapp.model.Movie -import com.example.cinapp.navigation.MainScreen +import com.example.cinapp.navigation.MovieFragment +import com.example.cinapp.navigation.SearchFragment +import com.example.cinapp.navigation.SerieFragment class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - //setContentView(R.layout.activity_main) - setContent { - MaterialTheme { MainScreen() } - } - /* - // TextView - val textView = findViewById(R.id.text) - // Instantiate the RequestQueue. - val queue = Volley.newRequestQueue(this) - val url = "https://api.themoviedb.org/3/search/tv?api_key=e53e59cf1e29b9afff93d9ca1208f0cf&query=One%20Piece&language=fr" + private lateinit var binding : ActivityMainBinding - // Request a string response from the provided URL. - val stringRequest = StringRequest(url, - { response -> - // Display the first 500 characters of the response string. - textView.text = "Response is: ${response.substring(0, 500)}" - }, - { error: VolleyError -> - textView.text = "That didn't work!" + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + replaceFragment(MovieFragment()) + + binding.bottomNavigation.setOnItemSelectedListener { + when(it.itemId){ + R.id.movie -> replaceFragment(MovieFragment()) + R.id.serie -> replaceFragment(SerieFragment()) + R.id.search -> replaceFragment(SearchFragment()) + else -> false } - ) - - // Add the request to the RequestQueue. - queue.add(stringRequest) - - - //bottom navigation with jetpack compose - - */ - - - + true + } + } + private fun replaceFragment(fragment: Fragment){ + supportFragmentManager.beginTransaction().replace(R.id.frame_layout, fragment).commit() } } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavGraph.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavGraph.kt deleted file mode 100644 index 792e630..0000000 --- a/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavGraph.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.example.cinapp.navigation - -import androidx.compose.runtime.Composable -import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable - -@Composable -fun BottomNavGraph(navController: NavHostController){ - NavHost( - navController = navController, - startDestination = BottomNavigation.Movie.route - ) { - composable(BottomNavigation.Movie.route) { - MovieScreen() - } - composable(BottomNavigation.Search.route) { - SearchScreen() - } - composable(BottomNavigation.Serie.route) { - SerieScreen() - } - } -} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavigation.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavigation.kt deleted file mode 100644 index 3f2891f..0000000 --- a/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavigation.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.cinapp.navigation - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Home -import androidx.compose.material.icons.filled.LiveTv -import androidx.compose.material.icons.filled.Movie -import androidx.compose.material.icons.filled.Search -import androidx.compose.ui.graphics.vector.ImageVector - -sealed class BottomNavigation( - val route: String, - val icon: ImageVector, - val title: String -) { - object Movie : BottomNavigation( - route = "movie", - //icon = R.drawable.ic_baseline_movie_24, - icon = Icons.Filled.Movie, - title = "Movie") - object Search : BottomNavigation( - route = "search", - //icon = R.drawable.ic_baseline_search_24, - icon = Icons.Filled.Search, - title = "Search") - object Serie : BottomNavigation( - route = "serie", - //icon = R.drawable.ic_baseline_live_tv_24, - icon = Icons.Filled.LiveTv, - title = "Serie") -} diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/MainScreen.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/MainScreen.kt deleted file mode 100644 index 085cfee..0000000 --- a/Cineapp/app/src/main/java/com/example/cinapp/navigation/MainScreen.kt +++ /dev/null @@ -1,78 +0,0 @@ -package com.example.cinapp.navigation - -import androidx.compose.foundation.layout.RowScope -import androidx.compose.foundation.layout.padding -import androidx.compose.material.* -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.navigation.compose.rememberNavController -import androidx.compose.ui.Modifier -import androidx.navigation.NavDestination -import androidx.navigation.NavDestination.Companion.hierarchy -import androidx.navigation.NavGraph.Companion.findStartDestination -import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.ui.setupWithNavController - -@Composable -fun MainScreen() { - val navController = rememberNavController() - Scaffold( - bottomBar = { BottomBar(navController = navController) } - ) { - BottomNavGraph(navController = navController) - } -} - -@Composable -fun BottomBar(navController: NavHostController) { - val screens = listOf( - BottomNavigation.Movie, - BottomNavigation.Serie, - BottomNavigation.Search, - ) - val navBackStackEntry by navController.currentBackStackEntryAsState() - val currentDestination = navBackStackEntry?.destination - - BottomNavigation { - screens.forEach { screen -> - AddItem( - screen = screen, - currentDestination = currentDestination, - navController = navController - ) - } - } -} - -@Composable -fun RowScope.AddItem( - screen: BottomNavigation, - currentDestination: NavDestination?, - navController: NavHostController -) { - BottomNavigationItem( - label = { - Text(text = screen.title) - }, - icon = { - Icon( - imageVector = screen.icon, - contentDescription = "Navigation Icon" - ) - }, - selected = currentDestination?.hierarchy?.any { - it.route == screen.route - } == true, - unselectedContentColor = LocalContentColor.current.copy(alpha = ContentAlpha.disabled), - onClick = { - navController.navigate(screen.route) { - popUpTo(navController.graph.findStartDestination().id) - launchSingleTop = true - } - } - ) -} diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/Movie.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Movie.kt deleted file mode 100644 index 2bf64ae..0000000 --- a/Cineapp/app/src/main/java/com/example/cinapp/navigation/Movie.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.cinapp.navigation - -import androidx.compose.runtime.Composable - -@Composable -fun MovieScreen() { - -} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/MovieFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/MovieFragment.kt new file mode 100644 index 0000000..442ea65 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/MovieFragment.kt @@ -0,0 +1,60 @@ +package com.example.cinapp.navigation + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.example.cinapp.R + +// 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 [MovieFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class MovieFragment : 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_movie, 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 MovieFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + MovieFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/Search.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Search.kt deleted file mode 100644 index 16a2a40..0000000 --- a/Cineapp/app/src/main/java/com/example/cinapp/navigation/Search.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.cinapp.navigation - -import androidx.compose.runtime.Composable - -@Composable -fun SerieScreen() { - -} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/SearchFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/SearchFragment.kt new file mode 100644 index 0000000..bd4f5a2 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/SearchFragment.kt @@ -0,0 +1,60 @@ +package com.example.cinapp.navigation + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.example.cinapp.R + +// 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 [SearchFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class SearchFragment : 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_search, 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 SearchFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + SearchFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/Serie.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Serie.kt deleted file mode 100644 index 5b2c049..0000000 --- a/Cineapp/app/src/main/java/com/example/cinapp/navigation/Serie.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.cinapp.navigation - -import androidx.compose.runtime.Composable - -@Composable -fun SearchScreen() { - -} \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/navigation/SerieFragment.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/SerieFragment.kt new file mode 100644 index 0000000..aee8c25 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/SerieFragment.kt @@ -0,0 +1,60 @@ +package com.example.cinapp.navigation + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.example.cinapp.R + +// 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 [SerieFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class SerieFragment : 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_serie, 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 SerieFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + SerieFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/Cineapp/app/src/main/res/layout/activity_main.xml b/Cineapp/app/src/main/res/layout/activity_main.xml index 2144127..3a407ec 100644 --- a/Cineapp/app/src/main/res/layout/activity_main.xml +++ b/Cineapp/app/src/main/res/layout/activity_main.xml @@ -6,14 +6,24 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - + + + + + app:menu="@menu/bottom_nav" /> \ No newline at end of file diff --git a/Cineapp/app/src/main/res/layout/fragment_movie.xml b/Cineapp/app/src/main/res/layout/fragment_movie.xml new file mode 100644 index 0000000..e09bd13 --- /dev/null +++ b/Cineapp/app/src/main/res/layout/fragment_movie.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/Cineapp/app/src/main/res/layout/fragment_search.xml b/Cineapp/app/src/main/res/layout/fragment_search.xml new file mode 100644 index 0000000..35d335f --- /dev/null +++ b/Cineapp/app/src/main/res/layout/fragment_search.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/Cineapp/app/src/main/res/layout/fragment_serie.xml b/Cineapp/app/src/main/res/layout/fragment_serie.xml new file mode 100644 index 0000000..e937f28 --- /dev/null +++ b/Cineapp/app/src/main/res/layout/fragment_serie.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/Cineapp/app/src/main/res/layout/main_windows.xml b/Cineapp/app/src/main/res/layout/main_windows.xml deleted file mode 100644 index e8ba097..0000000 --- a/Cineapp/app/src/main/res/layout/main_windows.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - -