From 0cc8396c17eeb615ae9e913b73b89723fdab4172 Mon Sep 17 00:00:00 2001 From: DongChyeon Date: Sun, 31 Mar 2024 23:08:01 +0900 Subject: [PATCH] =?UTF-8?q?Feat=20:=20app=20=EB=AA=A8=EB=93=88=EC=97=90=20?= =?UTF-8?q?feature=20=EB=AA=A8=EB=93=88=20=EB=84=A4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EA=B7=B8=EB=9E=98=ED=94=84=20=EB=B0=94?= =?UTF-8?q?=EC=9D=B8=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 6 +++ .../java/com/dev/briefing/BreifingNavHost.kt | 8 ---- .../main/java/com/dev/briefing/BriefingApp.kt | 41 +++++++++++++++++++ .../java/com/dev/briefing/BriefingAppState.kt | 40 ++++++++++++++++++ .../java/com/dev/briefing/BriefingNavHost.kt | 35 ++++++++++++++++ .../java/com/dev/briefing/MainActivity.kt | 23 +---------- feature/bookmark/build.gradle.kts | 1 + .../feature/bookmark/BookmarkNavigation.kt | 8 +++- .../app/feature/bookmark/BookmarkScreen.kt | 12 ++++-- feature/home/build.gradle.kts | 1 + .../app/feature/home/HomeNavigation.kt | 8 +++- .../app/feature/home/HomeScreen.kt | 14 +++++-- feature/newsdetail/build.gradle.kts | 1 + .../newsdetail/NewsDetailNavigation.kt | 8 +++- .../feature/newsdetail/NewsDetailScreen.kt | 12 ++++-- feature/setting/build.gradle.kts | 1 + .../app/feature/setting/SettingNavigation.kt | 8 +++- .../app/feature/setting/SettingScreen.kt | 12 ++++-- 18 files changed, 189 insertions(+), 50 deletions(-) delete mode 100644 app/src/main/java/com/dev/briefing/BreifingNavHost.kt create mode 100644 app/src/main/java/com/dev/briefing/BriefingApp.kt create mode 100644 app/src/main/java/com/dev/briefing/BriefingAppState.kt create mode 100644 app/src/main/java/com/dev/briefing/BriefingNavHost.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 055f816..0c2b510 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,10 +11,16 @@ android { dependencies { implementation(projects.core.designsystem) + implementation(projects.core.common) + implementation(projects.feature.home) + implementation(projects.feature.bookmark) + implementation(projects.feature.newsdetail) + implementation(projects.feature.setting) implementation(libs.androidx.appcompat) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) + implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.compose.foundation) implementation(libs.androidx.compose.ui.tooling.preview) } \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/BreifingNavHost.kt b/app/src/main/java/com/dev/briefing/BreifingNavHost.kt deleted file mode 100644 index 5c24c7e..0000000 --- a/app/src/main/java/com/dev/briefing/BreifingNavHost.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.dev.briefing - -import androidx.compose.runtime.Composable - -@Composable -fun BriefingNavHost() { - -} \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/BriefingApp.kt b/app/src/main/java/com/dev/briefing/BriefingApp.kt new file mode 100644 index 0000000..f8f6a98 --- /dev/null +++ b/app/src/main/java/com/dev/briefing/BriefingApp.kt @@ -0,0 +1,41 @@ +package com.dev.briefing + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Snackbar +import androidx.compose.material3.SnackbarData +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun BriefingApp( + appState: BriefingAppState = rememberBriefingAppState() +) { + Scaffold( + snackbarHost = { + SnackbarHost( + hostState = appState.snackbarHostState, + snackbar = { data: SnackbarData -> + Snackbar( + modifier = Modifier.padding( + bottom = 30.dp, + start = 20.dp, + end = 20.dp + ) + ) { + Text(text = data.visuals.message) + } + } + ) + }, + content = { innerPadding -> + BriefingNavHost( + modifier = Modifier.padding(innerPadding), + appState = appState + ) + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/BriefingAppState.kt b/app/src/main/java/com/dev/briefing/BriefingAppState.kt new file mode 100644 index 0000000..cb24618 --- /dev/null +++ b/app/src/main/java/com/dev/briefing/BriefingAppState.kt @@ -0,0 +1,40 @@ +package com.dev.briefing + +import androidx.compose.material3.BottomSheetScaffoldState +import androidx.compose.material3.SnackbarHostState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +@Composable +fun rememberBriefingAppState( + navController: NavHostController = rememberNavController(), + snackbarHostState: SnackbarHostState = remember { SnackbarHostState() }, + scope: CoroutineScope = rememberCoroutineScope() +): BriefingAppState { + return remember { + BriefingAppState( + navController, + snackbarHostState, + scope + ) + } +} + +@Stable +class BriefingAppState( + val navController: NavHostController, + val snackbarHostState: SnackbarHostState, + val scope: CoroutineScope +) { + fun showSnackBar(message: String) { + scope.launch { + snackbarHostState.showSnackbar(message) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/BriefingNavHost.kt b/app/src/main/java/com/dev/briefing/BriefingNavHost.kt new file mode 100644 index 0000000..0785c24 --- /dev/null +++ b/app/src/main/java/com/dev/briefing/BriefingNavHost.kt @@ -0,0 +1,35 @@ +package com.dev.briefing + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import store.newsbriefing.app.feature.bookmark.bookmarkScreen +import store.newsbriefing.app.feature.home.homeRoute +import store.newsbriefing.app.feature.home.homeScreen +import store.newsbriefing.app.feature.newsdetail.newsDetailScreen +import store.newsbriefing.app.feature.setting.settingScreen + +@Composable +fun BriefingNavHost( + modifier: Modifier = Modifier, + appState: BriefingAppState +) { + NavHost( + modifier = modifier, + navController = appState.navController, + startDestination = homeRoute + ) { + homeScreen( + showSnackbar = appState::showSnackBar + ) + bookmarkScreen( + showSnackbar = appState::showSnackBar + ) + newsDetailScreen( + showSnackbar = appState::showSnackBar + ) + settingScreen( + showSnackbar = appState::showSnackBar + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/MainActivity.kt b/app/src/main/java/com/dev/briefing/MainActivity.kt index 7b6c014..e10422d 100644 --- a/app/src/main/java/com/dev/briefing/MainActivity.kt +++ b/app/src/main/java/com/dev/briefing/MainActivity.kt @@ -17,29 +17,8 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) setContent { BriefingTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background - ) { - Greeting("Android") - } + BriefingApp() } } } -} - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - BriefingTheme { - Greeting("Android") - } } \ No newline at end of file diff --git a/feature/bookmark/build.gradle.kts b/feature/bookmark/build.gradle.kts index 545337e..d9208ef 100644 --- a/feature/bookmark/build.gradle.kts +++ b/feature/bookmark/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.briefing.android.library) alias(libs.plugins.briefing.android.feature) + alias(libs.plugins.briefing.android.library.compose) } android { diff --git a/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkNavigation.kt b/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkNavigation.kt index 7a15541..7f20d63 100644 --- a/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkNavigation.kt +++ b/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkNavigation.kt @@ -10,10 +10,14 @@ fun NavController.navigateToBookmark() { navigate(bookmarkRoute) } -fun NavGraphBuilder.bookmarkScreen() { +fun NavGraphBuilder.bookmarkScreen( + showSnackbar: (String) -> Unit +) { composable( route = bookmarkRoute ) { - BookmarkRoute() + BookmarkRoute( + showSnackbar = showSnackbar + ) } } \ No newline at end of file diff --git a/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkScreen.kt b/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkScreen.kt index 8c18844..8b7c253 100644 --- a/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkScreen.kt +++ b/feature/bookmark/src/main/java/store/newsbriefing/app/feature/bookmark/BookmarkScreen.kt @@ -3,11 +3,17 @@ package store.newsbriefing.app.feature.bookmark import androidx.compose.runtime.Composable @Composable -internal fun BookmarkRoute() { - BookmarkScreen() +internal fun BookmarkRoute( + showSnackbar: (String) -> Unit +) { + BookmarkScreen( + showSnackbar = showSnackbar + ) } @Composable -internal fun BookmarkScreen() { +internal fun BookmarkScreen( + showSnackbar: (String) -> Unit +) { } \ No newline at end of file diff --git a/feature/home/build.gradle.kts b/feature/home/build.gradle.kts index 0a025fb..dc4e23a 100644 --- a/feature/home/build.gradle.kts +++ b/feature/home/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.briefing.android.library) alias(libs.plugins.briefing.android.feature) + alias(libs.plugins.briefing.android.library.compose) } android { diff --git a/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeNavigation.kt b/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeNavigation.kt index 4c265ed..94f47c8 100644 --- a/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeNavigation.kt +++ b/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeNavigation.kt @@ -11,10 +11,14 @@ fun NavController.navigateToHome() { navigate(homeRoute) } -fun NavGraphBuilder.homeScreen() { +fun NavGraphBuilder.homeScreen( + showSnackbar: (String) -> Unit +) { composable( route = homeRoute ) { - HomeRoute() + HomeRoute( + showSnackbar = showSnackbar + ) } } \ No newline at end of file diff --git a/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeScreen.kt b/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeScreen.kt index 9eb6715..d285adc 100644 --- a/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeScreen.kt +++ b/feature/home/src/main/java/store/newsbriefing/app/feature/home/HomeScreen.kt @@ -1,13 +1,21 @@ package store.newsbriefing.app.feature.home import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.navigation.NavHostController @Composable -internal fun HomeRoute() { - HomeScreen() +internal fun HomeRoute( + showSnackbar: (String) -> Unit +) { + HomeScreen( + showSnackbar = showSnackbar + ) } @Composable -internal fun HomeScreen() { +internal fun HomeScreen( + showSnackbar: (String) -> Unit +) { } diff --git a/feature/newsdetail/build.gradle.kts b/feature/newsdetail/build.gradle.kts index beee9e8..d9f5c3b 100644 --- a/feature/newsdetail/build.gradle.kts +++ b/feature/newsdetail/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.briefing.android.library) alias(libs.plugins.briefing.android.feature) + alias(libs.plugins.briefing.android.library.compose) } android { diff --git a/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailNavigation.kt b/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailNavigation.kt index 170f68b..2d5b030 100644 --- a/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailNavigation.kt +++ b/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailNavigation.kt @@ -10,10 +10,14 @@ fun NavController.navigateToNewsDetail() { navigate(NewsDetailRoute) } -fun NavGraphBuilder.newsDetailScreen() { +fun NavGraphBuilder.newsDetailScreen( + showSnackbar: (String) -> Unit +) { composable( route = NewsDetailRoute ) { - NewsDetailRoute() + NewsDetailRoute( + showSnackbar = showSnackbar + ) } } \ No newline at end of file diff --git a/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailScreen.kt b/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailScreen.kt index eabc259..eea481a 100644 --- a/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailScreen.kt +++ b/feature/newsdetail/src/main/java/store/newsbriefing/app/feature/newsdetail/NewsDetailScreen.kt @@ -3,11 +3,17 @@ package store.newsbriefing.app.feature.newsdetail import androidx.compose.runtime.Composable @Composable -internal fun NewsDetailRoute() { - NewsDetailScreen() +internal fun NewsDetailRoute( + showSnackbar: (String) -> Unit +) { + NewsDetailScreen( + showSnackbar = showSnackbar + ) } @Composable -internal fun NewsDetailScreen() { +internal fun NewsDetailScreen( + showSnackbar: (String) -> Unit +) { } \ No newline at end of file diff --git a/feature/setting/build.gradle.kts b/feature/setting/build.gradle.kts index 1052a23..e37f382 100644 --- a/feature/setting/build.gradle.kts +++ b/feature/setting/build.gradle.kts @@ -1,6 +1,7 @@ plugins { alias(libs.plugins.briefing.android.library) alias(libs.plugins.briefing.android.feature) + alias(libs.plugins.briefing.android.library.compose) } android { diff --git a/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingNavigation.kt b/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingNavigation.kt index 309ea97..c319962 100644 --- a/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingNavigation.kt +++ b/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingNavigation.kt @@ -10,10 +10,14 @@ fun NavController.navigateToSetting() { navigate(settingRoute) } -fun NavGraphBuilder.settingScreen() { +fun NavGraphBuilder.settingScreen( + showSnackbar: (String) -> Unit +) { composable( route = settingRoute ) { - SettingRoute() + SettingRoute( + showSnackbar = showSnackbar + ) } } \ No newline at end of file diff --git a/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingScreen.kt b/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingScreen.kt index 857bdd1..b806720 100644 --- a/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingScreen.kt +++ b/feature/setting/src/main/java/store/newsbriefing/app/feature/setting/SettingScreen.kt @@ -3,11 +3,17 @@ package store.newsbriefing.app.feature.setting import androidx.compose.runtime.Composable @Composable -internal fun SettingRoute() { - SettingScreen() +internal fun SettingRoute( + showSnackbar: (String) -> Unit +) { + SettingScreen( + showSnackbar = showSnackbar + ) } @Composable -internal fun SettingScreen() { +internal fun SettingScreen( + showSnackbar: (String) -> Unit +) { } \ No newline at end of file