diff --git a/app/src/main/java/com/moyerun/moyeorun_android/common/dialog/RoundDialogFragment.kt b/app/src/main/java/com/moyerun/moyeorun_android/common/dialog/RoundDialogFragment.kt
new file mode 100644
index 0000000..24c4ab4
--- /dev/null
+++ b/app/src/main/java/com/moyerun/moyeorun_android/common/dialog/RoundDialogFragment.kt
@@ -0,0 +1,60 @@
+package com.moyerun.moyeorun_android.common.dialog
+
+import android.app.Dialog
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.Window
+import androidx.fragment.app.DialogFragment
+import com.moyerun.moyeorun_android.common.extension.isActivityDestroyed
+
+open class RoundDialogFragment : DialogFragment() {
+
+ private var dismissOnPause = false
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ outState.putBoolean(SAVED_DISMISS_ON_PAUSE, dismissOnPause)
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ if (savedInstanceState != null) {
+ dismissOnPause = savedInstanceState.getBoolean(SAVED_DISMISS_ON_PAUSE, false)
+ }
+
+ return object : Dialog(requireContext()) {
+ override fun show() {
+ if (context.isActivityDestroyed()) return
+ super.show()
+ }
+
+ override fun dismiss() {
+ if (context.isActivityDestroyed()) return
+ super.dismiss()
+ }
+ }.apply {
+ requestWindowFeature(Window.FEATURE_NO_TITLE)
+ window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ val contentView = onCreateView(LayoutInflater.from(context), null, savedInstanceState)
+ if (contentView != null) {
+ setContentView(contentView)
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ if (isCancelable && dismissOnPause) {
+ dismiss()
+ }
+ }
+
+ protected fun setDismissOnPause(dismissOnPause: Boolean) {
+ this.dismissOnPause = dismissOnPause
+ }
+
+ companion object {
+ private const val SAVED_DISMISS_ON_PAUSE = "dismissOnPause"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ActivityExtension.kt b/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ActivityExtension.kt
index d57b173..af4d5e4 100644
--- a/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ActivityExtension.kt
+++ b/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ActivityExtension.kt
@@ -2,7 +2,16 @@ package com.moyerun.moyeorun_android.common.extension
import android.app.Activity
import android.widget.Toast
+import androidx.fragment.app.DialogFragment
+import androidx.fragment.app.FragmentActivity
fun Activity.toast(msg: String, isShort: Boolean = true) {
Toast.makeText(this, msg, if (isShort) Toast.LENGTH_SHORT else Toast.LENGTH_LONG).show()
+}
+
+inline fun FragmentActivity.showAllowingStateLoss(
+ tag: String?,
+ dialogFragmentFactory: () -> DialogFragment
+) {
+ supportFragmentManager.showAllowingStateLoss(tag, dialogFragmentFactory)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ContextExtension.kt b/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ContextExtension.kt
new file mode 100644
index 0000000..832e52e
--- /dev/null
+++ b/app/src/main/java/com/moyerun/moyeorun_android/common/extension/ContextExtension.kt
@@ -0,0 +1,20 @@
+package com.moyerun.moyeorun_android.common.extension
+
+import android.app.Activity
+import android.app.Application
+import android.content.Context
+import android.content.ContextWrapper
+
+fun Context.isActivityDestroyed(): Boolean {
+ if (this is Application) return false
+ val activity = getActivity()?: return true
+ return activity.isFinishing || activity.isDestroyed
+}
+
+fun Context.getActivity(): Activity? {
+ return when (this) {
+ is Activity -> this
+ is ContextWrapper -> baseContext.getActivity()
+ else -> null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/moyerun/moyeorun_android/common/extension/FragmentExtension.kt b/app/src/main/java/com/moyerun/moyeorun_android/common/extension/FragmentExtension.kt
index 2ad8fe7..e36ee18 100644
--- a/app/src/main/java/com/moyerun/moyeorun_android/common/extension/FragmentExtension.kt
+++ b/app/src/main/java/com/moyerun/moyeorun_android/common/extension/FragmentExtension.kt
@@ -1,8 +1,22 @@
package com.moyerun.moyeorun_android.common.extension
import android.widget.Toast
+import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
fun Fragment.toast(msg: String, isShort: Boolean = false) {
Toast.makeText(context, msg, if (isShort) Toast.LENGTH_SHORT else Toast.LENGTH_LONG).show()
+}
+
+inline fun FragmentManager?.showAllowingStateLoss(
+ tag: String?,
+ dialogFragmentFactory: () -> DialogFragment
+) {
+ if (this == null || isDestroyed) {
+ return
+ }
+ val transaction = beginTransaction()
+ transaction.add(dialogFragmentFactory(), tag)
+ transaction.commitAllowingStateLoss()
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_background_12.xml b/app/src/main/res/drawable/round_background_12.xml
new file mode 100644
index 0000000..cfb6cbf
--- /dev/null
+++ b/app/src/main/res/drawable/round_background_12.xml
@@ -0,0 +1,9 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f4f6afa..4d7ffc5 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -15,6 +15,11 @@
#828282
#A9A9A9
+
+
+ #EBECEF
+
+
#0047D0
#C4C4C4
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6f6e6ef..09e4982 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,8 @@
MoyeoRun-android
+
+
+ 취소
+ 확인
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles_dialog.xml b/app/src/main/res/values/styles_dialog.xml
new file mode 100644
index 0000000..55a64cf
--- /dev/null
+++ b/app/src/main/res/values/styles_dialog.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+