Skip to content

Commit

Permalink
[feat] #11 QnaFragment 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
jihyunniiii committed May 9, 2024
1 parent 6349bb1 commit 10422f9
Show file tree
Hide file tree
Showing 7 changed files with 282 additions and 118 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.dongguk.telepigeon.design.system.mapper

import com.dongguk.telepigeon.design.system.type.QnaType

fun String.toQnaType(): QnaType = QnaType.valueOf(this)
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ import com.dongguk.telepigeon.core.design.system.R
enum class QnaType(
@StringRes val title: Int,
@StringRes val description: Int,
@StringRes val btnText: Int
@StringRes val btnText: Int,
) {
SURVIVAL(
title = R.string.qna_title_survival,
description = R.string.qna_description_survival,
btnText = R.string.qna_btn_text_survival
btnText = R.string.qna_btn_text_survival,
),
CHECK_ANSWER(
title = R.string.qna_title_check_answer,
description = R.string.answer_description_check_answer,
btnText = R.string.qna_btn_text_check_answer
)
}
btnText = R.string.qna_btn_text_check_answer,
),
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.dongguk.telepigeon.domain.model

data class CheckQuestionEntity(
val id: Int,
val content: String,
val isPenalty: Boolean,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.dongguk.telepigeon.domain.model

data class QuestionAnswerEntity(
val questionerName: String,
val respondentName: String,
val questionContent: String,
val answerContent: String,
val answerImage: String,
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,87 @@
package com.dongguk.telepigeon.feature.main.qna

import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import coil.load
import com.dongguk.telepigeon.design.system.mapper.toQnaType
import com.dongguk.telepigeon.design.system.type.AppBarType
import com.dongguk.telepigeon.design.system.type.QnaType
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.fragment.stringOf

class QnaFragment : BindingFragment<FragmentQnaBinding>({ FragmentQnaBinding.inflate(it) }) {
}
private val qnaViewModel by viewModels<QnaViewModel>()

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)

initLayout()
setAppBar()
requireArguments().getString(QNA_TYPE)?.toQnaType()?.let { setQnaType(it) }
}

private fun initLayout() {
with(binding) {
etQnaQuestion.initLayout(qnaEditTextType = TelePigeonQnaEditTextType.Q)
etQnaQuestion.editText.isEnabled = false
etQnaAnswer.initLayout(qnaEditTextType = TelePigeonQnaEditTextType.A)
}
}

private fun setAppBar() {
binding.appbarQna.initLayout(appBarType = AppBarType.X)
binding.appbarQna.binding.ivAppBarTelepigeonX.setOnClickListener {
findNavController().popBackStack()
}
}

private fun setQnaType(qnaType: QnaType) {
with(binding) {
tvQnaTitle.text = stringOf(qnaType.title)
tvQnaDescription.text = stringOf(qnaType.description)
btnQna.text = stringOf(qnaType.btnText)
}

when (qnaType) {
QnaType.SURVIVAL -> {
with(binding) {
ivQnaPicture.visibility = View.INVISIBLE
etQnaQuestion.editText.setText(qnaViewModel.dummyCheckQuestionEntity.content)
ivQnaWarning.visibility = if (qnaViewModel.dummyCheckQuestionEntity.isPenalty) View.VISIBLE else View.INVISIBLE
tvQnaWarning.visibility = if (qnaViewModel.dummyCheckQuestionEntity.isPenalty) View.VISIBLE else View.INVISIBLE
}
}

QnaType.CHECK_ANSWER -> {
with(binding) {
etQnaAnswer.editText.isEnabled = false
layoutQnaAddPicture.visibility = View.GONE
etQnaQuestion.editText.setText(qnaViewModel.dummyQuestionAnswerEntity.questionContent)
etQnaAnswer.editText.setText(qnaViewModel.dummyQuestionAnswerEntity.answerContent)
ivQnaPicture.load(qnaViewModel.dummyQuestionAnswerEntity.answerImage)
ivQnaWarning.visibility = View.INVISIBLE
tvQnaWarning.visibility = View.INVISIBLE
}
}
}

setBtnQnaClickListener(qnaType = qnaType)
}

private fun setBtnQnaClickListener(qnaType: QnaType) {
binding.btnQna.setOnClickListener {
when (qnaType) {
QnaType.CHECK_ANSWER -> findNavController().popBackStack()
QnaType.SURVIVAL -> Unit
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.dongguk.telepigeon.feature.main.qna

import androidx.lifecycle.ViewModel
import com.dongguk.telepigeon.domain.model.CheckQuestionEntity
import com.dongguk.telepigeon.domain.model.QuestionAnswerEntity
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class QnaViewModel
@Inject
constructor() : ViewModel() {
val dummyCheckQuestionEntity =
CheckQuestionEntity(
id = 1,
content = "오늘 점심은 무슨 음식을 먹었나요?",
isPenalty = true,
)

val dummyQuestionAnswerEntity =
QuestionAnswerEntity(
questionerName = "김둘기",
respondentName = "둘기맘",
questionContent = "오늘 점심은 무슨 음식을 먹었나요?",
answerContent = "분식을 먹었어요! 맛있었어요!",
answerImage = "https://github.com/avatars/u/103172971?v=4",
)
}
Loading

0 comments on commit 10422f9

Please sign in to comment.