diff --git a/app/src/main/java/org/sopt/certi/presentation/model/UrlConstants.kt b/app/src/main/java/org/sopt/certi/presentation/model/UrlConstants.kt new file mode 100644 index 00000000..84298e21 --- /dev/null +++ b/app/src/main/java/org/sopt/certi/presentation/model/UrlConstants.kt @@ -0,0 +1,7 @@ +package org.sopt.certi.presentation.model + +object UrlConstants { + const val PRIVACY_POLICY = "https://tremendous-baryonyx-347.notion.site/3015e9d69a268066a9c2fcd0ed802c02?pvs=73" + const val TERMS_OF_SERVICE = "https://tremendous-baryonyx-347.notion.site/3015e9d69a2680a98ce4e96faf2ce06d?pvs=73" + const val INQUIRY_OPEN_CHAT = "https://open.kakao.com/o/sTZ4Jwfi" +} diff --git a/app/src/main/java/org/sopt/certi/presentation/ui/mypage/MyPageMainScreen.kt b/app/src/main/java/org/sopt/certi/presentation/ui/mypage/MyPageMainScreen.kt index cd4a4a4f..91f8bac0 100644 --- a/app/src/main/java/org/sopt/certi/presentation/ui/mypage/MyPageMainScreen.kt +++ b/app/src/main/java/org/sopt/certi/presentation/ui/mypage/MyPageMainScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -23,6 +24,7 @@ import org.sopt.certi.core.util.screenHeightDp import org.sopt.certi.core.util.screenWidthDp import org.sopt.certi.domain.model.user.CertificationCount import org.sopt.certi.domain.model.user.MyPageInfo +import org.sopt.certi.presentation.model.UrlConstants import org.sopt.certi.presentation.ui.mypage.component.MyPageCertMenuItem import org.sopt.certi.presentation.ui.mypage.component.MyPageMenuItem import org.sopt.certi.presentation.ui.mypage.component.MyPageProfile @@ -36,10 +38,10 @@ fun MyPageMainRoute( navigateToSchoolInfo: () -> Unit, navigateToCertManage: () -> Unit, navigateToSetting: () -> Unit, - navigateToQuestion: () -> Unit, viewModel: MyPageMainViewModel = hiltViewModel() ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() + val uriHandler = LocalUriHandler.current LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { viewModel.loadMyPageData() @@ -51,7 +53,7 @@ fun MyPageMainRoute( onSchoolInfoClick = navigateToSchoolInfo, onCertManageClick = navigateToCertManage, onSettingClick = navigateToSetting, - onQuestionsClick = navigateToQuestion, + onQuestionsClick = { uriHandler.openUri(UrlConstants.INQUIRY_OPEN_CHAT) }, modifier = Modifier.padding(padding) ) } diff --git a/app/src/main/java/org/sopt/certi/presentation/ui/mypage/navigation/MyPageNavigation.kt b/app/src/main/java/org/sopt/certi/presentation/ui/mypage/navigation/MyPageNavigation.kt index f16396cb..59ebefaf 100644 --- a/app/src/main/java/org/sopt/certi/presentation/ui/mypage/navigation/MyPageNavigation.kt +++ b/app/src/main/java/org/sopt/certi/presentation/ui/mypage/navigation/MyPageNavigation.kt @@ -47,8 +47,7 @@ fun NavGraphBuilder.myPageNavGraph( navigateToPersonalInfo = navController::navigateToPersonalInfo, navigateToSchoolInfo = navController::navigateToAcademicInfo, navigateToCertManage = navController::navigateToMyCertification, - navigateToSetting = navController::navigateToSetting, - navigateToQuestion = {} + navigateToSetting = navController::navigateToSetting ) } composable { diff --git a/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingNotificationScreen.kt b/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingNotificationScreen.kt index 592d7b22..7440ef34 100644 --- a/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingNotificationScreen.kt +++ b/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingNotificationScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview @@ -41,6 +42,7 @@ import org.sopt.certi.core.util.noRippleClickable import org.sopt.certi.core.util.screenHeightDp import org.sopt.certi.core.util.screenWidthDp import org.sopt.certi.core.util.widthForScreenPercentage +import org.sopt.certi.presentation.model.UrlConstants import org.sopt.certi.presentation.ui.setting.component.CustomCheckbox import org.sopt.certi.presentation.ui.setting.component.CustomSwitch import org.sopt.certi.presentation.ui.setting.component.MarketingConfirmSnackbar @@ -58,6 +60,7 @@ fun SettingNotificationRoute( val uiState by viewModel.uiState.collectAsStateWithLifecycle() val lifecycleOwner = LocalLifecycleOwner.current val snackbarHostState = remember { SnackbarHostState() } + val uriHandler = LocalUriHandler.current LaunchedEffect(viewModel.sideEffect, lifecycleOwner) { viewModel.sideEffect.flowWithLifecycle(lifecycleOwner.lifecycle).collect { @@ -95,6 +98,7 @@ fun SettingNotificationRoute( onCheckboxCheckChange = { checked -> viewModel.onCheckboxCheckChange(checked) }, + onPrivacyAgreement = { uriHandler.openUri(UrlConstants.TERMS_OF_SERVICE) }, modifier = Modifier.padding(innerPadding) ) } @@ -108,6 +112,7 @@ private fun SettingNotificationScreen( uiState: SettingNotificationUiState, onSwitchCheckChange: (Boolean) -> Unit, onCheckboxCheckChange: (Boolean) -> Unit, + onPrivacyAgreement: () -> Unit, modifier: Modifier = Modifier ) { Column( @@ -176,7 +181,7 @@ private fun SettingNotificationScreen( Icon( imageVector = ImageVector.vectorResource(R.drawable.ic_arrowright_24), contentDescription = null, - modifier = Modifier.noRippleClickable({}) + modifier = Modifier.noRippleClickable(onPrivacyAgreement) ) } @@ -204,7 +209,8 @@ private fun SettingNotificationPreview() { SettingNotificationScreen( uiState = uiState, onSwitchCheckChange = { }, - onCheckboxCheckChange = {} + onCheckboxCheckChange = {}, + onPrivacyAgreement = {} ) } } diff --git a/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingScreen.kt b/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingScreen.kt index 1639ff9a..489e6eb2 100644 --- a/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingScreen.kt +++ b/app/src/main/java/org/sopt/certi/presentation/ui/setting/SettingScreen.kt @@ -27,10 +27,12 @@ import org.sopt.certi.presentation.ui.setting.component.LogoutButton import org.sopt.certi.ui.theme.CERTITheme import org.sopt.certi.ui.theme.CertiTheme import androidx.compose.runtime.getValue +import androidx.compose.ui.platform.LocalUriHandler import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.flowWithLifecycle import org.sopt.certi.BuildConfig import org.sopt.certi.core.component.dialog.CertiDeleteDialog +import org.sopt.certi.presentation.model.UrlConstants import org.sopt.certi.presentation.ui.setting.component.DeleteAccountDialog import org.sopt.certi.presentation.ui.setting.sideEffect.SettingSideEffect @@ -42,8 +44,8 @@ fun SettingRoute( viewModel: SettingViewModel = hiltViewModel() ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() - val lifecycleOwner = LocalLifecycleOwner.current + val uriHandler = LocalUriHandler.current LaunchedEffect(viewModel.sideEffect, lifecycleOwner) { viewModel.sideEffect.flowWithLifecycle(lifecycleOwner.lifecycle).collect { @@ -71,6 +73,7 @@ fun SettingRoute( SettingScreen( onNavigateToSettingNotification = navigateToSettingNotification, + onPrivacyPolicyClick = { uriHandler.openUri(UrlConstants.PRIVACY_POLICY) }, onDeleteAccountClick = viewModel::onDeleteAccountClick, onLogoutClick = viewModel::onLogoutClick, modifier = Modifier.padding(padding) @@ -80,6 +83,7 @@ fun SettingRoute( @Composable fun SettingScreen( onNavigateToSettingNotification: () -> Unit, + onPrivacyPolicyClick: () -> Unit, onDeleteAccountClick: () -> Unit, onLogoutClick: () -> Unit, modifier: Modifier = Modifier @@ -113,7 +117,7 @@ fun SettingScreen( MenuRow( text = stringResource(R.string.setting_privacy_policy), - onClick = {} + onClick = onPrivacyPolicyClick ) MenuRow( @@ -146,6 +150,7 @@ private fun SettingPreview() { CERTITheme { SettingScreen( onNavigateToSettingNotification = {}, + onPrivacyPolicyClick = {}, onDeleteAccountClick = {}, onLogoutClick = {} )