diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d4bd7c02..fbd7e0ce 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -80,7 +80,7 @@
android:exported="false"
android:screenOrientation="portrait" />
diff --git a/app/src/main/java/sopt/uni/presentation/MissionDetailCreateActivity.kt b/app/src/main/java/sopt/uni/presentation/MissionDetailCreateActivity.kt
deleted file mode 100644
index 3868ffab..00000000
--- a/app/src/main/java/sopt/uni/presentation/MissionDetailCreateActivity.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package sopt.uni.presentation
-
-import android.os.Bundle
-import androidx.appcompat.app.AppCompatActivity
-import sopt.uni.R
-
-class MissionDetailCreateActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_mission_detail_create)
- }
-}
diff --git a/app/src/main/java/sopt/uni/presentation/entity/MissionIdPosition.kt b/app/src/main/java/sopt/uni/presentation/entity/MissionIdPosition.kt
index e5603f8a..0ce8428a 100644
--- a/app/src/main/java/sopt/uni/presentation/entity/MissionIdPosition.kt
+++ b/app/src/main/java/sopt/uni/presentation/entity/MissionIdPosition.kt
@@ -1,6 +1,10 @@
package sopt.uni.presentation.entity
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
data class MissionIdPosition(
val id: Int,
- val position: Int
-)
+ val position: Int,
+) : Parcelable
diff --git a/app/src/main/java/sopt/uni/presentation/home/HomeActivity.kt b/app/src/main/java/sopt/uni/presentation/home/HomeActivity.kt
index e67ca092..d7395f67 100644
--- a/app/src/main/java/sopt/uni/presentation/home/HomeActivity.kt
+++ b/app/src/main/java/sopt/uni/presentation/home/HomeActivity.kt
@@ -5,7 +5,7 @@ import dagger.hilt.android.AndroidEntryPoint
import sopt.uni.R
import sopt.uni.databinding.ActivityHomeBinding
import sopt.uni.presentation.history.HistoryActivity
-import sopt.uni.presentation.shortgame.CreateShortGameActivity
+import sopt.uni.presentation.shortgame.createshortgame.CreateShortGameActivity
import sopt.uni.presentation.wish.WishActivity
import sopt.uni.util.binding.BindingActivity
import sopt.uni.util.extension.setOnSingleClickListener
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/CreateShortGameActivity.kt b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/CreateShortGameActivity.kt
similarity index 52%
rename from app/src/main/java/sopt/uni/presentation/shortgame/CreateShortGameActivity.kt
rename to app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/CreateShortGameActivity.kt
index df002565..460ff7db 100644
--- a/app/src/main/java/sopt/uni/presentation/shortgame/CreateShortGameActivity.kt
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/CreateShortGameActivity.kt
@@ -1,19 +1,26 @@
-package sopt.uni.presentation.shortgame
+package sopt.uni.presentation.shortgame.createshortgame
import android.content.Context
+import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.TextView
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.databinding.BindingAdapter
import dagger.hilt.android.AndroidEntryPoint
import sopt.uni.R
import sopt.uni.databinding.ActivityCreateShortGameBinding
+import sopt.uni.presentation.entity.MissionIdPosition
+import sopt.uni.presentation.shortgame.createshortgame.dialog.CreateShortGameDialogFragment
+import sopt.uni.presentation.shortgame.missiondetailcreate.MissionDetailCreateActivity
+import sopt.uni.presentation.shortgame.missionrecord.MissionRecordActivity
import sopt.uni.util.ItemDecorations
import sopt.uni.util.binding.BindingActivity
+import sopt.uni.util.extension.parcelable
import sopt.uni.util.extension.setOnSingleClickListener
@AndroidEntryPoint
@@ -22,10 +29,19 @@ class CreateShortGameActivity :
private val viewModel: CreateShortGameViewModel by viewModels()
+ private val activityLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
+ if (it.resultCode == RESULT_OK) {
+ val data = it.data?.parcelable(MissionDetailCreateActivity.MISSION_ID_POSITION) as MissionIdPosition
+ selectItem(data.id, data.position)
+ }
+ }
+
private val missionAdapter by lazy {
MissionCategoryAdapter(
goToMissionDetailClickListener = { missionIdPosition ->
- // TODO : 미션상세뷰 이동
+ val intent = Intent(this, MissionDetailCreateActivity::class.java)
+ intent.putExtra(MissionDetailCreateActivity.MISSION_ID_POSITION, missionIdPosition)
+ activityLauncher.launch(intent)
},
selectMissionClickListener = { missionIdPosition ->
selectItem(missionIdPosition.id, missionIdPosition.position)
@@ -37,6 +53,7 @@ class CreateShortGameActivity :
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.viewModel = viewModel
+ setViewModelObserve()
setAdapter()
setClickListener()
}
@@ -62,22 +79,67 @@ class CreateShortGameActivity :
private fun setAdapter() {
binding.rvMission.adapter = missionAdapter
binding.rvMission.addItemDecoration(ItemDecorations(0, 9, 0, 9))
+ }
+
+ private fun setViewModelObserve() {
viewModel.missionList.observe(this) {
missionAdapter.submitList(it)
}
+ viewModel.isCreateSuccess.observe(this) {
+ if (it) {
+ MissionRecordActivity.start(
+ this,
+ viewModel.roundGameId.value
+ ?: return@observe,
+ )
+ finish()
+ }
+ }
}
private fun setClickListener() {
binding.apply {
ivClose.setOnSingleClickListener {
- // TODO : 종료 다이얼로그
+ exitDialog()
}
btnCreate.setOnSingleClickListener {
- // TODO : 생성 다이얼로그 + 미션 기록 액티비티 이동
+ createDialog()
}
}
}
+ private fun exitDialog() {
+ CreateShortGameDialogFragment().apply {
+ titleText = this@CreateShortGameActivity.resources.getString(R.string.create_short_game_exit_dialog_title)
+ bodyText = this@CreateShortGameActivity.resources.getString(R.string.create_short_game_exit_dialog_body)
+ confirmButtonText = this@CreateShortGameActivity.resources.getString(R.string.create_short_game_exit_dialog_exit)
+ dismissButtonText = this@CreateShortGameActivity.resources.getString(R.string.dialog_cancel_text)
+ confirmClickListener = {
+ finish()
+ this.dismiss()
+ }
+ dismissClickListener = {
+ this.dismiss()
+ }
+ }.show(supportFragmentManager, "")
+ }
+
+ private fun createDialog() {
+ CreateShortGameDialogFragment().apply {
+ titleText = this@CreateShortGameActivity.resources.getString(R.string.create_short_game_create_dialog_title)
+ bodyText = this@CreateShortGameActivity.resources.getString(R.string.create_short_game_create_dialog_body)
+ confirmButtonText = this@CreateShortGameActivity.resources.getString(R.string.create_short_game_create_dialog_create)
+ dismissButtonText = this@CreateShortGameActivity.resources.getString(R.string.dialog_cancel_text)
+ confirmClickListener = {
+ viewModel.createShortGame()
+ this.dismiss()
+ }
+ dismissClickListener = {
+ this.dismiss()
+ }
+ }.show(supportFragmentManager, "")
+ }
+
private fun selectItem(id: Int, position: Int) {
missionAdapter.setSelectedItem(position)
viewModel.setSelectedMissionId(id)
@@ -89,7 +151,7 @@ class CreateShortGameActivity :
@JvmStatic
@BindingAdapter("setContentLength")
fun setContentLength(view: TextView, length: Int) {
- if (length >= MAX_LENGTH) {
+ if (length > MAX_LENGTH) {
view.setTextColor(view.context.getColor(R.color.Red_500))
} else {
view.setTextColor(view.context.getColor(R.color.Gray_200))
@@ -100,7 +162,7 @@ class CreateShortGameActivity :
@JvmStatic
@BindingAdapter("setContentLength")
fun setWishContent(view: EditText, length: Int) {
- if (length >= MAX_LENGTH && view.isFocused) {
+ if (length > MAX_LENGTH && view.isFocused) {
view.background = view.context.getDrawable(R.drawable.bg_wish_edit_text_error)
} else {
view.background = view.context.getDrawable(R.drawable.bg_wish_edit_text)
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/CreateShortGameViewModel.kt b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/CreateShortGameViewModel.kt
similarity index 74%
rename from app/src/main/java/sopt/uni/presentation/shortgame/CreateShortGameViewModel.kt
rename to app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/CreateShortGameViewModel.kt
index 285ee9ed..de52a0dc 100644
--- a/app/src/main/java/sopt/uni/presentation/shortgame/CreateShortGameViewModel.kt
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/CreateShortGameViewModel.kt
@@ -1,4 +1,4 @@
-package sopt.uni.presentation.shortgame
+package sopt.uni.presentation.shortgame.createshortgame
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
@@ -9,6 +9,9 @@ class CreateShortGameViewModel : ViewModel() {
private val _selectedMissionId = MutableLiveData()
val selectedMissionId = _selectedMissionId
+ private val _roundGameId = MutableLiveData()
+ val roundGameId = _roundGameId
+
private val _missionList = MutableLiveData>()
val missionList = _missionList
@@ -18,6 +21,9 @@ class CreateShortGameViewModel : ViewModel() {
it.length
}
+ private val _isCreateSuccess = MutableLiveData(false)
+ val isCreateSuccess = _isCreateSuccess
+
init {
setDummyList()
}
@@ -31,12 +37,17 @@ class CreateShortGameViewModel : ViewModel() {
image = "https://github.com/U-is-Ni-in-Korea/Android-United/assets/50603273/8c345eb3-d688-42bd-8585-a02f1016e213",
title = "뀨$i",
id = i,
- )
+ ),
)
}
_missionList.value = missionList
}
+ fun createShortGame() {
+ _isCreateSuccess.postValue(true)
+ _roundGameId.value = 1
+ }
+
fun setSelectedMissionId(missionId: Int) {
_selectedMissionId.value = missionId
}
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/MissionCategoryAdapter.kt b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/MissionCategoryAdapter.kt
similarity index 96%
rename from app/src/main/java/sopt/uni/presentation/shortgame/MissionCategoryAdapter.kt
rename to app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/MissionCategoryAdapter.kt
index e525d71a..66f80783 100644
--- a/app/src/main/java/sopt/uni/presentation/shortgame/MissionCategoryAdapter.kt
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/MissionCategoryAdapter.kt
@@ -1,4 +1,4 @@
-package sopt.uni.presentation.shortgame
+package sopt.uni.presentation.shortgame.createshortgame
import android.view.LayoutInflater
import android.view.ViewGroup
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/MissionViewHolder.kt b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/MissionViewHolder.kt
similarity index 95%
rename from app/src/main/java/sopt/uni/presentation/shortgame/MissionViewHolder.kt
rename to app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/MissionViewHolder.kt
index a220906c..72742de2 100644
--- a/app/src/main/java/sopt/uni/presentation/shortgame/MissionViewHolder.kt
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/MissionViewHolder.kt
@@ -1,4 +1,4 @@
-package sopt.uni.presentation.shortgame
+package sopt.uni.presentation.shortgame.createshortgame
import androidx.recyclerview.widget.RecyclerView
import coil.load
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt
new file mode 100644
index 00000000..1384986b
--- /dev/null
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/createshortgame/dialog/CreateShortGameDialogFragment.kt
@@ -0,0 +1,61 @@
+package sopt.uni.presentation.shortgame.createshortgame.dialog
+
+import android.os.Bundle
+import android.view.View
+import sopt.uni.R
+import sopt.uni.databinding.TitleAction2DialogBinding
+import sopt.uni.presentation.BindingDialogFragment
+
+class CreateShortGameDialogFragment :
+ BindingDialogFragment(R.layout.title_action2_dialog) {
+
+ var titleText: String? = null
+ var bodyText: String? = null
+ var confirmButtonText: String? = null
+ var dismissButtonText: String? = null
+ var confirmClickListener: (() -> Unit)? = null
+ var dismissClickListener: (() -> Unit)? = null
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initView()
+ }
+
+ private fun initView() {
+ titleText?.let {
+ binding.dialogTitle.visibility = View.VISIBLE
+ binding.dialogTitle.text = it
+ } ?: kotlin.run {
+ binding.dialogTitle.visibility = View.GONE
+ }
+ bodyText?.let {
+ binding.dialogBody.visibility = View.VISIBLE
+ binding.dialogBody.text = it
+ } ?: kotlin.run {
+ binding.dialogBody.visibility = View.GONE
+ }
+ confirmButtonText?.let {
+ binding.btnRight.text = it
+ }
+ dismissButtonText?.let {
+ binding.btnLeft.text = it
+ }
+
+ confirmClickListener?.let {
+ binding.btnRight.visibility = View.VISIBLE
+ binding.btnRight.setOnClickListener {
+ confirmClickListener?.invoke()
+ }
+ } ?: kotlin.run {
+ binding.btnRight.visibility = View.GONE
+ }
+
+ dismissClickListener?.let {
+ binding.btnLeft.visibility = View.VISIBLE
+ binding.btnLeft.setOnClickListener {
+ dismissClickListener?.invoke()
+ }
+ } ?: run {
+ binding.btnLeft.visibility = View.GONE
+ }
+ }
+}
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/missiondetailcreate/MissionDetailCreateActivity.kt b/app/src/main/java/sopt/uni/presentation/shortgame/missiondetailcreate/MissionDetailCreateActivity.kt
new file mode 100644
index 00000000..339d62db
--- /dev/null
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/missiondetailcreate/MissionDetailCreateActivity.kt
@@ -0,0 +1,43 @@
+package sopt.uni.presentation.shortgame.missiondetailcreate
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.viewModels
+import sopt.uni.R
+import sopt.uni.databinding.ActivityMissionDetailCreateBinding
+import sopt.uni.presentation.entity.MissionIdPosition
+import sopt.uni.presentation.shortgame.createshortgame.CreateShortGameActivity
+import sopt.uni.util.binding.BindingActivity
+import sopt.uni.util.extension.parcelable
+import sopt.uni.util.extension.setOnSingleClickListener
+
+class MissionDetailCreateActivity : BindingActivity(R.layout.activity_mission_detail_create) {
+
+ private val viewModel: MissionDetailCreateViewModel by viewModels()
+
+ private lateinit var idPosition: MissionIdPosition
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(binding.root)
+ idPosition = intent.parcelable(MISSION_ID_POSITION)!!
+ binding.missionDetailCreateViewModel = viewModel
+ setClickListener()
+ }
+
+ private fun setClickListener() {
+ binding.missionDetailCreateMissionBtnPick.setOnSingleClickListener {
+ val intent = Intent(this, CreateShortGameActivity::class.java)
+ intent.putExtra(MISSION_ID_POSITION, idPosition)
+ setResult(RESULT_OK, intent)
+ finish()
+ }
+ binding.missionDetailCreateBack.setOnSingleClickListener {
+ finish()
+ }
+ }
+
+ companion object {
+ const val MISSION_ID_POSITION = "MISSION_ID_POSITION"
+ }
+}
diff --git a/app/src/main/java/sopt/uni/presentation/shortgame/missiondetailcreate/MissionDetailCreateViewModel.kt b/app/src/main/java/sopt/uni/presentation/shortgame/missiondetailcreate/MissionDetailCreateViewModel.kt
new file mode 100644
index 00000000..03b0ee3b
--- /dev/null
+++ b/app/src/main/java/sopt/uni/presentation/shortgame/missiondetailcreate/MissionDetailCreateViewModel.kt
@@ -0,0 +1,31 @@
+package sopt.uni.presentation.shortgame.missiondetailcreate
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.SavedStateHandle
+import androidx.lifecycle.ViewModel
+import sopt.uni.data.entity.shortgame.MissionDetail
+import sopt.uni.data.entity.shortgame.MissionExample
+import sopt.uni.presentation.entity.MissionIdPosition
+
+class MissionDetailCreateViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
+ val missionId = savedStateHandle.get(MissionDetailCreateActivity.MISSION_ID_POSITION)
+
+ private val _missionDetail = MutableLiveData()
+ val missionDetail = _missionDetail
+
+ init {
+ setMissionDetail()
+ }
+
+ fun setMissionDetail() {
+ _missionDetail.value = MissionDetail(
+ 1,
+ "금지어 말하지 않기",
+ "금지이름 말하지 않는 게임입니다",
+ "본인에게 할당된 주제의 답변을 상대방이 맞춰야 하는 게임입니다.\n" + "단순 주제가 나와있는 미션이라면, 상대의 입장에서 해당 주제에 대한 답을 해주세요.\n" + "2지선다로 이루어진 미션이라면, 상대가 어떤 선지를 더 좋아할지에 대해 예상하여 답을 해주세요.",
+ "요리조리 피해보세요",
+ "https://github.com/U-is-Ni-in-Korea/Android-United/assets/50603273/8c345eb3-d688-42bd-8585-a02f1016e213",
+ listOf(MissionExample(1, "헐"), MissionExample(2, "대박")),
+ )
+ }
+}
diff --git a/app/src/main/res/layout/activity_create_short_game.xml b/app/src/main/res/layout/activity_create_short_game.xml
index e74a6ba2..6e794f4a 100644
--- a/app/src/main/res/layout/activity_create_short_game.xml
+++ b/app/src/main/res/layout/activity_create_short_game.xml
@@ -7,7 +7,7 @@
+ type="sopt.uni.presentation.shortgame.createshortgame.CreateShortGameViewModel" />
+ tools:context=".presentation.shortgame.createshortgame.CreateShortGameActivity">
+
+ tools:context=".presentation.shortgame.missiondetailcreate.MissionDetailCreateActivity">
+ app:layout_constraintTop_toTopOf="parent"
+ tools:src="@drawable/imagecard_android" />
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="@string/mission_detatil_create_game_title" />
-
-
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2fa040c8..d4d9c9b3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -165,4 +165,12 @@
미션 실패
님이 이겼어요
+
+ 승부 만들기가 완료되지 않았어요
+ 여기서 나가실래요
+ 나가기
+ 설정된 내용으로 승부를 만들까요?
+ 한번 설정한 내용은 변경할 수 없어요
+ 만들기
+