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 @@ + + + + + + + + + + + + + + +