From 9f720c56600a351b163920846e54cb968b135abf Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 13:13:31 +0900 Subject: [PATCH 01/15] =?UTF-8?q?feat:=20MainTabDataModel=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/navigation/build.gradle.kts | 2 ++ .../core/navigation/RouteModel.kt | 12 +++++-- .../core/navigation/model/MainTabDataModel.kt | 18 +++++++++++ .../navigation/model/MainTabDataModelType.kt | 32 +++++++++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt create mode 100644 core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModelType.kt diff --git a/core/navigation/build.gradle.kts b/core/navigation/build.gradle.kts index 68363ad9..45f58eb9 100644 --- a/core/navigation/build.gradle.kts +++ b/core/navigation/build.gradle.kts @@ -6,6 +6,7 @@ plugins { alias(libs.plugins.kotlin.plugin.serialization) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.hilt.android) + alias(libs.plugins.kotlin.parcelize) } android { @@ -41,5 +42,6 @@ dependencies { implementation(libs.kotlin.serialization.json) implementation(libs.bundles.coroutines) implementation(libs.hilt.android) + implementation(libs.androidx.navigation.compose) ksp(libs.hilt.compiler) } diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt index 3d4dd9ab..3d9cca0d 100644 --- a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt @@ -1,12 +1,17 @@ package com.goalpanzi.mission_mate.core.navigation +import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel import kotlinx.serialization.Serializable - sealed interface RouteModel { @Serializable data object Login : RouteModel + @Serializable + data class MainTab( + val mainTabDataModel : MainTabDataModel = MainTabDataModel.Mission() + ) : RouteModel + @Serializable sealed interface Profile: RouteModel { @Serializable @@ -56,7 +61,10 @@ sealed interface RouteModel { } @Serializable - sealed interface HistoryRouteModel : MainTabRoute + sealed interface HistoryRouteModel : MainTabRoute { + @Serializable + data object History : HistoryRouteModel + } @Serializable sealed interface SettingRouteModel : MainTabRoute { diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt new file mode 100644 index 00000000..4b03a45e --- /dev/null +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt @@ -0,0 +1,18 @@ +package com.goalpanzi.mission_mate.core.navigation.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize +import kotlinx.serialization.Serializable + +@Serializable +@Parcelize +sealed class MainTabDataModel : Parcelable { + @Serializable + data class Mission( + val isAfterProfileCreate: Boolean = false + ) : MainTabDataModel() + @Serializable + data object History : MainTabDataModel() + @Serializable + data object Setting : MainTabDataModel() +} diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModelType.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModelType.kt new file mode 100644 index 00000000..7dc3440f --- /dev/null +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModelType.kt @@ -0,0 +1,32 @@ +package com.goalpanzi.mission_mate.core.navigation.model + +import android.os.Build +import android.os.Bundle +import androidx.navigation.NavType +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +val MainTabDataModelType = object : NavType( + isNullableAllowed = false +){ + override fun get(bundle: Bundle, key: String): MainTabDataModel? { + return if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){ + bundle.getParcelable(key, MainTabDataModel::class.java) + } else { + @Suppress("DEPRECATION") + bundle.getParcelable(key) + } + } + + override fun parseValue(value: String): MainTabDataModel { + return Json.decodeFromString(value) + } + + override fun serializeAsValue(value: MainTabDataModel): String { + return Json.encodeToString(value) + } + + override fun put(bundle: Bundle, key: String, value: MainTabDataModel) { + bundle.putParcelable(key, value) + } +} From bcdfb47857b0100419be766f759e8c7591d2f5da Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 13:16:25 +0900 Subject: [PATCH 02/15] =?UTF-8?q?feat:=20MainBottomNavigationBar=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/component/MainBottomNavigationBar.kt | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt new file mode 100644 index 00000000..42fba222 --- /dev/null +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt @@ -0,0 +1,133 @@ +package com.goalpanzi.mission_mate.feature.main.component + +import android.app.Activity +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavDestination +import com.goalpanzi.mission_mate.core.designsystem.ext.clickableWithoutRipple +import com.goalpanzi.mission_mate.core.designsystem.theme.ColorGray1_FF404249 +import com.goalpanzi.mission_mate.core.designsystem.theme.ColorGray4_FFE5E5E5 +import com.goalpanzi.mission_mate.core.designsystem.theme.ColorOrange_FFFF5732 +import com.goalpanzi.mission_mate.core.designsystem.theme.MissionMateTypography +import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute +import com.goalpanzi.mission_mate.core.navigation.fullPathName +import com.goalpanzi.mission_mate.feature.main.R + +internal const val MAIN_BOTTOM_NAVIGATION_BAR_HEIGHT = 48 + +enum class MainTab( + val routeModel: RouteModel, + @StringRes val labelRes: Int, + @DrawableRes val iconRes: Int +) { + MISSION( + routeModel = MainTabRoute.MissionRouteModel.Onboarding(), + labelRes = R.string.main_tab_onboarding, + iconRes = com.goalpanzi.mission_mate.core.designsystem.R.drawable.ic_flag + ), + HISTORY( + routeModel = MainTabRoute.HistoryRouteModel.History, + labelRes = R.string.main_tab_history, + iconRes = com.goalpanzi.mission_mate.core.designsystem.R.drawable.ic_time + ), + SETTING( + routeModel = MainTabRoute.SettingRouteModel.Setting, + labelRes = R.string.main_tab_setting, + iconRes = com.goalpanzi.mission_mate.core.designsystem.R.drawable.ic_setting + ); + + fun isSelected(destination: NavDestination?) : Boolean { + val currentDestinationRoute = destination?.route ?: return false + return containsWithRoute(currentDestinationRoute) + } + + private fun containsWithRoute(route: String) : Boolean { + return route.contains(routeModel.fullPathName() ?: return false) + } +} + +@Composable +fun MainBottomNavigationBar( + currentDestination: NavDestination?, + onTabClick : (MainTab) -> Unit, + modifier: Modifier = Modifier +) { + val context = LocalContext.current + Surface( + modifier = modifier.height(MAIN_BOTTOM_NAVIGATION_BAR_HEIGHT.dp), + color = Color((context as Activity).window.navigationBarColor) + ) { + HorizontalDivider( + thickness = 0.5.dp, + color = ColorGray4_FFE5E5E5 + ) + Row { + MainTab.entries.forEach { mainTab -> + val selected = mainTab.isSelected(currentDestination) + MainBottomNavigationBarItem( + modifier = Modifier.weight(1f), + icon = { + Icon( + modifier = Modifier.height(24.dp), + imageVector = ImageVector.vectorResource(mainTab.iconRes), + contentDescription = mainTab.name, + tint = if(selected) ColorOrange_FFFF5732 else ColorGray1_FF404249 + ) + }, + label = { + Text( + text = stringResource(mainTab.labelRes), + style = MissionMateTypography.body_sm_regular.copy(fontSize = 10.sp), + color = if(selected) ColorOrange_FFFF5732 else ColorGray1_FF404249 + ) + }, + onClick = { + onTabClick(mainTab) + } + ) + } + } + } +} + +@Composable +fun MainBottomNavigationBarItem( + icon: @Composable () -> Unit, + label : @Composable () -> Unit, + onClick: () -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier + .fillMaxSize() + .clickableWithoutRipple { + onClick() + }, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + icon() + label() + } +} + From 39b92048c924c73ae1c963fb75c93940dddde407 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 13:43:59 +0900 Subject: [PATCH 03/15] =?UTF-8?q?feat:=20=ED=95=98=EB=8B=A8=20=ED=83=AD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=ED=95=98=EB=8B=A8=20=ED=83=AD?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/feature/main/MainActivity.kt | 5 +- .../feature/main/MainViewModel.kt | 4 - .../feature/main/component/MainNavHost.kt | 73 +++++++----------- .../feature/main/component/MainNavigator.kt | 26 +++---- .../feature/main/component/MainTabContent.kt | 77 +++++++++++++++++++ .../feature/main/component/MainTabNavHost.kt | 59 ++++++++++++++ .../main/component/MainTabNavigator.kt | 32 ++++++++ feature/main/src/main/res/values/strings.xml | 6 ++ 8 files changed, 217 insertions(+), 65 deletions(-) create mode 100644 feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt create mode 100644 feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt create mode 100644 feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt create mode 100644 feature/main/src/main/res/values/strings.xml diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt index 07873cba..127a41a6 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt @@ -23,7 +23,8 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge( - statusBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT) + statusBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT), + navigationBarStyle = SystemBarStyle.light(Color.WHITE, Color.WHITE) ) val isNewUser = loginUseCase.isNewUser() val user = loginUseCase.getCachedUserData() @@ -39,7 +40,7 @@ class MainActivity : ComponentActivity() { if (user == null) { RouteModel.Profile.Create } else { - RouteModel.MainTabRoute.MissionRouteModel.Onboarding() + RouteModel.MainTab() } } ) diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainViewModel.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainViewModel.kt index 6cccb655..6f78fe2a 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainViewModel.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainViewModel.kt @@ -1,13 +1,9 @@ package com.goalpanzi.mission_mate.feature.main import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope import com.goalpanzi.mission_mate.core.navigation.NavigationEventHandler -import com.goalpanzi.mission_mate.core.navigation.RouteModel import com.goalpanzi.mission_mate.core.navigation.di.AuthNavigation import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt index 5895d885..ed580941 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt @@ -11,26 +11,28 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.toRoute import com.goalpanzi.mission_mate.core.designsystem.theme.ColorWhite_FFFFFFFF import com.goalpanzi.mission_mate.core.designsystem.util.isLightStatusBars import com.goalpanzi.mission_mate.core.designsystem.util.setStatusBar +import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel import com.goalpanzi.mission_mate.core.navigation.RouteModel import com.goalpanzi.mission_mate.feature.board.boardDetailNavGraph import com.goalpanzi.mission_mate.feature.board.boardFinishNavGraph -import com.goalpanzi.mission_mate.feature.board.boardNavGraph import com.goalpanzi.mission_mate.feature.board.userStoryNavGraph import com.goalpanzi.mission_mate.feature.board.verificationPreviewNavGraph import com.goalpanzi.mission_mate.feature.login.loginNavGraph import com.goalpanzi.mission_mate.feature.main.ext.isDarkStatusBarScreen +import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModelType import com.goalpanzi.mission_mate.feature.onboarding.boardSetupNavGraph import com.goalpanzi.mission_mate.feature.onboarding.boardSetupSuccessNavGraph import com.goalpanzi.mission_mate.feature.onboarding.invitationCodeNavGraph -import com.goalpanzi.mission_mate.feature.onboarding.onboardingNavGraph import com.goalpanzi.mission_mate.feature.profile.profileNavGraph import com.goalpanzi.mission_mate.feature.setting.navigation.privacyPolicyNavGraph import com.goalpanzi.mission_mate.feature.setting.navigation.servicePolicyNavGraph -import com.goalpanzi.mission_mate.feature.setting.navigation.settingNavGraph +import kotlin.reflect.typeOf @Composable internal fun MainNavHost( @@ -46,7 +48,7 @@ internal fun MainNavHost( LaunchedEffect(currentRoute) { if (currentRoute.isDarkStatusBarScreen()) { setStatusBar(context, false) - } else if(!isLightStatusBars(context as Activity)){ + } else if (!isLightStatusBars(context as Activity)) { setStatusBar(context, true) } } @@ -61,15 +63,10 @@ internal fun MainNavHost( startDestination = startDestination ) { loginNavGraph( - onLoginSuccess = { if (it) navigator.navigationToOnboarding() else navigator.navigateToProfileCreate() } - ) - onboardingNavGraph( - onClickBoardSetup = { navigator.navigationToBoardSetup() }, - onClickInvitationCode = { navigator.navigationToInvitationCode() }, - onNavigateMissionBoard = { missionId -> - navigator.navigationToBoard(missionId) - }, - onClickSetting = { navigator.navigationToSetting() } + onLoginSuccess = { + if (it) navigator.navigationToMainTab(MainTabDataModel.Mission()) + else navigator.navigateToProfileCreate() + } ) boardSetupNavGraph( onSuccess = { @@ -81,7 +78,7 @@ internal fun MainNavHost( ) boardSetupSuccessNavGraph( onClickStart = { - navigator.navigationToOnboarding() + navigator.navigationToMainTab() } ) invitationCodeNavGraph( @@ -89,49 +86,24 @@ internal fun MainNavHost( navigator.popBackStack() }, onNavigateMissionBoard = { missionId -> - navigator.navigationToBoard(missionId) + navigator.navigationToMainTab() } ) profileNavGraph( - onSaveSuccess = { navigator.navigationToOnboarding(isAfterProfileCreate = true) }, + onSaveSuccess = { + navigator.navigationToMainTab(MainTabDataModel.Mission(true)) + }, onBackClick = { navigator.popBackStack() } ) - settingNavGraph( - onBackClick = { navigator.popBackStack() }, - onClickProfileSetting = { navigator.navigateToProfileSetting() }, - onClickServicePolicy = { navigator.navigationToServicePolicy() }, - onClickPrivacyPolicy = { navigator.navigationToPrivacyPolicy() }, - onClickLogout = { navigator.navigateToLogin() } - ) servicePolicyNavGraph( onBackClick = { navigator.popBackStack() } ) privacyPolicyNavGraph( onBackClick = { navigator.popBackStack() } ) - boardNavGraph( - onNavigateOnboarding = { - navigator.navigationToOnboarding() - }, - onNavigateDetail = { missionId -> - navigator.navigationToBoardDetail(missionId) - }, - onNavigateFinish = { missionId -> - navigator.navigateToBoardFinish(missionId) - }, - onClickSetting = { - navigator.navigationToSetting() - }, - onNavigateStory = { userStory -> - navigator.navigationToUserStory(userStory) - }, - onNavigateToPreview = { missionId, imageUrl -> - navigator.navigationToVerificationPreview(missionId, imageUrl) - } - ) boardDetailNavGraph( onNavigateOnboarding = { - navigator.navigationToOnboarding() + navigator.navigationToMainTab() }, onBackClick = { navigator.popBackStack() @@ -139,10 +111,10 @@ internal fun MainNavHost( ) boardFinishNavGraph( onClickSetting = { - navigator.navigationToSetting() + navigator.navigationToMainTab(MainTabDataModel.Setting) }, onClickOk = { - navigator.navigationToOnboarding() + navigator.navigationToMainTab() } ) userStoryNavGraph( @@ -158,6 +130,15 @@ internal fun MainNavHost( navigator.popBackStack() } ) + + composable( + typeMap = mapOf(typeOf() to MainTabDataModelType) + ) { backStackEntry -> + MainTabContent( + navigator = navigator, + mainTabDataModel = backStackEntry.toRoute().mainTabDataModel + ) + } } } } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt index c4a55691..72eb5180 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt @@ -6,8 +6,9 @@ import androidx.compose.runtime.remember import androidx.lifecycle.Lifecycle import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController +import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel +import com.goalpanzi.mission_mate.core.navigation.RouteModel import com.goalpanzi.mission_mate.feature.board.model.UserStory -import com.goalpanzi.mission_mate.feature.board.navigateToBoard import com.goalpanzi.mission_mate.feature.board.navigateToBoardDetail import com.goalpanzi.mission_mate.feature.board.navigateToBoardFinish import com.goalpanzi.mission_mate.feature.board.navigateToUserStory @@ -16,12 +17,10 @@ import com.goalpanzi.mission_mate.feature.login.navigateToLogin import com.goalpanzi.mission_mate.feature.onboarding.navigateToBoardSetup import com.goalpanzi.mission_mate.feature.onboarding.navigateToBoardSetupSuccess import com.goalpanzi.mission_mate.feature.onboarding.navigateToInvitationCode -import com.goalpanzi.mission_mate.feature.onboarding.navigateToOnboarding import com.goalpanzi.mission_mate.feature.profile.navigateToProfileCreate import com.goalpanzi.mission_mate.feature.profile.navigateToProfileSetting import com.goalpanzi.mission_mate.feature.setting.navigation.navigateToPrivacyPolicy import com.goalpanzi.mission_mate.feature.setting.navigation.navigateToServicePolicy -import com.goalpanzi.mission_mate.feature.setting.navigation.navigateToSetting class MainNavigator( val navController: NavHostController @@ -45,10 +44,19 @@ class MainNavigator( navController.navigateToProfileSetting() } - fun navigationToOnboarding(isAfterProfileCreate: Boolean = false) { - navController.navigateToOnboarding(isAfterProfileCreate) + fun navigationToMainTab( + mainTabDataModel: MainTabDataModel = MainTabDataModel.Mission() + ) { + navController.navigate( + route = RouteModel.MainTab(mainTabDataModel) + ){ + popUpTo(navController.graph.id) { + inclusive = true + } + } } + fun navigationToBoardSetup() { navController.navigateToBoardSetup() } @@ -61,10 +69,6 @@ class MainNavigator( navController.navigateToInvitationCode() } - fun navigationToSetting() { - navController.navigateToSetting() - } - fun navigationToServicePolicy() { navController.navigateToServicePolicy() } @@ -73,10 +77,6 @@ class MainNavigator( navController.navigateToPrivacyPolicy() } - fun navigationToBoard(missionId : Long) { - navController.navigateToBoard(missionId) - } - fun navigationToBoardDetail(missionId : Long) { navController.navigateToBoardDetail(missionId) } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt new file mode 100644 index 00000000..860d56ab --- /dev/null +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt @@ -0,0 +1,77 @@ +package com.goalpanzi.mission_mate.feature.main.component + +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel + +@Composable +fun MainTabContent( + navigator: MainNavigator, + mainTabDataModel: MainTabDataModel, + modifier: Modifier = Modifier, + mainTabNavigator: MainTabNavigator = rememberMainTabNavigator() +) { + + val backStackEntryState = + mainTabNavigator.navController.currentBackStackEntryFlow.collectAsState(initial = null) + val navigationBottomPadding = + WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() + + LaunchedEffect(mainTabDataModel) { + when (mainTabDataModel) { + is MainTabDataModel.Mission -> { + mainTabNavigator.navigationToOnboarding( + mainTabDataModel.isAfterProfileCreate + ) + } + + MainTabDataModel.History -> { + + } + + MainTabDataModel.Setting -> { + mainTabNavigator.navigationToSetting() + } + } + } + + Scaffold( + modifier = modifier.padding(bottom = navigationBottomPadding), + bottomBar = { + MainBottomNavigationBar( + modifier = Modifier.height(MAIN_BOTTOM_NAVIGATION_BAR_HEIGHT.dp), + currentDestination = backStackEntryState.value?.destination, + onTabClick = { mainTab -> + when (mainTab) { + MainTab.MISSION -> { + mainTabNavigator.navigationToOnboarding() + } + + MainTab.HISTORY -> { + + } + + MainTab.SETTING -> { + mainTabNavigator.navigationToSetting() + } + } + } + ) + }, + content = { padding -> + MainTabNavHost( + mainNavigator = navigator, + mainTabNavigator = mainTabNavigator + ) + } + ) +} diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt new file mode 100644 index 00000000..4e166993 --- /dev/null +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt @@ -0,0 +1,59 @@ +package com.goalpanzi.mission_mate.feature.main.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.feature.board.boardNavGraph +import com.goalpanzi.mission_mate.feature.onboarding.onboardingNavGraph +import com.goalpanzi.mission_mate.feature.setting.navigation.settingNavGraph + +@Composable +fun MainTabNavHost( + mainNavigator: MainNavigator, + mainTabNavigator : MainTabNavigator, + modifier: Modifier = Modifier +) { + + NavHost( + modifier = modifier, + navController = mainTabNavigator.navController, + startDestination = MissionRouteModel.Onboarding() + ){ + onboardingNavGraph( + onClickBoardSetup = { mainNavigator.navigationToBoardSetup() }, + onClickInvitationCode = { mainNavigator.navigationToInvitationCode() }, + onNavigateMissionBoard = { missionId -> + mainTabNavigator.navigationToBoard(missionId) + }, + onClickSetting = { mainTabNavigator.navigationToSetting() } + ) + settingNavGraph( + onBackClick = { mainNavigator.popBackStack() }, + onClickProfileSetting = { mainNavigator.navigateToProfileSetting() }, + onClickServicePolicy = { mainNavigator.navigationToServicePolicy() }, + onClickPrivacyPolicy = { mainNavigator.navigationToPrivacyPolicy() }, + onClickLogout = { mainNavigator.navigateToLogin() } + ) + boardNavGraph( + onNavigateOnboarding = { + mainTabNavigator.navigationToOnboarding() + }, + onNavigateDetail = { missionId -> + mainNavigator.navigationToBoardDetail(missionId) + }, + onNavigateFinish = { missionId -> + mainNavigator.navigateToBoardFinish(missionId) + }, + onClickSetting = { + mainTabNavigator.navigationToSetting() + }, + onNavigateStory = { userStory -> + mainNavigator.navigationToUserStory(userStory) + }, + onNavigateToPreview = { missionId, imageUrl -> + mainNavigator.navigationToVerificationPreview(missionId, imageUrl) + } + ) + } +} diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt new file mode 100644 index 00000000..4bfe7d0f --- /dev/null +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt @@ -0,0 +1,32 @@ +package com.goalpanzi.mission_mate.feature.main.component + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController +import com.goalpanzi.mission_mate.feature.board.navigateToBoard +import com.goalpanzi.mission_mate.feature.onboarding.navigateToOnboarding +import com.goalpanzi.mission_mate.feature.setting.navigation.navigateToSetting + +class MainTabNavigator( + val navController: NavHostController +) { + fun navigationToOnboarding(isAfterProfileCreate: Boolean = false) { + navController.navigateToOnboarding(isAfterProfileCreate) + } + + fun navigationToSetting() { + navController.navigateToSetting() + } + fun navigationToBoard(missionId : Long) { + navController.navigateToBoard(missionId) + } +} + +@Composable +internal fun rememberMainTabNavigator( + navController: NavHostController = rememberNavController() +) : MainTabNavigator = remember(navController) { + MainTabNavigator(navController) +} + diff --git a/feature/main/src/main/res/values/strings.xml b/feature/main/src/main/res/values/strings.xml new file mode 100644 index 00000000..a22ecc5b --- /dev/null +++ b/feature/main/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + + 진행미션 + 내기록 + 설정 + From 86bb093b1d8c366b64d31d73f0c48e50854affa6 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 13:45:32 +0900 Subject: [PATCH 04/15] =?UTF-8?q?feat:=20=EC=84=B8=ED=8C=85=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EB=B0=B1=EB=B2=84=ED=8A=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/feature/setting/screen/SettingScreen.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/screen/SettingScreen.kt b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/screen/SettingScreen.kt index 8eb93815..5884d3b1 100644 --- a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/screen/SettingScreen.kt +++ b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/screen/SettingScreen.kt @@ -118,17 +118,11 @@ fun SettingScreen( .statusBarsPadding() .navigationBarsPadding() ) { - MissionMateTopAppBar( - navigationType = NavigationType.BACK, - onNavigationClick = { onBackClick() }, - containerColor = ColorWhite_FFFFFFFF - ) Text( text = stringResource(id = R.string.setting_title), modifier = Modifier .wrapContentWidth() - .wrapContentHeight() - .padding(start = 24.dp, bottom = 16.dp), + .padding(start = 24.dp,top = 20.dp, bottom = 10.dp), style = MissionMateTypography.heading_sm_bold, color = ColorGray1_FF404249 ) From f2b9a19609d5f2e47dd69d1fc376e59ec1142335 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 13:58:43 +0900 Subject: [PATCH 05/15] =?UTF-8?q?feat:=20MainTabDataModel=20None=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../goalpanzi/mission_mate/core/navigation/RouteModel.kt | 2 +- .../mission_mate/core/navigation/model/MainTabDataModel.kt | 2 ++ .../mission_mate/feature/main/component/MainTabContent.kt | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt index 3d9cca0d..9672e574 100644 --- a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt @@ -9,7 +9,7 @@ sealed interface RouteModel { @Serializable data class MainTab( - val mainTabDataModel : MainTabDataModel = MainTabDataModel.Mission() + val mainTabDataModel : MainTabDataModel = MainTabDataModel.None ) : RouteModel @Serializable diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt index 4b03a45e..0a6e0dd5 100644 --- a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/MainTabDataModel.kt @@ -15,4 +15,6 @@ sealed class MainTabDataModel : Parcelable { data object History : MainTabDataModel() @Serializable data object Setting : MainTabDataModel() + @Serializable + data object None : MainTabDataModel() } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt index 860d56ab..d62758e1 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt @@ -1,5 +1,6 @@ package com.goalpanzi.mission_mate.feature.main.component +import android.util.Log import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.height @@ -27,6 +28,7 @@ fun MainTabContent( WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() LaunchedEffect(mainTabDataModel) { + Log.d("123123","${mainTabDataModel}") when (mainTabDataModel) { is MainTabDataModel.Mission -> { mainTabNavigator.navigationToOnboarding( @@ -41,6 +43,10 @@ fun MainTabContent( MainTabDataModel.Setting -> { mainTabNavigator.navigationToSetting() } + + MainTabDataModel.None -> { + + } } } From 7f2f7d45042da7aa07f9f0ef36850c77ddf0257d Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 14:07:04 +0900 Subject: [PATCH 06/15] =?UTF-8?q?feat:=20Animation=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/core/ui/util/AnimatedUtil.kt | 45 +++++++++++++++++++ .../feature/board/BoardNavigation.kt | 33 ++++++++++++-- .../onboarding/OnboardingNavigation.kt | 20 ++++++++- .../feature/profile/ProfileNavigation.kt | 19 +++++--- .../setting/navigation/SettingNavigation.kt | 38 +++++++++------- 5 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt diff --git a/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt b/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt new file mode 100644 index 00000000..932fac08 --- /dev/null +++ b/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt @@ -0,0 +1,45 @@ +package com.goalpanzi.mission_mate.core.ui.util + +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.AnimatedContentTransitionScope.SlideDirection +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.core.tween +import androidx.navigation.NavBackStackEntry + +fun AnimatedContentTransitionScope.slideInFromLeft( + durationMills: Int = 300 +): EnterTransition { + return slideIntoContainer( + towards = SlideDirection.Left, + animationSpec = tween(durationMills) + ) +} + +fun AnimatedContentTransitionScope.slideOutToEnd( + durationMills: Int = 300 +): ExitTransition { + return slideOutOfContainer( + towards = SlideDirection.End, + animationSpec = tween(durationMills) + ) +} + +fun AnimatedContentTransitionScope.slideInToUp( + durationMills: Int = 300 +): EnterTransition { + return slideIntoContainer( + towards = SlideDirection.Up, + animationSpec = tween(durationMills) + ) +} + +fun AnimatedContentTransitionScope.slideOutToDown( + durationMills: Int = 300 +): ExitTransition { + return slideOutOfContainer( + towards = SlideDirection.Down, + animationSpec = tween(durationMills) + ) +} + diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt index 219f89ee..bccd6730 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt @@ -1,12 +1,18 @@ package com.goalpanzi.mission_mate.feature.board import android.net.Uri +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.core.tween import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft +import com.goalpanzi.mission_mate.core.ui.util.slideInToUp +import com.goalpanzi.mission_mate.core.ui.util.slideOutToDown +import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd import com.goalpanzi.mission_mate.feature.board.model.CharacterUiModel import com.goalpanzi.mission_mate.feature.board.model.UserStory import com.goalpanzi.mission_mate.feature.board.screen.BoardFinishRoute @@ -58,7 +64,14 @@ fun NavGraphBuilder.boardDetailNavGraph( onNavigateOnboarding: () -> Unit, onBackClick: () -> Unit ) { - composable { + composable( + enterTransition = { + slideInFromLeft() + }, + popExitTransition = { + slideOutToEnd() + } + ) { BoardMissionDetailRoute( onNavigateOnboarding = onNavigateOnboarding, onBackClick = onBackClick @@ -102,7 +115,14 @@ fun NavController.navigateToUserStory( fun NavGraphBuilder.userStoryNavGraph( onClickClose: () -> Unit ) { - composable { backStackEntry -> + composable( + enterTransition = { + slideInToUp() + }, + exitTransition = { + slideOutToDown() + } + ) { backStackEntry -> backStackEntry.toRoute().run { val characterUiModel = userCharacter.let { CharacterUiModel.valueOf(it) } UserStoryScreen( @@ -128,7 +148,14 @@ fun NavGraphBuilder.verificationPreviewNavGraph( onClickClose: () -> Unit, onUploadSuccess: () -> Unit ) { - composable { + composable( + enterTransition = { + slideInToUp() + }, + exitTransition = { + slideOutToDown() + } + ) { VerificationPreviewRoute( onClickClose = onClickClose, onUploadSuccess = { onUploadSuccess() } diff --git a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt index 5b643102..600ea660 100644 --- a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt +++ b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt @@ -5,6 +5,8 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft +import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd import com.goalpanzi.mission_mate.feature.onboarding.screen.OnboardingRoute import com.goalpanzi.mission_mate.feature.onboarding.screen.boardsetup.BoardSetupRoute import com.goalpanzi.mission_mate.feature.onboarding.screen.boardsetup.BoardSetupSuccessScreen @@ -59,7 +61,14 @@ fun NavGraphBuilder.boardSetupNavGraph( onSuccess: () -> Unit, onBackClick: () -> Unit ) { - composable { + composable( + enterTransition = { + slideInFromLeft() + }, + popExitTransition = { + slideOutToEnd() + } + ) { BoardSetupRoute( onSuccess = onSuccess, onBackClick = onBackClick @@ -81,7 +90,14 @@ fun NavGraphBuilder.invitationCodeNavGraph( onBackClick: () -> Unit, onNavigateMissionBoard: (Long) -> Unit, ) { - composable { + composable( + enterTransition = { + slideInFromLeft() + }, + popExitTransition = { + slideOutToEnd() + } + ) { InvitationCodeRoute( onBackClick = onBackClick, onNavigateMissionBoard = onNavigateMissionBoard diff --git a/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt b/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt index 71993395..17188893 100644 --- a/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt +++ b/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt @@ -6,6 +6,8 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft +import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd enum class ProfileSettingType { CREATE, SETTING @@ -25,10 +27,10 @@ fun NavGraphBuilder.profileNavGraph( ) { composable( enterTransition = { - slideIntoContainer( - towards = AnimatedContentTransitionScope.SlideDirection.Left, - animationSpec = tween(300) - ) + slideInFromLeft() + }, + popExitTransition = { + slideOutToEnd() } ) { ProfileRoute( @@ -36,7 +38,14 @@ fun NavGraphBuilder.profileNavGraph( onSaveSuccess = onSaveSuccess ) } - composable { + composable ( + enterTransition = { + slideInFromLeft() + }, + popExitTransition = { + slideOutToEnd() + } + ){ ProfileRoute( profileSettingType = ProfileSettingType.SETTING, onSaveSuccess = onBackClick, diff --git a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt index c534dcf9..e03a714d 100644 --- a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt +++ b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt @@ -1,16 +1,22 @@ package com.goalpanzi.mission_mate.feature.setting.navigation -import androidx.compose.animation.AnimatedContentTransitionScope -import androidx.compose.animation.core.tween import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.SettingRouteModel +import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft import com.goalpanzi.mission_mate.feature.setting.screen.SettingRoute import com.goalpanzi.mission_mate.feature.setting.screen.WebViewScreen -fun NavController.navigateToSetting() { - this.navigate(SettingRouteModel.Setting) +fun NavController.navigateToSetting( + navOptions: NavOptions? = androidx.navigation.navOptions { + popUpTo(this@navigateToSetting.graph.id) { + inclusive = true + } + } +) { + this.navigate(SettingRouteModel.Setting,navOptions = navOptions) } fun NavController.navigateToServicePolicy() { @@ -28,15 +34,7 @@ fun NavGraphBuilder.settingNavGraph( onClickPrivacyPolicy: () -> Unit, onClickLogout: () -> Unit ) { - composable( - enterTransition = { - slideIntoContainer( - towards = AnimatedContentTransitionScope.SlideDirection.Start, - animationSpec = tween(300) - ) - }, - popEnterTransition = null, - ) { + composable { SettingRoute( onBackClick = onBackClick, onClickProfileSetting = onClickProfileSetting, @@ -51,7 +49,12 @@ fun NavGraphBuilder.settingNavGraph( fun NavGraphBuilder.servicePolicyNavGraph( onBackClick: () -> Unit ) { - composable { + composable( + enterTransition = { + slideInFromLeft() + }, + popEnterTransition = null, + ) { WebViewScreen( onBackClick = onBackClick, url = "https://missionmate.notion.site/f638866edeaf45b58ef63d1000f30c15?pvs=73" @@ -62,7 +65,12 @@ fun NavGraphBuilder.servicePolicyNavGraph( fun NavGraphBuilder.privacyPolicyNavGraph( onBackClick: () -> Unit ) { - composable { + composable( + enterTransition = { + slideInFromLeft() + }, + popEnterTransition = null, + ) { WebViewScreen( onBackClick = onBackClick, url = "https://missionmate.notion.site/c79e9e6990de466490c584f351b364b7?pvs=4" From ceaf9bd395b52a208389380f1bae08d30697dcd7 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 14:09:42 +0900 Subject: [PATCH 07/15] =?UTF-8?q?fix:=20MainTab=20selected=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/main/component/MainBottomNavigationBar.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt index 42fba222..a1c7c17c 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt @@ -30,7 +30,6 @@ import com.goalpanzi.mission_mate.core.designsystem.theme.ColorOrange_FFFF5732 import com.goalpanzi.mission_mate.core.designsystem.theme.MissionMateTypography import com.goalpanzi.mission_mate.core.navigation.RouteModel import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute -import com.goalpanzi.mission_mate.core.navigation.fullPathName import com.goalpanzi.mission_mate.feature.main.R internal const val MAIN_BOTTOM_NAVIGATION_BAR_HEIGHT = 48 @@ -62,7 +61,12 @@ enum class MainTab( } private fun containsWithRoute(route: String) : Boolean { - return route.contains(routeModel.fullPathName() ?: return false) + val path = when(this){ + MISSION -> MainTabRoute.MissionRouteModel::class.qualifiedName + HISTORY -> MainTabRoute.HistoryRouteModel::class.qualifiedName + SETTING -> MainTabRoute.SettingRouteModel::class.qualifiedName + } ?: return false + return route.contains(path) } } From 62030062570e6e52bd34fadc942fe03673d25aab Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 14:19:19 +0900 Subject: [PATCH 08/15] =?UTF-8?q?feat:=20=ED=95=98=EB=8B=A8=ED=83=AD=20?= =?UTF-8?q?=EC=9D=B4=EC=99=B8=EC=9D=98=20=EC=84=B8=ED=8C=85=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/board/BoardNavigation.kt | 4 --- .../feature/board/component/BoardTopView.kt | 13 ---------- .../feature/board/screen/BoardFinishScreen.kt | 16 ------------ .../feature/board/screen/BoardScreen.kt | 4 --- .../feature/main/component/MainNavHost.kt | 3 --- .../feature/main/component/MainTabContent.kt | 1 - .../feature/main/component/MainTabNavHost.kt | 4 --- .../onboarding/OnboardingNavigation.kt | 2 -- .../onboarding/screen/OnboardingScreen.kt | 25 ------------------- 9 files changed, 72 deletions(-) diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt index bccd6730..807a9aa5 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt @@ -39,7 +39,6 @@ fun NavGraphBuilder.boardNavGraph( onNavigateDetail : (Long) -> Unit, onNavigateFinish : (Long) -> Unit, onNavigateStory: (UserStory) -> Unit, - onClickSetting: () -> Unit, onNavigateToPreview: (Long, Uri) -> Unit ) { composable { navBackStackEntry -> @@ -47,7 +46,6 @@ fun NavGraphBuilder.boardNavGraph( onNavigateOnboarding = onNavigateOnboarding, onNavigateDetail = onNavigateDetail, onNavigateFinish = onNavigateFinish, - onClickSetting = onClickSetting, onClickStory = onNavigateStory, onPreviewImage = onNavigateToPreview, ) @@ -86,12 +84,10 @@ fun NavController.navigateToBoardFinish( } fun NavGraphBuilder.boardFinishNavGraph( - onClickSetting: () -> Unit, onClickOk: () -> Unit, ) { composable { BoardFinishRoute( - onSettingClick = onClickSetting, onOkClick = onClickOk ) } diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt index 20c74fe1..787dfc3e 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt @@ -40,7 +40,6 @@ fun BoardTopView( missionState : MissionState, onClickFlag: () -> Unit, onClickAddUser: () -> Unit, - onClickSetting: () -> Unit, onClickTooltip : () -> Unit, onClickStory: (UserStory) -> Unit, modifier: Modifier = Modifier @@ -70,7 +69,6 @@ fun BoardTopView( BoardTopViewRightActionButtons( isAddingUserEnabled = isAddingUserEnabled, onClickAddUser = onClickAddUser, - onClickSetting = onClickSetting ) }, containerColor = Color.Transparent @@ -122,7 +120,6 @@ fun BoardTopView( fun BoardTopViewRightActionButtons( isAddingUserEnabled: Boolean, onClickAddUser: () -> Unit, - onClickSetting: () -> Unit, modifier: Modifier = Modifier ) { Row( @@ -141,15 +138,5 @@ fun BoardTopViewRightActionButtons( ) } } - IconButton( - onClick = onClickSetting, - modifier = Modifier.wrapContentSize() - ) { - Icon( - imageVector = ImageVector.vectorResource(id = com.goalpanzi.mission_mate.core.designsystem.R.drawable.ic_setting), - contentDescription = "", - tint = ColorGray1_FF404249 - ) - } } } diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishScreen.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishScreen.kt index 062d74fa..d2f4b166 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishScreen.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishScreen.kt @@ -54,7 +54,6 @@ import kotlinx.coroutines.flow.collectLatest @Composable fun BoardFinishRoute( - onSettingClick: () -> Unit, onOkClick : () -> Unit, modifier: Modifier = Modifier, viewModel : BoardFinishViewModel = hiltViewModel() @@ -104,7 +103,6 @@ fun BoardFinishRoute( isLoading = isLoading, characterUiModel = userProfile?.characterType?.toCharacterUiModel(), onOkClick = viewModel::completeMission, - onSettingClick = onSettingClick ) } @@ -113,7 +111,6 @@ fun BoardFinishScreen( characterUiModel : CharacterUiModel?, rank : Int?, isLoading : Boolean, - onSettingClick: () -> Unit, onOkClick : () -> Unit, modifier: Modifier = Modifier ) { @@ -136,18 +133,6 @@ fun BoardFinishScreen( MissionMateTopAppBar( modifier = modifier, navigationType = NavigationType.NONE, - rightActionButtons = { - IconButton( - onClick = onSettingClick, - modifier = Modifier.wrapContentSize() - ) { - Icon( - imageVector = ImageVector.vectorResource(id = com.goalpanzi.mission_mate.core.designsystem.R.drawable.ic_setting), - contentDescription = "", - tint = ColorGray1_FF404249 - ) - } - }, containerColor = Color.Transparent ) BoardFinishCharacter( @@ -252,7 +237,6 @@ private fun PreviewBoardFinishScreen() { characterUiModel = null, rank = 10, isLoading = false, - onSettingClick = {}, onOkClick = {} ) diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardScreen.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardScreen.kt index 9b6ee2a8..c88b9c6c 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardScreen.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardScreen.kt @@ -62,7 +62,6 @@ fun BoardRoute( onNavigateOnboarding: () -> Unit, onNavigateDetail: (Long) -> Unit, onNavigateFinish : (Long) -> Unit, - onClickSetting: () -> Unit, onClickStory: (UserStory) -> Unit, onPreviewImage: (Long, Uri) -> Unit, modifier: Modifier = Modifier, @@ -206,7 +205,6 @@ fun BoardRoute( missionState = missionState, boardPieces = boardPieces, isHost = isHost, - onClickSetting = onClickSetting, onClickFlag = { viewModel.setViewedTooltip() onNavigateDetail(viewModel.missionId) @@ -249,7 +247,6 @@ fun BoardScreen( missionState: MissionState, boardPieces: List, isHost: Boolean, - onClickSetting: () -> Unit, onClickVerification: () -> Unit, onClickFlag: () -> Unit, onClickAddUser: () -> Unit, @@ -297,7 +294,6 @@ fun BoardScreen( missionState = missionState, onClickFlag = onClickFlag, onClickAddUser = onClickAddUser, - onClickSetting = onClickSetting, onClickTooltip = onClickTooltip, onClickStory = onClickStory ) diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt index ed580941..e4f7de91 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt @@ -110,9 +110,6 @@ internal fun MainNavHost( } ) boardFinishNavGraph( - onClickSetting = { - navigator.navigationToMainTab(MainTabDataModel.Setting) - }, onClickOk = { navigator.navigationToMainTab() } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt index d62758e1..97afab64 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt @@ -28,7 +28,6 @@ fun MainTabContent( WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding() LaunchedEffect(mainTabDataModel) { - Log.d("123123","${mainTabDataModel}") when (mainTabDataModel) { is MainTabDataModel.Mission -> { mainTabNavigator.navigationToOnboarding( diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt index 4e166993..ea4486b7 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt @@ -26,7 +26,6 @@ fun MainTabNavHost( onNavigateMissionBoard = { missionId -> mainTabNavigator.navigationToBoard(missionId) }, - onClickSetting = { mainTabNavigator.navigationToSetting() } ) settingNavGraph( onBackClick = { mainNavigator.popBackStack() }, @@ -45,9 +44,6 @@ fun MainTabNavHost( onNavigateFinish = { missionId -> mainNavigator.navigateToBoardFinish(missionId) }, - onClickSetting = { - mainTabNavigator.navigationToSetting() - }, onNavigateStory = { userStory -> mainNavigator.navigationToUserStory(userStory) }, diff --git a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt index 600ea660..ecfe9106 100644 --- a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt +++ b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt @@ -26,14 +26,12 @@ fun NavController.navigateToOnboarding( fun NavGraphBuilder.onboardingNavGraph( onClickBoardSetup: () -> Unit, onClickInvitationCode: () -> Unit, - onClickSetting: () -> Unit, onNavigateMissionBoard: (Long) -> Unit ) { composable { OnboardingRoute( onClickBoardSetup = onClickBoardSetup, onClickInvitationCode = onClickInvitationCode, - onClickSetting = onClickSetting, onNavigateMissionBoard = onNavigateMissionBoard ) } diff --git a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingScreen.kt b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingScreen.kt index 653bd782..ce7672d2 100644 --- a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingScreen.kt +++ b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingScreen.kt @@ -66,7 +66,6 @@ fun OnboardingRoute( modifier: Modifier = Modifier, onClickBoardSetup: () -> Unit, onClickInvitationCode: () -> Unit, - onClickSetting: () -> Unit, onNavigateMissionBoard: (Long) -> Unit, viewModel: OnboardingViewModel = hiltViewModel() ) { @@ -112,7 +111,6 @@ fun OnboardingRoute( modifier = modifier.fillMaxSize(), onClickBoardSetup = onClickBoardSetup, onClickInvitationCode = onClickInvitationCode, - onClickSetting = onClickSetting ) profileCreateSuccessData?.let { @@ -131,7 +129,6 @@ fun OnboardingScreen( onboardingUiModel: OnboardingUiModel, onClickBoardSetup: () -> Unit, onClickInvitationCode: () -> Unit, - onClickSetting: () -> Unit, modifier: Modifier = Modifier, ) { Box( @@ -157,11 +154,6 @@ fun OnboardingScreen( modifier = modifier, navigationType = NavigationType.NONE, containerColor = Color.Transparent, - rightActionButtons = { - TopBarSetting( - onClick = { onClickSetting() } - ) - } ) Text( modifier = Modifier.padding(bottom = 52.dp), @@ -242,22 +234,6 @@ fun OnboardingScreen( } } -@Composable -fun TopBarSetting( - onClick: () -> Unit -) { - IconButton( - onClick = onClick, - modifier = Modifier.wrapContentSize() - ) { - Icon( - imageVector = ImageVector.vectorResource(id = designSystemResource.drawable.ic_setting), - contentDescription = "", - tint = ColorGray1_FF404249 - ) - } -} - @Composable fun ProfileCreateSuccessDialog( nickname: String, @@ -341,7 +317,6 @@ fun OnboardingScreenPreview() { ), onClickBoardSetup = {}, onClickInvitationCode = {}, - onClickSetting = {} ) } From d89c78705330cbeb8c281c130fac09f7c95c1239 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 14:21:17 +0900 Subject: [PATCH 09/15] =?UTF-8?q?refactor:=20RouteModel=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/core/data/auth/AuthTokenExpirationHandler.kt | 2 +- .../core/navigation/AuthNavigationEventHandler.kt | 1 + .../mission_mate/core/navigation/NavigationEventHandler.kt | 1 + .../mission_mate/core/navigation/{ => model}/RouteModel.kt | 3 +-- .../goalpanzi/mission_mate/feature/board/BoardNavigation.kt | 4 +--- .../mission_mate/feature/board/screen/BoardDetailViewModel.kt | 2 +- .../mission_mate/feature/board/screen/BoardFinishViewModel.kt | 2 +- .../mission_mate/feature/board/screen/BoardViewModel.kt | 2 +- .../feature/board/screen/VerificationPreviewViewModel.kt | 2 +- .../goalpanzi/mission_mate/feature/login/LoginNavigation.kt | 2 +- .../com/goalpanzi/mission_mate/feature/main/MainActivity.kt | 2 +- .../com/goalpanzi/mission_mate/feature/main/MainScreen.kt | 2 +- .../feature/main/component/MainBottomNavigationBar.kt | 4 ++-- .../mission_mate/feature/main/component/MainNavHost.kt | 2 +- .../mission_mate/feature/main/component/MainNavigator.kt | 2 +- .../mission_mate/feature/main/component/MainTabNavHost.kt | 2 +- .../goalpanzi/mission_mate/feature/main/ext/NavDestination.kt | 4 ++-- .../mission_mate/feature/onboarding/OnboardingNavigation.kt | 2 +- .../feature/onboarding/screen/OnboardingViewModel.kt | 2 +- .../mission_mate/feature/profile/ProfileNavigation.kt | 4 +--- .../feature/setting/navigation/SettingNavigation.kt | 2 +- 21 files changed, 23 insertions(+), 26 deletions(-) rename core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/{ => model}/RouteModel.kt (94%) diff --git a/core/data/auth/src/main/java/com/goalpanzi/mission_mate/core/data/auth/AuthTokenExpirationHandler.kt b/core/data/auth/src/main/java/com/goalpanzi/mission_mate/core/data/auth/AuthTokenExpirationHandler.kt index 8afaab16..0dc90db8 100644 --- a/core/data/auth/src/main/java/com/goalpanzi/mission_mate/core/data/auth/AuthTokenExpirationHandler.kt +++ b/core/data/auth/src/main/java/com/goalpanzi/mission_mate/core/data/auth/AuthTokenExpirationHandler.kt @@ -4,7 +4,7 @@ import com.goalpanzi.mission_mate.core.datastore.datasource.AuthDataSource import com.goalpanzi.mission_mate.core.datastore.datasource.DefaultDataSource import com.goalpanzi.mission_mate.core.datastore.datasource.MissionDataSource import com.goalpanzi.mission_mate.core.navigation.NavigationEventHandler -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import com.goalpanzi.mission_mate.core.navigation.di.AuthNavigation import com.goalpanzi.mission_mate.core.network.TokenExpirationHandler import kotlinx.coroutines.flow.collect diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/AuthNavigationEventHandler.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/AuthNavigationEventHandler.kt index e50dcefb..e713c6b4 100644 --- a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/AuthNavigationEventHandler.kt +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/AuthNavigationEventHandler.kt @@ -1,5 +1,6 @@ package com.goalpanzi.mission_mate.core.navigation +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/NavigationEventHandler.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/NavigationEventHandler.kt index 0118f02a..f9425e07 100644 --- a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/NavigationEventHandler.kt +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/NavigationEventHandler.kt @@ -1,5 +1,6 @@ package com.goalpanzi.mission_mate.core.navigation +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import kotlinx.coroutines.flow.SharedFlow interface NavigationEventHandler { diff --git a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/RouteModel.kt similarity index 94% rename from core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt rename to core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/RouteModel.kt index 9672e574..304d043e 100644 --- a/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/RouteModel.kt +++ b/core/navigation/src/main/java/com/goalpanzi/mission_mate/core/navigation/model/RouteModel.kt @@ -1,6 +1,5 @@ -package com.goalpanzi.mission_mate.core.navigation +package com.goalpanzi.mission_mate.core.navigation.model -import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel import kotlinx.serialization.Serializable sealed interface RouteModel { diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt index 807a9aa5..9df98fd2 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt @@ -1,14 +1,12 @@ package com.goalpanzi.mission_mate.feature.board import android.net.Uri -import androidx.compose.animation.AnimatedContentTransitionScope -import androidx.compose.animation.core.tween import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.toRoute -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft import com.goalpanzi.mission_mate.core.ui.util.slideInToUp import com.goalpanzi.mission_mate.core.ui.util.slideOutToDown diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardDetailViewModel.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardDetailViewModel.kt index eb5cc9bf..f7a310da 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardDetailViewModel.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardDetailViewModel.kt @@ -8,7 +8,7 @@ import com.goalpanzi.mission_mate.core.domain.common.DomainResult import com.goalpanzi.mission_mate.core.domain.mission.usecase.DeleteMissionUseCase import com.goalpanzi.mission_mate.core.domain.mission.usecase.GetMissionUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.GetCachedMemberIdUseCase -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.feature.board.model.MissionError import com.goalpanzi.mission_mate.feature.board.model.uimodel.MissionUiModel import dagger.hilt.android.lifecycle.HiltViewModel diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishViewModel.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishViewModel.kt index 097dc60a..7e7fe575 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishViewModel.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardFinishViewModel.kt @@ -10,7 +10,7 @@ import com.goalpanzi.mission_mate.core.domain.mission.usecase.CompleteMissionUse import com.goalpanzi.mission_mate.core.domain.mission.usecase.GetMissionRankUseCase import com.goalpanzi.mission_mate.core.domain.mission.usecase.SetMissionJoinedUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.ProfileUseCase -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardViewModel.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardViewModel.kt index dd2b7ff3..dcad510d 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardViewModel.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/BoardViewModel.kt @@ -18,7 +18,7 @@ import com.goalpanzi.mission_mate.core.domain.setting.usecase.GetViewedTooltipUs import com.goalpanzi.mission_mate.core.domain.setting.usecase.SetViewedTooltipUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.GetCachedMemberIdUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.ProfileUseCase -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.feature.board.model.BoardPiece import com.goalpanzi.mission_mate.feature.board.model.MissionError import com.goalpanzi.mission_mate.feature.board.model.MissionState diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/VerificationPreviewViewModel.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/VerificationPreviewViewModel.kt index 47e1212b..21141480 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/VerificationPreviewViewModel.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/screen/VerificationPreviewViewModel.kt @@ -8,7 +8,7 @@ import com.goalpanzi.mission_mate.core.domain.common.DomainResult import com.goalpanzi.mission_mate.core.domain.common.model.user.UserProfile import com.goalpanzi.mission_mate.core.domain.mission.usecase.VerifyMissionUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.ProfileUseCase -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.feature.board.model.CharacterUiModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow diff --git a/feature/login/src/main/java/com/goalpanzi/mission_mate/feature/login/LoginNavigation.kt b/feature/login/src/main/java/com/goalpanzi/mission_mate/feature/login/LoginNavigation.kt index fd9d81cc..7984a7de 100644 --- a/feature/login/src/main/java/com/goalpanzi/mission_mate/feature/login/LoginNavigation.kt +++ b/feature/login/src/main/java/com/goalpanzi/mission_mate/feature/login/LoginNavigation.kt @@ -3,7 +3,7 @@ package com.goalpanzi.mission_mate.feature.login import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel fun NavController.navigateToLogin() { this.navigate(RouteModel.Login) { diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt index 127a41a6..e642256e 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainActivity.kt @@ -8,7 +8,7 @@ import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import com.goalpanzi.mission_mate.core.designsystem.theme.MissionmateTheme import com.goalpanzi.mission_mate.core.domain.auth.usecase.LoginUseCase -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import com.goalpanzi.mission_mate.feature.main.component.MainNavigator import com.goalpanzi.mission_mate.feature.main.component.rememberMainNavigator import dagger.hilt.android.AndroidEntryPoint diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainScreen.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainScreen.kt index e1dd9436..66b71ff0 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainScreen.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/MainScreen.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import com.goalpanzi.mission_mate.feature.main.component.MainNavHost import com.goalpanzi.mission_mate.feature.main.component.MainNavigator import com.goalpanzi.mission_mate.feature.main.component.rememberMainNavigator diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt index a1c7c17c..9c130066 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt @@ -28,8 +28,8 @@ import com.goalpanzi.mission_mate.core.designsystem.theme.ColorGray1_FF404249 import com.goalpanzi.mission_mate.core.designsystem.theme.ColorGray4_FFE5E5E5 import com.goalpanzi.mission_mate.core.designsystem.theme.ColorOrange_FFFF5732 import com.goalpanzi.mission_mate.core.designsystem.theme.MissionMateTypography -import com.goalpanzi.mission_mate.core.navigation.RouteModel -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute import com.goalpanzi.mission_mate.feature.main.R internal const val MAIN_BOTTOM_NAVIGATION_BAR_HEIGHT = 48 diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt index e4f7de91..d5eeda6c 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavHost.kt @@ -18,7 +18,7 @@ import com.goalpanzi.mission_mate.core.designsystem.theme.ColorWhite_FFFFFFFF import com.goalpanzi.mission_mate.core.designsystem.util.isLightStatusBars import com.goalpanzi.mission_mate.core.designsystem.util.setStatusBar import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import com.goalpanzi.mission_mate.feature.board.boardDetailNavGraph import com.goalpanzi.mission_mate.feature.board.boardFinishNavGraph import com.goalpanzi.mission_mate.feature.board.userStoryNavGraph diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt index 72eb5180..d86c2531 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainNavigator.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.Lifecycle import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController import com.goalpanzi.mission_mate.core.navigation.model.MainTabDataModel -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import com.goalpanzi.mission_mate.feature.board.model.UserStory import com.goalpanzi.mission_mate.feature.board.navigateToBoardDetail import com.goalpanzi.mission_mate.feature.board.navigateToBoardFinish diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt index ea4486b7..5347b288 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt @@ -3,7 +3,7 @@ package com.goalpanzi.mission_mate.feature.main.component import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.feature.board.boardNavGraph import com.goalpanzi.mission_mate.feature.onboarding.onboardingNavGraph import com.goalpanzi.mission_mate.feature.setting.navigation.settingNavGraph diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/ext/NavDestination.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/ext/NavDestination.kt index 449e387a..6c7c0c78 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/ext/NavDestination.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/ext/NavDestination.kt @@ -1,8 +1,8 @@ package com.goalpanzi.mission_mate.feature.main.ext import androidx.navigation.NavDestination -import com.goalpanzi.mission_mate.core.navigation.RouteModel -import com.goalpanzi.mission_mate.core.navigation.fullPathName +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.fullPathName fun NavDestination?.compareTo(routeModel: RouteModel) : Boolean { return this?.route == routeModel.fullPathName() diff --git a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt index ecfe9106..39c10754 100644 --- a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt +++ b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt @@ -4,7 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd import com.goalpanzi.mission_mate.feature.onboarding.screen.OnboardingRoute diff --git a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingViewModel.kt b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingViewModel.kt index 5d600fca..92ecf322 100644 --- a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/screen/OnboardingViewModel.kt @@ -12,7 +12,7 @@ import com.goalpanzi.mission_mate.core.domain.onboarding.usecase.GetJoinedMissio import com.goalpanzi.mission_mate.core.domain.user.usecase.GetFcmTokenUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.ProfileUseCase import com.goalpanzi.mission_mate.core.domain.user.usecase.UpdateFcmTokenUseCase -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.MissionRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.feature.onboarding.model.OnboardingResultEvent import com.goalpanzi.mission_mate.feature.onboarding.model.OnboardingUiModel import dagger.hilt.android.lifecycle.HiltViewModel diff --git a/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt b/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt index 17188893..e44aa12f 100644 --- a/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt +++ b/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt @@ -1,11 +1,9 @@ package com.goalpanzi.mission_mate.feature.profile -import androidx.compose.animation.AnimatedContentTransitionScope -import androidx.compose.animation.core.tween import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable -import com.goalpanzi.mission_mate.core.navigation.RouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd diff --git a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt index e03a714d..bc8801b3 100644 --- a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt +++ b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt @@ -4,7 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable -import com.goalpanzi.mission_mate.core.navigation.RouteModel.MainTabRoute.SettingRouteModel +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.SettingRouteModel import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft import com.goalpanzi.mission_mate.feature.setting.screen.SettingRoute import com.goalpanzi.mission_mate.feature.setting.screen.WebViewScreen From c4171a787f5c7a2781af90ebcb0f7b6c9e79f238 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 14:44:25 +0900 Subject: [PATCH 10/15] =?UTF-8?q?feat:=20History=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/history/.gitignore | 1 + feature/history/build.gradle.kts | 21 ++++++++++++ feature/history/consumer-rules.pro | 0 feature/history/proguard-rules.pro | 21 ++++++++++++ .../history/ExampleInstrumentedTest.kt | 24 ++++++++++++++ feature/history/src/main/AndroidManifest.xml | 4 +++ .../feature/history/HistoryNavigation.kt | 25 ++++++++++++++ .../feature/history/screen/HistoryScreen.kt | 33 +++++++++++++++++++ .../feature/history/ExampleUnitTest.kt | 17 ++++++++++ feature/main/build.gradle.kts | 1 + .../feature/main/component/MainTabContent.kt | 6 ++-- .../feature/main/component/MainTabNavHost.kt | 4 ++- .../main/component/MainTabNavigator.kt | 5 +++ settings.gradle.kts | 1 + 14 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 feature/history/.gitignore create mode 100644 feature/history/build.gradle.kts create mode 100644 feature/history/consumer-rules.pro create mode 100644 feature/history/proguard-rules.pro create mode 100644 feature/history/src/androidTest/java/com/goalpanzi/mission_mate/feature/history/ExampleInstrumentedTest.kt create mode 100644 feature/history/src/main/AndroidManifest.xml create mode 100644 feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryNavigation.kt create mode 100644 feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/screen/HistoryScreen.kt create mode 100644 feature/history/src/test/java/com/goalpanzi/mission_mate/feature/history/ExampleUnitTest.kt diff --git a/feature/history/.gitignore b/feature/history/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/feature/history/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/history/build.gradle.kts b/feature/history/build.gradle.kts new file mode 100644 index 00000000..fdaa5885 --- /dev/null +++ b/feature/history/build.gradle.kts @@ -0,0 +1,21 @@ +import com.goalpanzi.mission_mate.convention.setNamespace + +plugins { + id("missionmate.android.feature") +} + +android { + setNamespace("feature.history") +} + +dependencies { + + implementation(libs.androidx.core.ktx) + implementation(libs.bundles.lifecycle) + implementation(libs.bundles.coroutines) + testImplementation(libs.bundles.test) + androidTestImplementation(libs.bundles.android.test) + + implementation(libs.coil.compose) + +} diff --git a/feature/history/consumer-rules.pro b/feature/history/consumer-rules.pro new file mode 100644 index 00000000..e69de29b diff --git a/feature/history/proguard-rules.pro b/feature/history/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/feature/history/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/feature/history/src/androidTest/java/com/goalpanzi/mission_mate/feature/history/ExampleInstrumentedTest.kt b/feature/history/src/androidTest/java/com/goalpanzi/mission_mate/feature/history/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..3ce524d0 --- /dev/null +++ b/feature/history/src/androidTest/java/com/goalpanzi/mission_mate/feature/history/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.goalpanzi.mission_mate.feature.history + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.goalpanzi.mission_mate.feature.history.test", appContext.packageName) + } +} diff --git a/feature/history/src/main/AndroidManifest.xml b/feature/history/src/main/AndroidManifest.xml new file mode 100644 index 00000000..8bdb7e14 --- /dev/null +++ b/feature/history/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryNavigation.kt b/feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryNavigation.kt new file mode 100644 index 00000000..5ee20309 --- /dev/null +++ b/feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/HistoryNavigation.kt @@ -0,0 +1,25 @@ +package com.goalpanzi.mission_mate.feature.history + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import androidx.navigation.navOptions +import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.HistoryRouteModel +import com.goalpanzi.mission_mate.feature.history.screen.HistoryRoute + +fun NavController.navigateToHistory( + navOptions: NavOptions? = navOptions { + popUpTo(this@navigateToHistory.graph.id) { + inclusive = true + } + } +) { + this.navigate(HistoryRouteModel.History, navOptions = navOptions) +} + +fun NavGraphBuilder.historyNavGraph() { + composable { + HistoryRoute() + } +} diff --git a/feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/screen/HistoryScreen.kt b/feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/screen/HistoryScreen.kt new file mode 100644 index 00000000..56479c61 --- /dev/null +++ b/feature/history/src/main/java/com/goalpanzi/mission_mate/feature/history/screen/HistoryScreen.kt @@ -0,0 +1,33 @@ +package com.goalpanzi.mission_mate.feature.history.screen + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.goalpanzi.mission_mate.core.designsystem.theme.MissionMateTypography + +@Composable +fun HistoryRoute( + modifier: Modifier = Modifier +) { + HistoryScreen( + modifier = modifier + ) +} + +@Composable +fun HistoryScreen( + modifier: Modifier = Modifier +) { + Box( + modifier = modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ){ + Text( + text = "준비중입니다", + style = MissionMateTypography.body_md_bold + ) + } +} diff --git a/feature/history/src/test/java/com/goalpanzi/mission_mate/feature/history/ExampleUnitTest.kt b/feature/history/src/test/java/com/goalpanzi/mission_mate/feature/history/ExampleUnitTest.kt new file mode 100644 index 00000000..2197a1cb --- /dev/null +++ b/feature/history/src/test/java/com/goalpanzi/mission_mate/feature/history/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.goalpanzi.mission_mate.feature.history + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} diff --git a/feature/main/build.gradle.kts b/feature/main/build.gradle.kts index bf1dc338..4ed0c2f8 100644 --- a/feature/main/build.gradle.kts +++ b/feature/main/build.gradle.kts @@ -20,4 +20,5 @@ dependencies { implementation(project(":feature:profile")) implementation(project(":feature:board")) implementation(project(":feature:setting")) + implementation(project(":feature:history")) } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt index 97afab64..0452b0e8 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabContent.kt @@ -36,7 +36,7 @@ fun MainTabContent( } MainTabDataModel.History -> { - + mainTabNavigator.navigationToHistory() } MainTabDataModel.Setting -> { @@ -44,7 +44,7 @@ fun MainTabContent( } MainTabDataModel.None -> { - + return@LaunchedEffect } } } @@ -62,7 +62,7 @@ fun MainTabContent( } MainTab.HISTORY -> { - + mainTabNavigator.navigationToHistory() } MainTab.SETTING -> { diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt index 5347b288..7e083cdb 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavHost.kt @@ -5,6 +5,7 @@ import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel import com.goalpanzi.mission_mate.feature.board.boardNavGraph +import com.goalpanzi.mission_mate.feature.history.historyNavGraph import com.goalpanzi.mission_mate.feature.onboarding.onboardingNavGraph import com.goalpanzi.mission_mate.feature.setting.navigation.settingNavGraph @@ -50,6 +51,7 @@ fun MainTabNavHost( onNavigateToPreview = { missionId, imageUrl -> mainNavigator.navigationToVerificationPreview(missionId, imageUrl) } - ) + ) + historyNavGraph() } } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt index 4bfe7d0f..77aa6de4 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainTabNavigator.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.remember import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController import com.goalpanzi.mission_mate.feature.board.navigateToBoard +import com.goalpanzi.mission_mate.feature.history.navigateToHistory import com.goalpanzi.mission_mate.feature.onboarding.navigateToOnboarding import com.goalpanzi.mission_mate.feature.setting.navigation.navigateToSetting @@ -15,6 +16,10 @@ class MainTabNavigator( navController.navigateToOnboarding(isAfterProfileCreate) } + fun navigationToHistory() { + navController.navigateToHistory() + } + fun navigationToSetting() { navController.navigateToSetting() } diff --git a/settings.gradle.kts b/settings.gradle.kts index f3e55deb..29508074 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -51,3 +51,4 @@ include(":core:domain:setting") include(":core:ui") include(":core:push") include(":core:notification") +include(":feature:history") From ac57eab7ad758bf431baf8006660d96db8f63c55 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Sun, 19 Jan 2025 14:54:20 +0900 Subject: [PATCH 11/15] =?UTF-8?q?feat:=20=ED=95=98=EB=8B=A8=20=EB=B0=94=20?= =?UTF-8?q?=ED=8F=B0=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/core/designsystem/theme/Type.kt | 10 +++++++++- .../feature/main/component/MainBottomNavigationBar.kt | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/theme/Type.kt b/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/theme/Type.kt index 18f6b60a..2c27d2ab 100644 --- a/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/theme/Type.kt +++ b/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/theme/Type.kt @@ -147,4 +147,12 @@ object MissionMateTypography { val body_sm_regular = body_sm.copy( fontWeight = FontWeight.Normal ) -} \ No newline at end of file + + private val tab = DefaultTextStyle.copy( + fontSize = 11.sp + ) + + val tab_regular = tab.copy( + fontWeight = FontWeight.Normal + ) +} diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt index 9c130066..38f3962e 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt @@ -101,7 +101,7 @@ fun MainBottomNavigationBar( label = { Text( text = stringResource(mainTab.labelRes), - style = MissionMateTypography.body_sm_regular.copy(fontSize = 10.sp), + style = MissionMateTypography.tab_regular, color = if(selected) ColorOrange_FFFF5732 else ColorGray1_FF404249 ) }, From e154efb9cc36fd6367d1c184ad90cbd2ce25f7f7 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Mon, 20 Jan 2025 23:16:33 +0900 Subject: [PATCH 12/15] =?UTF-8?q?fix:=20=EB=AF=B8=EC=85=98=20=EB=B3=B4?= =?UTF-8?q?=EB=93=9C=20=ED=99=94=EB=A9=B4=20=ED=88=B4=ED=8C=81=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/board/component/BoardTopView.kt | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt index 787dfc3e..7aea12f2 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardTopView.kt @@ -28,7 +28,7 @@ import com.goalpanzi.mission_mate.feature.board.R import com.goalpanzi.mission_mate.feature.board.model.MissionState import com.goalpanzi.mission_mate.feature.board.model.UserStory import com.goalpanzi.mission_mate.core.designsystem.component.StableImage - +import com.goalpanzi.mission_mate.core.designsystem.ext.clickableWithoutRipple @SuppressLint("UnrememberedMutableInteractionSource") @Composable @@ -81,16 +81,11 @@ fun BoardTopView( ) if(!viewedTooltip){ if (isAddingUserEnabled) { - // datastore 조건 추가 StableImage( modifier = Modifier .align(Alignment.TopEnd) - .clickable( - interactionSource = MutableInteractionSource(), - indication = null, - onClick = onClickTooltip - ) - .padding(end = 43.dp,top = 56.dp) + .clickableWithoutRipple { onClickTooltip() } + .padding(top = 48.dp) .width(161.dp), drawableResId = R.drawable.img_tooltip_mission_invitation_code, contentScale = ContentScale.Crop @@ -99,20 +94,16 @@ fun BoardTopView( StableImage( modifier = Modifier .align(Alignment.TopStart) - .clickable( - interactionSource = MutableInteractionSource(), - indication = null, - onClick = onClickTooltip - ) - .padding(start = 8.dp, top = 56.dp) + .clickableWithoutRipple { + onClickTooltip() + } + .padding(start = 8.dp, top = 48.dp) .width(161.dp), drawableResId = R.drawable.img_tooltip_mission_detail, contentScale = ContentScale.Crop ) } } - - } } From 4ce8d6aed766f0cf726c2fa80b2b956b20fceb43 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Thu, 23 Jan 2025 08:08:42 +0900 Subject: [PATCH 13/15] =?UTF-8?q?refactor:=20slide=20=EC=95=A0=EB=8B=88?= =?UTF-8?q?=EB=A9=94=EC=9D=B4=EC=85=98=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/core/ui/util/AnimatedUtil.kt | 6 +++--- .../feature/board/BoardNavigation.kt | 16 ++++++++-------- .../feature/onboarding/OnboardingNavigation.kt | 6 +++--- .../feature/profile/ProfileNavigation.kt | 6 +++--- .../setting/navigation/SettingNavigation.kt | 6 +++--- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt b/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt index 932fac08..600405aa 100644 --- a/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt +++ b/core/ui/src/main/java/com/goalpanzi/mission_mate/core/ui/util/AnimatedUtil.kt @@ -7,7 +7,7 @@ import androidx.compose.animation.ExitTransition import androidx.compose.animation.core.tween import androidx.navigation.NavBackStackEntry -fun AnimatedContentTransitionScope.slideInFromLeft( +fun AnimatedContentTransitionScope.slideInFromEnd( durationMills: Int = 300 ): EnterTransition { return slideIntoContainer( @@ -25,7 +25,7 @@ fun AnimatedContentTransitionScope.slideOutToEnd( ) } -fun AnimatedContentTransitionScope.slideInToUp( +fun AnimatedContentTransitionScope.slideInFromBottom( durationMills: Int = 300 ): EnterTransition { return slideIntoContainer( @@ -34,7 +34,7 @@ fun AnimatedContentTransitionScope.slideInToUp( ) } -fun AnimatedContentTransitionScope.slideOutToDown( +fun AnimatedContentTransitionScope.slideOutToBottom( durationMills: Int = 300 ): ExitTransition { return slideOutOfContainer( diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt index 9df98fd2..a47c0a8e 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/BoardNavigation.kt @@ -7,9 +7,9 @@ import androidx.navigation.NavOptions import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel -import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft -import com.goalpanzi.mission_mate.core.ui.util.slideInToUp -import com.goalpanzi.mission_mate.core.ui.util.slideOutToDown +import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd +import com.goalpanzi.mission_mate.core.ui.util.slideInFromBottom +import com.goalpanzi.mission_mate.core.ui.util.slideOutToBottom import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd import com.goalpanzi.mission_mate.feature.board.model.CharacterUiModel import com.goalpanzi.mission_mate.feature.board.model.UserStory @@ -62,7 +62,7 @@ fun NavGraphBuilder.boardDetailNavGraph( ) { composable( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popExitTransition = { slideOutToEnd() @@ -111,10 +111,10 @@ fun NavGraphBuilder.userStoryNavGraph( ) { composable( enterTransition = { - slideInToUp() + slideInFromBottom() }, exitTransition = { - slideOutToDown() + slideOutToBottom() } ) { backStackEntry -> backStackEntry.toRoute().run { @@ -144,10 +144,10 @@ fun NavGraphBuilder.verificationPreviewNavGraph( ) { composable( enterTransition = { - slideInToUp() + slideInFromBottom() }, exitTransition = { - slideOutToDown() + slideOutToBottom() } ) { VerificationPreviewRoute( diff --git a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt index 39c10754..dd207871 100644 --- a/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt +++ b/feature/onboarding/src/main/java/com/goalpanzi/mission_mate/feature/onboarding/OnboardingNavigation.kt @@ -5,7 +5,7 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel -import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft +import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd import com.goalpanzi.mission_mate.feature.onboarding.screen.OnboardingRoute import com.goalpanzi.mission_mate.feature.onboarding.screen.boardsetup.BoardSetupRoute @@ -61,7 +61,7 @@ fun NavGraphBuilder.boardSetupNavGraph( ) { composable( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popExitTransition = { slideOutToEnd() @@ -90,7 +90,7 @@ fun NavGraphBuilder.invitationCodeNavGraph( ) { composable( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popExitTransition = { slideOutToEnd() diff --git a/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt b/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt index e44aa12f..824ae179 100644 --- a/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt +++ b/feature/profile/src/main/java/com/goalpanzi/mission_mate/feature/profile/ProfileNavigation.kt @@ -4,7 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable import com.goalpanzi.mission_mate.core.navigation.model.RouteModel -import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft +import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd enum class ProfileSettingType { @@ -25,7 +25,7 @@ fun NavGraphBuilder.profileNavGraph( ) { composable( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popExitTransition = { slideOutToEnd() @@ -38,7 +38,7 @@ fun NavGraphBuilder.profileNavGraph( } composable ( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popExitTransition = { slideOutToEnd() diff --git a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt index bc8801b3..4bd76229 100644 --- a/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt +++ b/feature/setting/src/main/java/com/goalpanzi/mission_mate/feature/setting/navigation/SettingNavigation.kt @@ -5,7 +5,7 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.SettingRouteModel -import com.goalpanzi.mission_mate.core.ui.util.slideInFromLeft +import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd import com.goalpanzi.mission_mate.feature.setting.screen.SettingRoute import com.goalpanzi.mission_mate.feature.setting.screen.WebViewScreen @@ -51,7 +51,7 @@ fun NavGraphBuilder.servicePolicyNavGraph( ) { composable( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popEnterTransition = null, ) { @@ -67,7 +67,7 @@ fun NavGraphBuilder.privacyPolicyNavGraph( ) { composable( enterTransition = { - slideInFromLeft() + slideInFromEnd() }, popEnterTransition = null, ) { From 204045e7958bfb3ad48796dcce8f815428b8faaf Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Mon, 27 Jan 2025 10:02:47 +0900 Subject: [PATCH 14/15] =?UTF-8?q?feat:=20dpToSp=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EB=B0=8F=20=ED=95=98=EB=8B=A8=ED=83=AD=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/core/designsystem/ext/TextUnit.kt | 9 +++++++++ .../feature/main/component/MainBottomNavigationBar.kt | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/ext/TextUnit.kt diff --git a/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/ext/TextUnit.kt b/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/ext/TextUnit.kt new file mode 100644 index 00000000..15ec8196 --- /dev/null +++ b/core/designsystem/src/main/java/com/goalpanzi/mission_mate/core/designsystem/ext/TextUnit.kt @@ -0,0 +1,9 @@ +package com.goalpanzi.mission_mate.core.designsystem.ext + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.TextUnit + +@Composable +fun dpToSp(dp: Dp) : TextUnit = with(LocalDensity.current) { dp.toSp() } diff --git a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt index 38f3962e..1dc70fcf 100644 --- a/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt +++ b/feature/main/src/main/java/com/goalpanzi/mission_mate/feature/main/component/MainBottomNavigationBar.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavDestination import com.goalpanzi.mission_mate.core.designsystem.ext.clickableWithoutRipple +import com.goalpanzi.mission_mate.core.designsystem.ext.dpToSp import com.goalpanzi.mission_mate.core.designsystem.theme.ColorGray1_FF404249 import com.goalpanzi.mission_mate.core.designsystem.theme.ColorGray4_FFE5E5E5 import com.goalpanzi.mission_mate.core.designsystem.theme.ColorOrange_FFFF5732 @@ -101,7 +102,9 @@ fun MainBottomNavigationBar( label = { Text( text = stringResource(mainTab.labelRes), - style = MissionMateTypography.tab_regular, + style = MissionMateTypography.tab_regular.copy( + fontSize = dpToSp(11.dp) + ), color = if(selected) ColorOrange_FFFF5732 else ColorGray1_FF404249 ) }, From 0ed50f80517be80bac8c6ea2bb2e860845ec8ac8 Mon Sep 17 00:00:00 2001 From: eshc123 <> Date: Mon, 27 Jan 2025 10:04:59 +0900 Subject: [PATCH 15/15] =?UTF-8?q?feat:=20=EB=AF=B8=EC=85=98=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=EB=B2=84=ED=8A=BC=20=EB=A7=88=EC=A7=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission_mate/feature/board/component/BoardBottomView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardBottomView.kt b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardBottomView.kt index e9d3fb7a..ad296cbc 100644 --- a/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardBottomView.kt +++ b/feature/board/src/main/java/com/goalpanzi/mission_mate/feature/board/component/BoardBottomView.kt @@ -40,7 +40,7 @@ fun BoardBottomView( .navigationBarsPadding() .clip(RoundedCornerShape(topEnd = 20.dp, topStart = 20.dp)) .background(ColorWhite_FFFFFFFF.copy(alpha = 0.7f)) - .padding(top = 16.dp, bottom = 36.dp, start = 24.dp, end = 24.dp), + .padding(top = 16.dp, bottom = 16.dp, start = 24.dp, end = 24.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(4.dp) ) {