diff --git a/Cineapp/.idea/inspectionProfiles/Project_Default.xml b/Cineapp/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..bd2a505 --- /dev/null +++ b/Cineapp/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,29 @@ + + + + \ No newline at end of file diff --git a/Cineapp/app/build.gradle b/Cineapp/app/build.gradle index 671976d..0254c11 100644 --- a/Cineapp/app/build.gradle +++ b/Cineapp/app/build.gradle @@ -30,6 +30,12 @@ android { kotlinOptions { jvmTarget = '1.8' } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.4.0-alpha01" + } } dependencies { @@ -44,4 +50,18 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + + + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.0' + implementation 'androidx.navigation:navigation-compose:2.4.0-alpha10' + implementation 'androidx.compose.ui:ui:1.1.1' + implementation 'androidx.compose.material:material-icons-core:1.1.1' + implementation 'androidx.compose.material:material-icons-extended:1.1.1' + + implementation "androidx.compose.ui:ui:1.1.1" + implementation "androidx.compose.ui:ui-tooling:1.1.1" + implementation "androidx.compose.material:material:1.1.1" + implementation "androidx.compose.material:material-ripple:1.1.1" + } \ No newline at end of file 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 85fe622..2c27bf3 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/MainActivity.kt @@ -3,16 +3,23 @@ package com.example.cinapp import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.TextView +import androidx.activity.compose.setContent +import androidx.compose.material.MaterialTheme import com.android.volley.VolleyError import com.android.volley.toolbox.StringRequest import com.android.volley.toolbox.Volley import com.example.cinapp.model.Movie +import com.example.cinapp.navigation.MainScreen + class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - + //setContentView(R.layout.activity_main) + setContent { + MaterialTheme { MainScreen() } + } + /* // TextView val textView = findViewById(R.id.text) @@ -34,24 +41,13 @@ class MainActivity : AppCompatActivity() { // Add the request to the RequestQueue. queue.add(stringRequest) - /*companion object { - fun fromJson(json: JSONObject): Movie { - return Movie( - json.getInt("id"), - json.getString("name"), - json.getString("backdrop_path"), - json.getString("release_date"), - json.getJSONArray("origin_country").toList(), - json.getString("original_language"), - json.getString("original_name"), - json.getString("overview"), - json.getDouble("popularity"), - json.getString("poster_path"), - json.getDouble("vote_average"), - json.getInt("vote_count"), - json.getJSONArray("genre_ids").toList() - ) - } - }*/ + + //bottom navigation with jetpack compose + + */ + + + + } } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SeasonDAO.kt b/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SeasonDAO.kt index f620409..8863542 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SeasonDAO.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SeasonDAO.kt @@ -1,7 +1,20 @@ package com.example.cinapp.Room.DAO import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Query +import com.example.cinapp.Room.Entity.SeasonEntity @Dao interface SeasonDAO { + @Query("SELECT * FROM season") + fun getAll(): List + + @Query("SELECT * FROM season WHERE id = :id ") + fun getSeasonById(id: Int): SeasonEntity + + @Delete + fun deleteSeason(season: SeasonEntity) + + //@Query("DELETE FROM season WHERE ") } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SerieDAO.kt b/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SerieDAO.kt index 3013c6c..aad0887 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SerieDAO.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/Room/DAO/SerieDAO.kt @@ -26,12 +26,4 @@ interface SerieDAO { @Query("SELECT * FROM serie WHERE :seasonId IN (seasonsIds)") fun findBySeason(seasonId: Int): SerieEntity - @Query("SELECT * FROM serie " + - "WHERE :episodeId IN (" + - "SELECT episodesIds FROM season WHERE id IN (" + - "SELECT seasonsIds FROM serie WHERE :episodeId IN (" + - "SELECT episodesIds FROM season)))") - fun findByEpisode(episodeId: Int): SerieEntity - - } \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/EpisodeEntity.kt b/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/EpisodeEntity.kt index 8d368a1..eebf7e8 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/EpisodeEntity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/EpisodeEntity.kt @@ -11,7 +11,8 @@ data class EpisodeEntity ( var stillPath: String, var episodeNumber: Int, var seasonNumber: Int, - var airDate: String, + val releaseDate: String, var voteAverage: Double, - var voteCount: Int + var voteCount: Int, + var runtime: Int ) \ No newline at end of file diff --git a/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/SeasonEntity.kt b/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/SeasonEntity.kt index 9cbee77..cfc9a47 100644 --- a/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/SeasonEntity.kt +++ b/Cineapp/app/src/main/java/com/example/cinapp/Room/Entity/SeasonEntity.kt @@ -10,5 +10,6 @@ data class SeasonEntity ( var overview: String, var posterPath: String, var seasonNumber: Int, - var episodesIds: List + var episodesIds: List, + val releaseDate: String ) \ 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 new file mode 100644 index 0000000..792e630 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavGraph.kt @@ -0,0 +1,24 @@ +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 new file mode 100644 index 0000000..3f2891f --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/BottomNavigation.kt @@ -0,0 +1,30 @@ +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 new file mode 100644 index 0000000..085cfee --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/MainScreen.kt @@ -0,0 +1,78 @@ +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 new file mode 100644 index 0000000..2bf64ae --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Movie.kt @@ -0,0 +1,8 @@ +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/Search.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Search.kt new file mode 100644 index 0000000..16a2a40 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Search.kt @@ -0,0 +1,8 @@ +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/Serie.kt b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Serie.kt new file mode 100644 index 0000000..5b2c049 --- /dev/null +++ b/Cineapp/app/src/main/java/com/example/cinapp/navigation/Serie.kt @@ -0,0 +1,8 @@ +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/res/drawable/ic_baseline_live_tv_24.xml b/Cineapp/app/src/main/res/drawable/ic_baseline_live_tv_24.xml new file mode 100644 index 0000000..cdd0f67 --- /dev/null +++ b/Cineapp/app/src/main/res/drawable/ic_baseline_live_tv_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Cineapp/app/src/main/res/drawable/ic_baseline_movie_24.xml b/Cineapp/app/src/main/res/drawable/ic_baseline_movie_24.xml new file mode 100644 index 0000000..a0e2d16 --- /dev/null +++ b/Cineapp/app/src/main/res/drawable/ic_baseline_movie_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Cineapp/app/src/main/res/drawable/ic_baseline_search_24.xml b/Cineapp/app/src/main/res/drawable/ic_baseline_search_24.xml new file mode 100644 index 0000000..a5687c6 --- /dev/null +++ b/Cineapp/app/src/main/res/drawable/ic_baseline_search_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Cineapp/app/src/main/res/layout/main_windows.xml b/Cineapp/app/src/main/res/layout/main_windows.xml new file mode 100644 index 0000000..e8ba097 --- /dev/null +++ b/Cineapp/app/src/main/res/layout/main_windows.xml @@ -0,0 +1,37 @@ + + + + + +