From d8b23dc605b1147204328ca9fa97f09ff05328c5 Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Wed, 14 Aug 2024 18:33:06 +0900 Subject: [PATCH] =?UTF-8?q?[chore]=20#47=20=EC=98=A4=EB=8A=98=EC=9D=98=20?= =?UTF-8?q?=EC=83=9D=EC=A1=B4=EC=8B=A0=EA=B3=A0=20=EB=B3=B4=EB=82=B4?= =?UTF-8?q?=EA=B8=B0=20-=20OX=20=EB=B7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/main/qna/QnaFragment.kt | 60 ++++++++++++++++++- .../feature/main/qna/QnaViewModel.kt | 7 +++ feature/src/main/res/layout/fragment_qna.xml | 8 +-- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaFragment.kt b/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaFragment.kt index fdaf9d5..0268c0d 100644 --- a/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaFragment.kt +++ b/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaFragment.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import coil.load +import com.dongguk.telepigeon.core.design.system.R import com.dongguk.telepigeon.design.system.component.BottomSheetWithOneBtnDialogFragment import com.dongguk.telepigeon.design.system.mapper.toQnaType import com.dongguk.telepigeon.design.system.type.AppBarType @@ -21,8 +22,10 @@ import com.dongguk.telepigeon.design.system.type.TelePigeonQnaEditTextType import com.dongguk.telepigeon.feature.databinding.FragmentQnaBinding import com.dongguk.telepigeon.feature.main.main.MainFragment.Companion.QNA_TYPE import com.dongguk.telpigeon.core.ui.base.BindingFragment +import com.dongguk.telpigeon.core.ui.util.context.colorOf import com.dongguk.telpigeon.core.ui.util.fragment.stringOf import com.dongguk.telpigeon.core.ui.util.view.UiState +import com.dongguk.telpigeon.core.ui.util.view.setBackgroundTint import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -49,6 +52,9 @@ class QnaFragment : BindingFragment({ FragmentQnaBinding.inf collectGetQuestionState() collectPostAnswerState() collectGetQuestionAnswerState() + collectEasyModeAnswer() + setTvQnaEasyModeAnswerYesClickListener() + setTvQnaEasyModeAnswerNoClickListener() setLayoutQnaAddPictureClickListener() } @@ -107,9 +113,12 @@ class QnaFragment : BindingFragment({ FragmentQnaBinding.inf binding.etQnaQuestion.editText.setText(content) binding.ivQnaWarning.visibility = if (isPenalty) View.VISIBLE else View.INVISIBLE binding.tvQnaWarning.visibility = if (isPenalty) View.VISIBLE else View.INVISIBLE + binding.etQnaAnswer.visibility = if (easyMode) View.INVISIBLE else View.VISIBLE + binding.tvQnaEasyModeAnswerYes.visibility = if (easyMode) View.VISIBLE else View.INVISIBLE + binding.tvQnaEasyModeAnswerNo.visibility = if (easyMode) View.VISIBLE else View.INVISIBLE if (qnaType == QnaType.SURVIVAL) setEtQnaAnswerTextChangedListener(isPenalty) binding.btnQna.setOnClickListener { - qnaViewModel.postAnswer(questionId = id, image = if (qnaViewModel.imageUri.value == null) null else qnaViewModel.imageUri.value.toString(), content = binding.etQnaAnswer.editText.text.toString()) + qnaViewModel.postAnswer(questionId = id, image = if (qnaViewModel.imageUri.value == null) null else qnaViewModel.imageUri.value.toString(), content = if (easyMode) qnaViewModel.easyModeAnswer.value.toString() else binding.etQnaAnswer.editText.text.toString()) } } } @@ -128,6 +137,7 @@ class QnaFragment : BindingFragment({ FragmentQnaBinding.inf CONFLICT -> showOtherPersonLeftRoomBottomSheerDialogFragment() } } + else -> Unit } }.launchIn(viewLifecycleOwner.lifecycleScope) @@ -154,11 +164,57 @@ class QnaFragment : BindingFragment({ FragmentQnaBinding.inf with(binding) { ivQnaPicture.visibility = if (uri == null) View.GONE else View.VISIBLE if (uri != null) ivQnaPicture.load(Uri.parse(uri)) - btnQna.isEnabled = etQnaAnswer.editText.text.isNotEmpty() && uri != null + btnQna.isEnabled = etQnaAnswer.editText.text.isNotEmpty() || !qnaViewModel.easyModeAnswer.value.isNullOrEmpty() && uri != null } }.launchIn(viewLifecycleOwner.lifecycleScope) } + private fun collectEasyModeAnswer() { + qnaViewModel.easyModeAnswer.flowWithLifecycle(viewLifecycleOwner.lifecycle).onEach { easyModeAnswer -> + when (easyModeAnswer) { + getString(R.string.qna_yes) -> + with(binding) { + tvQnaEasyModeAnswerYes.setTextColor(requireContext().colorOf(R.color.g_01)) + tvQnaEasyModeAnswerYes.setBackgroundTint(R.color.monstera) + tvQnaEasyModeAnswerNo.setTextColor(requireContext().colorOf(R.color.g_10)) + tvQnaEasyModeAnswerNo.setBackgroundTint(R.color.marble) + } + + getString(R.string.qna_no) -> + with(binding) { + tvQnaEasyModeAnswerYes.setTextColor(requireContext().colorOf(R.color.g_10)) + tvQnaEasyModeAnswerYes.setBackgroundTint(R.color.marble) + tvQnaEasyModeAnswerNo.setTextColor(requireContext().colorOf(R.color.g_01)) + tvQnaEasyModeAnswerNo.setBackgroundTint(R.color.monstera) + } + + else -> + with(binding) { + tvQnaEasyModeAnswerYes.setTextColor(requireContext().colorOf(R.color.g_10)) + tvQnaEasyModeAnswerYes.setBackgroundTint(R.color.marble) + tvQnaEasyModeAnswerNo.setTextColor(requireContext().colorOf(R.color.g_10)) + tvQnaEasyModeAnswerNo.setBackgroundTint(R.color.marble) + } + } + + with(binding) { + btnQna.isEnabled = etQnaAnswer.editText.text.isNotEmpty() || !qnaViewModel.easyModeAnswer.value.isNullOrEmpty() && qnaViewModel.imageUri.value != null + } + }.launchIn(viewLifecycleOwner.lifecycleScope) + } + + private fun setTvQnaEasyModeAnswerYesClickListener() { + binding.tvQnaEasyModeAnswerYes.setOnClickListener { + qnaViewModel.setEasyModeAnswer(binding.tvQnaEasyModeAnswerYes.text.toString()) + } + } + + private fun setTvQnaEasyModeAnswerNoClickListener() { + binding.tvQnaEasyModeAnswerNo.setOnClickListener { + qnaViewModel.setEasyModeAnswer(binding.tvQnaEasyModeAnswerNo.text.toString()) + } + } + private fun setLayoutQnaAddPictureClickListener() { binding.layoutQnaAddPicture.setOnClickListener { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { diff --git a/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaViewModel.kt b/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaViewModel.kt index 88605fa..7ba4015 100644 --- a/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaViewModel.kt +++ b/feature/src/main/java/com/dongguk/telepigeon/feature/main/qna/QnaViewModel.kt @@ -38,6 +38,9 @@ class QnaViewModel private val _imageUri = MutableStateFlow(null) val imageUri get() = _imageUri.asStateFlow() + private val _easyModeAnswer = MutableStateFlow(null) + val easyModeAnswer = _easyModeAnswer.asStateFlow() + private val roomId = getRoomIdUseCase() fun getQuestion() { @@ -80,4 +83,8 @@ class QnaViewModel fun setImageUri(uri: String?) { _imageUri.value = uri } + + fun setEasyModeAnswer(easyModeAnswer: String) { + _easyModeAnswer.value = easyModeAnswer + } } diff --git a/feature/src/main/res/layout/fragment_qna.xml b/feature/src/main/res/layout/fragment_qna.xml index f435467..a6910ff 100644 --- a/feature/src/main/res/layout/fragment_qna.xml +++ b/feature/src/main/res/layout/fragment_qna.xml @@ -89,14 +89,14 @@ android:background="@drawable/shape_border_radius_10" android:backgroundTint="@color/marble" android:gravity="center" + android:text="@string/qna_yes" android:textAppearance="@style/TextAppearance.TelePigeon.Body.Semi.14" android:textColor="@color/g_10" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="@id/et_qna_answer" app:layout_constraintEnd_toStartOf="@id/tv_qna_easy_mode_answer_no" app:layout_constraintStart_toStartOf="@id/gl_start" - app:layout_constraintTop_toTopOf="@id/et_qna_answer" - tools:text="네" /> + app:layout_constraintTop_toTopOf="@id/et_qna_answer" /> + app:layout_constraintTop_toTopOf="@id/et_qna_answer" />