From 2589ba107c84579f499e99dd0071c531f4aecd33 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Thu, 16 Oct 2025 16:20:25 +0900 Subject: [PATCH 01/41] =?UTF-8?q?feat:=20=ED=99=95=EC=9D=B8,=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8/=EC=B7=A8=EC=86=8C=20Custom=20Dialog=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 --- .../android/presentation/util/DialogUtil.kt | 63 ++++++++++++++++ .../drawable/shape_dialog_button_cancel.xml | 5 ++ .../drawable/shape_dialog_button_confirm.xml | 5 ++ .../main/res/drawable/shape_dialog_corner.xml | 10 +++ app/src/main/res/layout/dialog_ok.xml | 63 ++++++++++++++++ app/src/main/res/layout/dialog_ok_cancel.xml | 75 +++++++++++++++++++ app/src/main/res/values/strings.xml | 3 + 7 files changed, 224 insertions(+) create mode 100644 app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt create mode 100644 app/src/main/res/drawable/shape_dialog_button_cancel.xml create mode 100644 app/src/main/res/drawable/shape_dialog_button_confirm.xml create mode 100644 app/src/main/res/drawable/shape_dialog_corner.xml create mode 100644 app/src/main/res/layout/dialog_ok.xml create mode 100644 app/src/main/res/layout/dialog_ok_cancel.xml diff --git a/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt b/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt new file mode 100644 index 000000000..77b01e095 --- /dev/null +++ b/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt @@ -0,0 +1,63 @@ +package com.eatssu.android.presentation.util + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.view.Window +import android.widget.TextView +import androidx.core.graphics.drawable.toDrawable +import com.eatssu.android.R + +fun Context.openOkCancelDialog( + title: String, + description: String, + onConfirm: (dialog: Dialog) -> Unit = {}, + onCancel: (dialog: Dialog) -> Unit = {} +) { + val dialog = Dialog(this) + + // Dialog Radius 적용 + dialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable()) + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) + dialog.setContentView(R.layout.dialog_ok_cancel) + + // UI 설정 + dialog.findViewById(R.id.dialog_title).text = title + dialog.findViewById(R.id.dialog_description).text = description + + dialog.findViewById(R.id.dialog_confirm_btn).setOnClickListener { + // 확인 버튼 클릭 시 동작 + onConfirm(dialog) + } + + dialog.findViewById(R.id.dialog_cancel_btn).setOnClickListener { + // 취소 버튼 클릭 시 동작 + onCancel(dialog) + } + + dialog.show() +} + +fun Context.openOkDialog( + title: String, + description: String, + onConfirm: (dialog: Dialog) -> Unit = {} +) { + val dialog = Dialog(this) + + // Dialog Radius 적용 + dialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable()) + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) + dialog.setContentView(R.layout.dialog_ok) + + // UI 설정 + dialog.findViewById(R.id.dialog_title).text = title + dialog.findViewById(R.id.dialog_description).text = description + + dialog.findViewById(R.id.dialog_confirm_btn).setOnClickListener { + // 확인 버튼 클릭 시 동작 + onConfirm(dialog) + } + + dialog.show() +} \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_dialog_button_cancel.xml b/app/src/main/res/drawable/shape_dialog_button_cancel.xml new file mode 100644 index 000000000..0626ef352 --- /dev/null +++ b/app/src/main/res/drawable/shape_dialog_button_cancel.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_dialog_button_confirm.xml b/app/src/main/res/drawable/shape_dialog_button_confirm.xml new file mode 100644 index 000000000..f2f8d60f1 --- /dev/null +++ b/app/src/main/res/drawable/shape_dialog_button_confirm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_dialog_corner.xml b/app/src/main/res/drawable/shape_dialog_corner.xml new file mode 100644 index 000000000..ba6e549c6 --- /dev/null +++ b/app/src/main/res/drawable/shape_dialog_corner.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ok.xml b/app/src/main/res/layout/dialog_ok.xml new file mode 100644 index 000000000..0cfc922cf --- /dev/null +++ b/app/src/main/res/layout/dialog_ok.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ok_cancel.xml b/app/src/main/res/layout/dialog_ok_cancel.xml new file mode 100644 index 000000000..8891aba92 --- /dev/null +++ b/app/src/main/res/layout/dialog_ok_cancel.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3493d7a0b..4dcd4bdc5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,4 +189,7 @@ eatssu.official https://eat-ssu.notion.site/1d2eeef75a1681ae800cf6ffa6faa37d?pvs=74 + + 취소 + 확인 \ No newline at end of file From 3ac0fa5c6ef848435a36bf5ab71dd9d919f217e2 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Thu, 16 Oct 2025 16:23:49 +0900 Subject: [PATCH 02/41] =?UTF-8?q?feat:=20cancellable=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/eatssu/android/presentation/util/DialogUtil.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt b/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt index 77b01e095..1ec03bd29 100644 --- a/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt +++ b/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt @@ -12,7 +12,8 @@ fun Context.openOkCancelDialog( title: String, description: String, onConfirm: (dialog: Dialog) -> Unit = {}, - onCancel: (dialog: Dialog) -> Unit = {} + onCancel: (dialog: Dialog) -> Unit = {}, + cancellable: Boolean = true, ) { val dialog = Dialog(this) @@ -35,13 +36,15 @@ fun Context.openOkCancelDialog( onCancel(dialog) } + dialog.setCancelable(cancellable) dialog.show() } fun Context.openOkDialog( title: String, description: String, - onConfirm: (dialog: Dialog) -> Unit = {} + onConfirm: (dialog: Dialog) -> Unit = {}, + cancellable: Boolean = true, ) { val dialog = Dialog(this) @@ -59,5 +62,6 @@ fun Context.openOkDialog( onConfirm(dialog) } + dialog.setCancelable(cancellable) dialog.show() } \ No newline at end of file From dcaa26972fea3c6386a2ae93ceced390b5df0042 Mon Sep 17 00:00:00 2001 From: PeraSite Date: Thu, 16 Oct 2025 16:36:05 +0900 Subject: [PATCH 03/41] =?UTF-8?q?refactor:=20Dialog=20=EC=98=B5=EC=85=98?= =?UTF-8?q?=20DSL=20=EA=B5=AC=EC=A1=B0=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/presentation/util/DialogUtil.kt | 106 +++++++++++------- 1 file changed, 63 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt b/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt index 1ec03bd29..30b373d0d 100644 --- a/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt +++ b/app/src/main/java/com/eatssu/android/presentation/util/DialogUtil.kt @@ -4,64 +4,84 @@ import android.app.Dialog import android.content.Context import android.graphics.Color import android.view.Window +import android.widget.Button import android.widget.TextView import androidx.core.graphics.drawable.toDrawable import com.eatssu.android.R -fun Context.openOkCancelDialog( - title: String, - description: String, - onConfirm: (dialog: Dialog) -> Unit = {}, - onCancel: (dialog: Dialog) -> Unit = {}, - cancellable: Boolean = true, +class DialogBuilder( + private val context: Context, + + // Dialog에 표시할 제목 + private val title: String, + + // Dialog에 표시할 설명 + private val description: String ) { - val dialog = Dialog(this) + // 확인 버튼을 눌렀을 때 동작 + private var onConfirm: (dialog: Dialog) -> Unit = { it.dismiss() } + + // 취소 버튼을 눌렀을 때 동작 + private var onCancel: (dialog: Dialog) -> Unit = { it.dismiss() } - // Dialog Radius 적용 - dialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable()) - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - dialog.setContentView(R.layout.dialog_ok_cancel) + // Dialog 바깥을 누르면 닫히는지 여부 + var cancellable: Boolean = true - // UI 설정 - dialog.findViewById(R.id.dialog_title).text = title - dialog.findViewById(R.id.dialog_description).text = description + // 확인 버튼 텍스트 + var confirmText: String = "확인" - dialog.findViewById(R.id.dialog_confirm_btn).setOnClickListener { - // 확인 버튼 클릭 시 동작 - onConfirm(dialog) + // 취소 버튼 텍스트 + var cancelText: String = "취소" + + // 취소 버튼 표시 여부 + var showCancelButton: Boolean = true + + fun onConfirm(action: (dialog: Dialog) -> Unit) = apply { + this.onConfirm = action } - dialog.findViewById(R.id.dialog_cancel_btn).setOnClickListener { - // 취소 버튼 클릭 시 동작 - onCancel(dialog) + fun onCancel(action: (dialog: Dialog) -> Unit) = apply { + this.onCancel = action } - dialog.setCancelable(cancellable) - dialog.show() -} + fun show() { + val dialog = Dialog(context) -fun Context.openOkDialog( - title: String, - description: String, - onConfirm: (dialog: Dialog) -> Unit = {}, - cancellable: Boolean = true, -) { - val dialog = Dialog(this) + // Dialog Radius 적용 + dialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable()) + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) + dialog.setContentView(R.layout.dialog_ok_cancel) + + // UI 설정 + dialog.findViewById(R.id.dialog_title).text = title + dialog.findViewById(R.id.dialog_description).text = description - // Dialog Radius 적용 - dialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable()) - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - dialog.setContentView(R.layout.dialog_ok) + val confirmButton = dialog.findViewById