From d4f26450322234cc6ece672b93242941d4407b08 Mon Sep 17 00:00:00 2001 From: StopStone Date: Mon, 6 Oct 2025 20:11:21 +0900 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=99=94=EB=A9=B4=20=EC=9D=B4=ED=83=88=20?= =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EC=96=BC=EB=A1=9C=EA=B7=B8=EC=97=90=20?= =?UTF-8?q?=EA=B3=B5=EC=9A=A9=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `EditorExitDialog`에서 직접 `AlertDialog`를 구현하던 방식에서 공용 다이얼로그 컴포저블인 `NearBasicDialog`를 사용하도록 변경했습니다. --- .../dialog/EditorExitDialog.kt | 41 ++++--------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt index df55ac6d..41b32a10 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt @@ -1,15 +1,11 @@ package com.alarmy.near.presentation.feature.friendprofileedittor.dialog -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.AlertDialog -import androidx.compose.material3.Text -import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp import com.alarmy.near.R +import com.alarmy.near.presentation.ui.component.dialog.NearBasicDialog import com.alarmy.near.presentation.ui.theme.NearTheme @Composable @@ -18,33 +14,14 @@ internal fun EditorExitDialog( onDismissRequest: () -> Unit, onConfirm: () -> Unit, ) { - AlertDialog( - modifier = modifier, - onDismissRequest = onDismissRequest, - title = { - Text(text = stringResource(R.string.editor_exit_title)) - }, - text = { - Text( - text = - stringResource(R.string.editor_exit_content), - ) - }, - confirmButton = { - TextButton( - onClick = onConfirm, - ) { - Text(stringResource(R.string.editor_exit_confirm)) - } - }, - dismissButton = { - TextButton( - onClick = onDismissRequest, - ) { - Text(stringResource(R.string.editor_exit_dismiss)) - } - }, - shape = RoundedCornerShape(24.dp), + NearBasicDialog( + onDismiss = onDismissRequest, + title = stringResource(R.string.editor_exit_title), + body = stringResource(R.string.editor_exit_content), + dismissButtonText = stringResource(R.string.editor_exit_dismiss), + confirmButtonText = stringResource(R.string.editor_exit_confirm), + onDismissButtonClick = onDismissRequest, + onConfirmButtonClick = onConfirm, ) } From a5e535e3e46d7a2914d2f0d4739e066a282e6a0c Mon Sep 17 00:00:00 2001 From: StopStone Date: Mon, 6 Oct 2025 20:26:06 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=EC=B9=9C=EA=B5=AC=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=EC=88=98=EC=A0=95=20=EC=8B=9C=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=ED=99=95=EC=9D=B8=20=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=ED=91=9C=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 친구 프로필 수정 화면에서 '수정 완료' 버튼을 클릭했을 때, 저장 여부를 묻는 확인 다이얼로그가 표시되도록 기능을 추가했습니다. - 다이얼로그에 사용될 문자열 리소스를 `strings.xml`에 추가했습니다. --- .../FriendProfileEditorScreen.kt | 26 +++++++++++++++---- Near/app/src/main/res/values/strings.xml | 5 ++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt index cdcf3714..8423ec80 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt @@ -8,13 +8,10 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.RoundedCornerShape @@ -29,7 +26,6 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle @@ -54,6 +50,7 @@ import com.alarmy.near.presentation.feature.friendprofileedittor.uistate.FriendP import com.alarmy.near.presentation.feature.friendprofileedittor.uistate.FriendProfileEditorUIState import com.alarmy.near.presentation.ui.component.NearFrame import com.alarmy.near.presentation.ui.component.appbar.NearTopAppbar +import com.alarmy.near.presentation.ui.component.dialog.NearBasicDialog import com.alarmy.near.presentation.ui.component.radiobutton.NearSmallRadioButton import com.alarmy.near.presentation.ui.component.textfield.NearLimitedTextField import com.alarmy.near.presentation.ui.component.textfield.NearTextField @@ -70,6 +67,7 @@ fun FriendProfileEditorRoute( ) { val friendProfileEditorUIState = viewModel.uiState.collectAsStateWithLifecycle() val warningDialogState = remember { mutableStateOf(false) } + val saveConfirmDialogState = remember { mutableStateOf(false) } val context = LocalContext.current LaunchedEffect(viewModel.uiEvent) { @@ -103,6 +101,7 @@ fun FriendProfileEditorRoute( FriendProfileEditorScreen( friendProfileEditorUIState = friendProfileEditorUIState.value, dialogState = warningDialogState.value, + saveConfirmDialogState = saveConfirmDialogState.value, onClickBackButton = viewModel::onExit, onNameChanged = viewModel::onNameChanged, onRelationChanged = viewModel::onRelationChanged, @@ -116,6 +115,7 @@ fun FriendProfileEditorRoute( onSubmit = viewModel::onSubmit, onEditorExit = onClickBackButton, onCloseDialog = { warningDialogState.value = false }, + onSaveConfirmDialogStateChanged = { saveConfirmDialogState.value = it }, ) } @@ -124,6 +124,7 @@ fun FriendProfileEditorRoute( fun FriendProfileEditorScreen( modifier: Modifier = Modifier, dialogState: Boolean = false, + saveConfirmDialogState: Boolean = false, friendProfileEditorUIState: FriendProfileEditorUIState, onClickBackButton: () -> Unit = {}, onNameChanged: (String) -> Unit = {}, @@ -138,6 +139,7 @@ fun FriendProfileEditorScreen( onSubmit: () -> Unit = {}, onEditorExit: () -> Unit = {}, onCloseDialog: () -> Unit = {}, + onSaveConfirmDialogStateChanged: (Boolean) -> Unit = {}, ) { val showBottomSheet = remember { mutableStateOf(false) } if (showBottomSheet.value) { @@ -158,6 +160,20 @@ fun FriendProfileEditorScreen( }, ) } + + if (saveConfirmDialogState) { + NearBasicDialog( + onDismiss = { onSaveConfirmDialogStateChanged(false) }, + body = stringResource(R.string.editor_save_confirm_content), + dismissButtonText = stringResource(R.string.editor_save_confirm_cancel), + confirmButtonText = stringResource(R.string.editor_save_confirm_save), + onDismissButtonClick = { onSaveConfirmDialogStateChanged(false) }, + onConfirmButtonClick = { + onSaveConfirmDialogStateChanged(false) + onSubmit() + }, + ) + } NearFrame(modifier = modifier) { LazyColumn(modifier = Modifier.fillMaxSize()) { item { @@ -169,7 +185,7 @@ fun FriendProfileEditorScreen( Text( modifier = Modifier.onNoRippleClick(onClick = { - onSubmit() + onSaveConfirmDialogStateChanged(true) }), text = stringResource(R.string.friend_profile_editor_edit_complete_text), style = NearTheme.typography.B1_16_BOLD, diff --git a/Near/app/src/main/res/values/strings.xml b/Near/app/src/main/res/values/strings.xml index 2c87a53a..5f01c991 100644 --- a/Near/app/src/main/res/values/strings.xml +++ b/Near/app/src/main/res/values/strings.xml @@ -92,6 +92,11 @@ 화면을 나가면 \n수정 내용은 저장되지 않아요. 확인 취소 + + + 수정을 완료하시겠습니까? + 저장 + 취소 월요일 화요일 수요일 From f03a653fe60b8a2cd8b61604620603d5955a2b97 Mon Sep 17 00:00:00 2001 From: StopStone Date: Mon, 6 Oct 2025 20:32:25 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=20=ED=83=88?= =?UTF-8?q?=ED=87=B4=20=ED=99=95=EC=9D=B8=20=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 회원 탈퇴 시 한 번 더 확인하는 `WithdrawConfirmDialog`를 추가했습니다. - '탈퇴하기' 버튼을 클릭하면 `WithdrawConfirmDialog`가 표시되도록 `WithdrawScreen`의 로직을 수정했습니다. - 다이얼로그에 사용될 문자열 리소스를 `strings.xml`에 추가했습니다. --- .../feature/myprofile/WithdrawScreen.kt | 20 +++++++++- .../myprofile/dialog/WithdrawConfirmDialog.kt | 37 +++++++++++++++++++ Near/app/src/main/res/values/strings.xml | 5 +++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt index ad57b6ce..5f7e4796 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -22,6 +23,7 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.alarmy.near.R +import com.alarmy.near.presentation.feature.myprofile.dialog.WithdrawConfirmDialog import com.alarmy.near.presentation.feature.myprofile.model.WithdrawReason import com.alarmy.near.presentation.ui.component.NearFrame import com.alarmy.near.presentation.ui.component.appbar.NearCancelTopAppBar @@ -41,6 +43,7 @@ fun WithdrawRoute( onShowErrorSnackBar: (Throwable?) -> Unit = {}, ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() + val withdrawConfirmDialogState = remember { mutableStateOf(false) } // 통합된 이벤트 처리 LaunchedEffect(viewModel.uiEvent) { @@ -61,20 +64,24 @@ fun WithdrawRoute( WithdrawScreen( uiState = uiState, + withdrawConfirmDialogState = withdrawConfirmDialogState.value, onSelectReason = viewModel::selectReason, onUpdateOtherReasonText = viewModel::updateOtherReasonText, onSubmitWithdrawRequest = viewModel::submitWithdrawRequest, onNavigateBack = viewModel::onNavigateBack, + onWithdrawConfirmDialogStateChanged = { withdrawConfirmDialogState.value = it }, ) } @Composable fun WithdrawScreen( uiState: WithdrawUiState, + withdrawConfirmDialogState: Boolean = false, onSelectReason: (WithdrawReason) -> Unit, onUpdateOtherReasonText: (String) -> Unit, onSubmitWithdrawRequest: () -> Unit, onNavigateBack: () -> Unit, + onWithdrawConfirmDialogStateChanged: (Boolean) -> Unit = {}, ) { // 4개의 탈퇴 사유 리스트 생성 val withdrawReasons = remember { WithdrawReason.entries } @@ -171,7 +178,7 @@ fun WithdrawScreen( modifier = Modifier.weight(1f), enabled = uiState.isWithdrawButtonEnabled, onClick = { - onSubmitWithdrawRequest() + onWithdrawConfirmDialogStateChanged(true) }, text = stringResource(R.string.withdraw_confirm_button), contentPadding = PaddingValues(vertical = 16.dp), @@ -179,6 +186,17 @@ fun WithdrawScreen( } Spacer(modifier = Modifier.size(24.dp)) } + + // 탈퇴 확인 다이얼로그 + if (withdrawConfirmDialogState) { + WithdrawConfirmDialog( + onDismissRequest = { onWithdrawConfirmDialogStateChanged(false) }, + onConfirm = { + onWithdrawConfirmDialogStateChanged(false) + onSubmitWithdrawRequest() + }, + ) + } } @Composable diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt new file mode 100644 index 00000000..37494bca --- /dev/null +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt @@ -0,0 +1,37 @@ +package com.alarmy.near.presentation.feature.myprofile.dialog + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.alarmy.near.R +import com.alarmy.near.presentation.ui.component.dialog.NearOutlinedDialog +import com.alarmy.near.presentation.ui.theme.NearTheme + +@Composable +internal fun WithdrawConfirmDialog( + modifier: Modifier = Modifier, + onDismissRequest: () -> Unit, + onConfirm: () -> Unit, +) { + NearOutlinedDialog( + onDismiss = onDismissRequest, + title = null, + body = stringResource(R.string.withdraw_confirm_content), + dismissButtonText = stringResource(R.string.withdraw_confirm_cancel), + confirmButtonText = stringResource(R.string.withdraw_confirm_withdraw), + onDismissButtonClick = onDismissRequest, + onConfirmButtonClick = onConfirm, + ) +} + +@Preview(showBackground = true) +@Composable +fun WithdrawConfirmDialogPreview() { + NearTheme { + WithdrawConfirmDialog( + onDismissRequest = { }, + onConfirm = {}, + ) + } +} diff --git a/Near/app/src/main/res/values/strings.xml b/Near/app/src/main/res/values/strings.xml index 5f01c991..6d2a2354 100644 --- a/Near/app/src/main/res/values/strings.xml +++ b/Near/app/src/main/res/values/strings.xml @@ -128,6 +128,11 @@ 편하게 의견을 남겨주세요. 그만두기 탈퇴하기 + + + 탈퇴 시 계정 및 이용 내역이\n모두 삭제되며, 복구가 불가능합니다.\n정말 탈퇴하시겠습니까? + 취소 + 탈퇴하기 1글자 이상 입력해주세요. From 8b688d59b4ccbbf14b7335ffe1de5ed1af9819e0 Mon Sep 17 00:00:00 2001 From: StopStone Date: Mon, 6 Oct 2025 20:35:09 +0900 Subject: [PATCH 4/6] =?UTF-8?q?refactor:=20FriendProfileEditorScreen.kt=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=99=95=EC=9D=B8=20=EB=8B=A4=EC=9D=B4?= =?UTF-8?q?=EC=96=BC=EB=A1=9C=EA=B7=B8=20=ED=8C=8C=EC=9D=BC/=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `FriendProfileEditorScreen`에서 사용하던 저장 확인 다이얼로그를 `SaveConfirmDialog` 컴포저블로 분리하여 재사용성을 높였습니다. - 기존 `NearBasicDialog`를 직접 사용하던 로직을 새로 생성된 `SaveConfirmDialog`로 대체했습니다. --- .../FriendProfileEditorScreen.kt | 12 +++---- .../dialog/SaveConfirmDialog.kt | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt index 8423ec80..772a548f 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt @@ -46,11 +46,11 @@ import com.alarmy.near.model.ReminderInterval import com.alarmy.near.presentation.feature.friendprofileedittor.component.NearDatePicker import com.alarmy.near.presentation.feature.friendprofileedittor.component.ReminderIntervalBottomSheet import com.alarmy.near.presentation.feature.friendprofileedittor.dialog.EditorExitDialog +import com.alarmy.near.presentation.feature.friendprofileedittor.dialog.SaveConfirmDialog import com.alarmy.near.presentation.feature.friendprofileedittor.uistate.FriendProfileEditorUIEvent import com.alarmy.near.presentation.feature.friendprofileedittor.uistate.FriendProfileEditorUIState import com.alarmy.near.presentation.ui.component.NearFrame import com.alarmy.near.presentation.ui.component.appbar.NearTopAppbar -import com.alarmy.near.presentation.ui.component.dialog.NearBasicDialog import com.alarmy.near.presentation.ui.component.radiobutton.NearSmallRadioButton import com.alarmy.near.presentation.ui.component.textfield.NearLimitedTextField import com.alarmy.near.presentation.ui.component.textfield.NearTextField @@ -162,13 +162,9 @@ fun FriendProfileEditorScreen( } if (saveConfirmDialogState) { - NearBasicDialog( - onDismiss = { onSaveConfirmDialogStateChanged(false) }, - body = stringResource(R.string.editor_save_confirm_content), - dismissButtonText = stringResource(R.string.editor_save_confirm_cancel), - confirmButtonText = stringResource(R.string.editor_save_confirm_save), - onDismissButtonClick = { onSaveConfirmDialogStateChanged(false) }, - onConfirmButtonClick = { + SaveConfirmDialog( + onDismissRequest = { onSaveConfirmDialogStateChanged(false) }, + onConfirm = { onSaveConfirmDialogStateChanged(false) onSubmit() }, diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt new file mode 100644 index 00000000..707bea40 --- /dev/null +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt @@ -0,0 +1,36 @@ +package com.alarmy.near.presentation.feature.friendprofileedittor.dialog + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.alarmy.near.R +import com.alarmy.near.presentation.ui.component.dialog.NearBasicDialog +import com.alarmy.near.presentation.ui.theme.NearTheme + +@Composable +internal fun SaveConfirmDialog( + modifier: Modifier = Modifier, + onDismissRequest: () -> Unit, + onConfirm: () -> Unit, +) { + NearBasicDialog( + onDismiss = onDismissRequest, + body = stringResource(R.string.editor_save_confirm_content), + dismissButtonText = stringResource(R.string.editor_save_confirm_cancel), + confirmButtonText = stringResource(R.string.editor_save_confirm_save), + onDismissButtonClick = onDismissRequest, + onConfirmButtonClick = onConfirm, + ) +} + +@Preview(showBackground = true) +@Composable +fun SaveConfirmDialogPreview() { + NearTheme { + SaveConfirmDialog( + onDismissRequest = { }, + onConfirm = {}, + ) + } +} From d967069f730d10b64b09b1d4493f2041c5930f49 Mon Sep 17 00:00:00 2001 From: stopstone Date: Tue, 7 Oct 2025 18:23:32 +0900 Subject: [PATCH 5/6] =?UTF-8?q?refactor:=20`NearBasicDialog`=20onConfirm?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 확인 버튼 클릭 시 `onConfirm`과 `onDismiss`가 호출되도록 수정하여, 다이얼로그가 자동으로 닫히도록 로직을 개선했습니다. - `NearBasicDialog`를 사용하는 모든 컴포저블에서 변경된 파라미터명을 적용하고, 중복되는 `onDismiss` 호출 로직을 제거했습니다. --- .../friendcontactcycle/FriendContactCycleScreen.kt | 5 +---- .../components/ContactPermissionDeniedDialog.kt | 2 +- .../friendprofileedittor/FriendProfileEditorScreen.kt | 5 +---- .../friendprofileedittor/dialog/EditorExitDialog.kt | 2 +- .../friendprofileedittor/dialog/SaveConfirmDialog.kt | 2 +- .../presentation/ui/component/dialog/NearBasicDialog.kt | 9 ++++++--- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/FriendContactCycleScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/FriendContactCycleScreen.kt index 2c4de0de..f6d7e789 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/FriendContactCycleScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/FriendContactCycleScreen.kt @@ -230,11 +230,8 @@ fun FriendContactCycleScreen( // 권한 거부 다이얼로그 표시 if (uiState.showPermissionDeniedDialog) { ContactPermissionDeniedDialog( - onDismiss = { - onHidePermissionDeniedDialog() - }, + onDismiss = onHidePermissionDeniedDialog, onGoToSettings = { - onHidePermissionDeniedDialog() AppSettingsUtil.openAppSettings(context) }, ) diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/components/ContactPermissionDeniedDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/components/ContactPermissionDeniedDialog.kt index 115b8a64..6c8e6acd 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/components/ContactPermissionDeniedDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendcontactcycle/components/ContactPermissionDeniedDialog.kt @@ -22,7 +22,7 @@ fun ContactPermissionDeniedDialog( dismissButtonText = stringResource(R.string.contact_permission_cancel), confirmButtonText = stringResource(R.string.contact_permission_go_to_settings), onDismissButtonClick = onDismiss, - onConfirmButtonClick = onGoToSettings, + onConfirm = onGoToSettings, ) } diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt index 772a548f..4c2da9a6 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt @@ -164,10 +164,7 @@ fun FriendProfileEditorScreen( if (saveConfirmDialogState) { SaveConfirmDialog( onDismissRequest = { onSaveConfirmDialogStateChanged(false) }, - onConfirm = { - onSaveConfirmDialogStateChanged(false) - onSubmit() - }, + onConfirm = onSubmit, ) } NearFrame(modifier = modifier) { diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt index 41b32a10..cc38282f 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/EditorExitDialog.kt @@ -21,7 +21,7 @@ internal fun EditorExitDialog( dismissButtonText = stringResource(R.string.editor_exit_dismiss), confirmButtonText = stringResource(R.string.editor_exit_confirm), onDismissButtonClick = onDismissRequest, - onConfirmButtonClick = onConfirm, + onConfirm = onConfirm, ) } diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt index 707bea40..515068fe 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/dialog/SaveConfirmDialog.kt @@ -20,7 +20,7 @@ internal fun SaveConfirmDialog( dismissButtonText = stringResource(R.string.editor_save_confirm_cancel), confirmButtonText = stringResource(R.string.editor_save_confirm_save), onDismissButtonClick = onDismissRequest, - onConfirmButtonClick = onConfirm, + onConfirm = onConfirm, ) } diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearBasicDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearBasicDialog.kt index b9439cbf..5d986217 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearBasicDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearBasicDialog.kt @@ -25,7 +25,7 @@ fun NearBasicDialog( dismissButtonText: String, confirmButtonText: String, onDismissButtonClick: (() -> Unit), - onConfirmButtonClick: (() -> Unit), + onConfirm: (() -> Unit), ) { AlertDialog( onDismissRequest = onDismiss, @@ -66,7 +66,10 @@ fun NearBasicDialog( NearBasicButton( modifier = Modifier.weight(1f), - onClick = onConfirmButtonClick, + onClick = { + onConfirm() + onDismiss() + }, contentPadding = PaddingValues(16.dp), ) { Text( @@ -92,7 +95,7 @@ fun NearBasicDialogPreview() { dismissButtonText = "취소", confirmButtonText = "설정으로 이동", onDismissButtonClick = {}, - onConfirmButtonClick = {}, + onConfirm = {}, ) } } From e884c7b1b676cf311cf9091c89719f18408f5e13 Mon Sep 17 00:00:00 2001 From: stopstone Date: Tue, 7 Oct 2025 18:24:17 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20`NearOutlinedDialog`=20onConfir?= =?UTF-8?q?m=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `NearOutlinedDialog`의 `onConfirm` 람다에서 `onDismiss`가 자동으로 호출되도록 수정했습니다. - 이에 따라 중복으로 호출되던 `onDismiss` 로직을 `WithdrawScreen`에서 제거했습니다. --- .../presentation/feature/myprofile/WithdrawScreen.kt | 5 +---- .../feature/myprofile/dialog/WithdrawConfirmDialog.kt | 2 +- .../ui/component/dialog/NearOutlinedDialog.kt | 9 ++++++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt index 5f7e4796..221452e2 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/WithdrawScreen.kt @@ -191,10 +191,7 @@ fun WithdrawScreen( if (withdrawConfirmDialogState) { WithdrawConfirmDialog( onDismissRequest = { onWithdrawConfirmDialogStateChanged(false) }, - onConfirm = { - onWithdrawConfirmDialogStateChanged(false) - onSubmitWithdrawRequest() - }, + onConfirm = onSubmitWithdrawRequest, ) } } diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt index 37494bca..775a4d73 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/myprofile/dialog/WithdrawConfirmDialog.kt @@ -21,7 +21,7 @@ internal fun WithdrawConfirmDialog( dismissButtonText = stringResource(R.string.withdraw_confirm_cancel), confirmButtonText = stringResource(R.string.withdraw_confirm_withdraw), onDismissButtonClick = onDismissRequest, - onConfirmButtonClick = onConfirm, + onConfirm = onConfirm, ) } diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearOutlinedDialog.kt b/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearOutlinedDialog.kt index 8329b20c..f4a79e74 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearOutlinedDialog.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/ui/component/dialog/NearOutlinedDialog.kt @@ -25,7 +25,7 @@ fun NearOutlinedDialog( dismissButtonText: String, confirmButtonText: String, onDismissButtonClick: (() -> Unit), - onConfirmButtonClick: (() -> Unit), + onConfirm: (() -> Unit), ) { AlertDialog( onDismissRequest = onDismiss, @@ -72,7 +72,10 @@ fun NearOutlinedDialog( contentPadding = PaddingValues(16.dp), enabled = true, text = confirmButtonText, - onClick = onConfirmButtonClick, + onClick = { + onConfirm() + onDismiss() + }, ) } }, @@ -92,7 +95,7 @@ fun NearOutlinedDialogPreview() { confirmButtonText = "취소", dismissButtonText = "설정으로 이동", onDismissButtonClick = {}, - onConfirmButtonClick = {}, + onConfirm = {}, ) } }