diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 53d0696b..27dad50f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -107,6 +107,16 @@
android:exported="false"
android:screenOrientation="portrait" />
+
+
+
+
(R.layout.fragment
super.onViewCreated(view, savedInstanceState)
initAdapter()
+ initAddTodoBtnListener()
setDateTextColor()
setProgressBarStatus()
setTabLayout()
@@ -41,6 +45,14 @@ class OurTodoFragment() : BaseFragment(R.layout.fragment
adapter.submitList(viewModel.mockParticipantsList)
}
+ private fun initAddTodoBtnListener() {
+ binding.btnOurTodoAddTodo.setOnSingleClickListener {
+ Intent(activity, OurTodoCreateActivity::class.java).apply {
+ startActivity(this)
+ }
+ }
+ }
+
private fun setDateTextColor() {
binding.tvOurTodoTitleDown.apply {
text = SpannableStringBuilder(text).apply {
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateActivity.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateActivity.kt
new file mode 100644
index 00000000..7ee77fce
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateActivity.kt
@@ -0,0 +1,180 @@
+package com.going.presentation.todo.ourtodo.create
+
+import android.graphics.drawable.Drawable
+import android.os.Bundle
+import android.widget.TextView
+import androidx.activity.viewModels
+import androidx.core.content.res.ResourcesCompat
+import com.going.presentation.R
+import com.going.presentation.databinding.ActivityOurTodoCreateBinding
+import com.going.ui.base.BaseActivity
+import com.going.ui.extension.setOnSingleClickListener
+
+class OurTodoCreateActivity :
+ BaseActivity(R.layout.activity_our_todo_create) {
+
+ private val viewModel by viewModels()
+
+ private var _adapter: TodoCreateNameAdapter? = null
+ private val adapter
+ get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) }
+
+ private var ourTodoCreateBottomSheet: OurTodoCreateBottomSheet? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ initViewModel()
+ initNameListAdapter()
+ initTodoFocusListener()
+ initMemoFocusListener()
+ initDateClickListener()
+ initFinishBtnListener()
+ initBackBtnListener()
+ observeTextLength()
+ observeMemoLength()
+ observeDateEmpty()
+ }
+
+ private fun initViewModel() {
+ binding.vm = viewModel
+ }
+
+ private fun initNameListAdapter() {
+ // 아워투두 뷰에서 intent로 친구목록 받아와서 적용할 예정
+ _adapter = TodoCreateNameAdapter(false)
+ binding.rvOurTodoCreatePerson.adapter = adapter
+ adapter.submitList(listOf("김상호", "박동민", "조세연", "이유빈"))
+ }
+
+ private fun initTodoFocusListener() {
+ binding.etOurTodoCreateTodo.setOnFocusChangeListener { _, hasFocus ->
+ setColors(
+ hasFocus,
+ viewModel.nowTodoLength.value ?: 0,
+ binding.tvOurTodoTodoCounter,
+ ) { background ->
+ binding.etOurTodoCreateTodo.background = setBackgroundColor(background)
+ }
+ }
+ }
+
+ private fun initMemoFocusListener() {
+ binding.etOurTodoCreateMemo.setOnFocusChangeListener { _, hasFocus ->
+ setColors(
+ hasFocus,
+ viewModel.nowMemoLength.value ?: 0,
+ binding.tvOurTodoMemoCounter,
+ ) { background ->
+ binding.etOurTodoCreateMemo.background = setBackgroundColor(background)
+ }
+ }
+ }
+
+ private fun initDateClickListener() {
+ binding.etOurTodoCreateDate.setOnSingleClickListener {
+ ourTodoCreateBottomSheet = OurTodoCreateBottomSheet()
+ ourTodoCreateBottomSheet?.show(supportFragmentManager, DATE_BOTTOM_SHEET)
+ }
+ }
+
+ private fun initFinishBtnListener() {
+ binding.btnOurTodoMemoFinish.setOnSingleClickListener {
+ // 서버통신 진행
+ finish()
+ }
+ }
+
+ private fun initBackBtnListener() {
+ binding.btnOurTodoCreateBack.setOnSingleClickListener {
+ finish()
+ }
+ }
+
+ private fun observeTextLength() {
+ viewModel.nowTodoLength.observe(this) { length ->
+ val maxTodoLen = viewModel.getMaxTodoLen()
+
+ if (length > maxTodoLen) {
+ binding.etOurTodoCreateTodo.apply {
+ setText(text?.subSequence(0, maxTodoLen))
+ setSelection(maxTodoLen)
+ }
+ }
+ setColors(
+ false,
+ viewModel.nowTodoLength.value ?: 0,
+ binding.tvOurTodoTodoCounter,
+ ) { background ->
+ binding.etOurTodoCreateTodo.background = setBackgroundColor(background)
+ }
+ }
+ }
+
+ private fun observeMemoLength() {
+ viewModel.nowMemoLength.observe(this) { length ->
+ val maxMemoLen = viewModel.getMaxMemoLen()
+ if (length > maxMemoLen) {
+ binding.etOurTodoCreateTodo.apply {
+ setText(text?.subSequence(0, maxMemoLen))
+ setSelection(maxMemoLen)
+ }
+ }
+ setColors(
+ false,
+ viewModel.nowMemoLength.value ?: 0,
+ binding.tvOurTodoMemoCounter,
+ ) { background ->
+ binding.etOurTodoCreateMemo.background = setBackgroundColor(background)
+ }
+ }
+ }
+
+ private fun observeDateEmpty() {
+ viewModel.endDate.observe(this) { text ->
+ if (text.isEmpty()) {
+ binding.etOurTodoCreateDate.setBackgroundResource(R.drawable.shape_rect_4_gray200_line)
+ } else {
+ binding.etOurTodoCreateDate.setBackgroundResource(R.drawable.shape_rect_4_gray700_line)
+ }
+ }
+ }
+
+ private fun setColors(
+ hasFocus: Boolean,
+ length: Int,
+ counter: TextView,
+ setBackground: (Int) -> Unit,
+ ) {
+ val (color, background) = when {
+ hasFocus || viewModel.nowTodoLength.value != 0 -> R.color.gray_700 to R.drawable.shape_rect_4_gray700_line
+ length == 0 -> R.color.gray_200 to R.drawable.shape_rect_4_gray200_line
+ else -> R.color.gray_700 to R.drawable.shape_rect_4_gray700_line
+ }
+ setCounterColor(counter, color)
+ setBackground(background)
+ }
+
+ private fun setCounterColor(counter: TextView, color: Int) {
+ counter.setTextColor(getColor(color))
+ }
+
+ private fun setBackgroundColor(background: Int): Drawable? {
+ return ResourcesCompat.getDrawable(
+ this.resources,
+ background,
+ theme,
+ )
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ _adapter = null
+ if (ourTodoCreateBottomSheet?.isAdded == true) ourTodoCreateBottomSheet?.dismiss()
+ }
+
+ companion object {
+ private const val DATE_BOTTOM_SHEET = "DATE_BOTTOM_SHEET"
+ }
+
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateBottomSheet.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateBottomSheet.kt
new file mode 100644
index 00000000..e137b5e1
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateBottomSheet.kt
@@ -0,0 +1,37 @@
+package com.going.presentation.todo.ourtodo.create
+
+import android.os.Bundle
+import android.view.View
+import androidx.fragment.app.activityViewModels
+import com.going.presentation.R
+import com.going.presentation.databinding.FragmentMyTodoCreateBottomSheetBinding
+import com.going.presentation.todo.mytodo.create.MyTodoCreateViewModel
+import com.going.ui.base.BaseBottomSheet
+import com.going.ui.extension.setOnSingleClickListener
+
+class OurTodoCreateBottomSheet() :
+ BaseBottomSheet(R.layout.fragment_my_todo_create_bottom_sheet) {
+
+ private val viewModel by activityViewModels()
+
+ override fun onStart() {
+ super.onStart()
+ dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ initFinishBtnClickListener()
+ }
+
+ private fun initFinishBtnClickListener() {
+ binding.btnCreateTripFinish.setOnSingleClickListener {
+ viewModel.endDate.value =
+ binding.dpCreateTripDate.year.toString() + "." + (binding.dpCreateTripDate.month + 1).toString() + "." + binding.dpCreateTripDate.dayOfMonth.toString()
+ viewModel.checkIsFinishAvailable()
+ dismiss()
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateViewModel.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateViewModel.kt
new file mode 100644
index 00000000..2227b143
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/OurTodoCreateViewModel.kt
@@ -0,0 +1,47 @@
+package com.going.presentation.todo.ourtodo.create
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import java.text.BreakIterator
+
+class OurTodoCreateViewModel : ViewModel() {
+
+ val todo = MutableLiveData("")
+ val nowTodoLength = MutableLiveData(0)
+
+ val endDate = MutableLiveData("")
+
+ val memo = MutableLiveData("")
+ val nowMemoLength = MutableLiveData(0)
+
+ val isFinishAvailable = MutableLiveData(false)
+
+ fun getMaxTodoLen() = MAX_TODO_LEN
+
+ fun getMaxMemoLen() = MAX_MEMO_LEN
+
+ fun checkIsFinishAvailable() {
+ nowTodoLength.value = getGraphemeLength(todo.value)
+ nowMemoLength.value = getGraphemeLength(memo.value)
+ isFinishAvailable.value =
+ todo.value?.isNotEmpty() == true && memo.value?.isNotEmpty() == true && endDate.value?.isNotEmpty() == true
+ }
+
+ // 이모지 포함 글자 수 세는 함수
+ private fun getGraphemeLength(value: String?): Int {
+ BREAK_ITERATOR.setText(value)
+ var count = 0
+ while (BREAK_ITERATOR.next() != BreakIterator.DONE) {
+ count++
+ }
+ return count
+ }
+
+ companion object {
+ val BREAK_ITERATOR: BreakIterator = BreakIterator.getCharacterInstance()
+
+ const val MAX_TODO_LEN = 15
+ const val MAX_MEMO_LEN = 1000
+ }
+
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/TodoCreateNameAdapter.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/TodoCreateNameAdapter.kt
new file mode 100644
index 00000000..a9ce4ca1
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/TodoCreateNameAdapter.kt
@@ -0,0 +1,29 @@
+package com.going.presentation.todo.ourtodo.create
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.ListAdapter
+import com.going.presentation.databinding.ItemTodoCreateNameBinding
+import com.going.ui.extension.ItemDiffCallback
+
+class TodoCreateNameAdapter(
+ private val isFixed: Boolean
+) : ListAdapter(diffUtil) {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoCreateNameViewHolder {
+ val binding: ItemTodoCreateNameBinding =
+ ItemTodoCreateNameBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return TodoCreateNameViewHolder(binding, isFixed)
+ }
+
+ override fun onBindViewHolder(holder: TodoCreateNameViewHolder, position: Int) {
+ holder.onBind(getItem(position))
+ }
+
+ companion object {
+ private val diffUtil = ItemDiffCallback(
+ onItemsTheSame = { old, new -> old.length == new.length },
+ onContentsTheSame = { old, new -> old == new },
+ )
+ }
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/TodoCreateNameViewHolder.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/TodoCreateNameViewHolder.kt
new file mode 100644
index 00000000..0cabf5ba
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/create/TodoCreateNameViewHolder.kt
@@ -0,0 +1,43 @@
+package com.going.presentation.todo.ourtodo.create
+
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import com.going.presentation.R
+import com.going.presentation.databinding.ItemTodoCreateNameBinding
+import com.going.ui.extension.setOnSingleClickListener
+
+class TodoCreateNameViewHolder(
+ val binding: ItemTodoCreateNameBinding,
+ private val isFixed: Boolean
+) : RecyclerView.ViewHolder(binding.root) {
+
+ private val whiteColor = ContextCompat.getColor(binding.root.context, R.color.white_000)
+ private val grayColor = ContextCompat.getColor(binding.root.context, R.color.gray_300)
+
+ fun onBind(item: String) {
+ binding.run {
+ tvTodoName.text = item
+
+ if (item == "김상호") {
+ tvTodoName.setBackgroundResource(R.drawable.sel_todo_shape_red500_fill)
+ } else {
+ tvTodoName.setBackgroundResource(R.drawable.sel_todo_shape_gray400_fill)
+ }
+
+ if (isFixed) {
+ tvTodoName.isSelected = true
+ tvTodoName.setTextColor(whiteColor)
+ } else {
+ layoutTodoName.setOnClickListener {
+ tvTodoName.isSelected = !tvTodoName.isSelected
+ if (tvTodoName.isSelected) {
+ tvTodoName.setTextColor(whiteColor)
+ } else {
+ tvTodoName.setTextColor(grayColor)
+ }
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/detail/OurTodoDetailActivity.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/detail/OurTodoDetailActivity.kt
new file mode 100644
index 00000000..29f7586d
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/detail/OurTodoDetailActivity.kt
@@ -0,0 +1,78 @@
+package com.going.presentation.todo.ourtodo.detail
+
+import android.os.Bundle
+import androidx.activity.viewModels
+import com.going.presentation.R
+import com.going.presentation.databinding.ActivityOurTodoDetailBinding
+import com.going.presentation.todo.ourtodo.create.TodoCreateNameAdapter
+import com.going.ui.base.BaseActivity
+import com.going.ui.extension.setOnSingleClickListener
+import com.going.ui.extension.toast
+
+class OurTodoDetailActivity :
+ BaseActivity(R.layout.activity_our_todo_detail) {
+
+ private val viewModel by viewModels()
+
+ private var _adapter: TodoCreateNameAdapter? = null
+ private val adapter
+ get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ initViewModel()
+ initNameListAdapter()
+ initBackBtnClickListener()
+ initDeleteBtnClickListener()
+ initModBtnClickListener()
+ setDetailData()
+ }
+
+ private fun initViewModel() {
+ binding.vm = viewModel
+ }
+
+ private fun initNameListAdapter() {
+ // 아워투두 뷰에서 intent로 친구목록 받아와서 적용할 예정
+ _adapter = TodoCreateNameAdapter(true)
+ binding.rvOurTodoDetailPerson.adapter = adapter
+ }
+
+ private fun initBackBtnClickListener() {
+ binding.btnOurTodoDetailBack.setOnSingleClickListener {
+ finish()
+ }
+ }
+
+ private fun initDeleteBtnClickListener() {
+ binding.btnOurTodoDetailDelete.setOnSingleClickListener {
+ // 삭제 서버 통신
+ finish()
+ }
+ }
+
+ private fun initModBtnClickListener() {
+ binding.btnOurTodoDetailMod.setOnSingleClickListener {
+ toast(getString(R.string.will_be_update))
+ }
+ }
+
+ private fun setDetailData() {
+ intent.getLongExtra(EXTRA_TODO_ID,0)
+ // 추후 todoId를 보내서 받는 서버통신으로 변경
+ viewModel.todo.value = "맛있는 밥 먹기"
+ viewModel.endDate.value = "2024.1.10"
+ adapter.submitList(listOf("김상호", "박동민", "조세연", "이유빈"))
+ viewModel.memo.value = "오늘 완전 완전 맛있는 파스타를 먹었는데 완전 아주 그냥 이게 말이지"
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ _adapter = null
+ }
+
+ companion object {
+ const val EXTRA_TODO_ID = "EXTRA_TODO_ID"
+ }
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/detail/OurTodoDetailViewModel.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/detail/OurTodoDetailViewModel.kt
new file mode 100644
index 00000000..67b04ab6
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/detail/OurTodoDetailViewModel.kt
@@ -0,0 +1,17 @@
+package com.going.presentation.todo.ourtodo.detail
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+class OurTodoDetailViewModel : ViewModel() {
+
+ val todo = MutableLiveData("")
+ val endDate = MutableLiveData("")
+ val memo = MutableLiveData("")
+
+ companion object {
+ const val MAX_TODO_LEN = 15
+ const val MAX_MEMO_LEN = 1000
+ }
+
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoCompleteFragment.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoCompleteFragment.kt
index 723f2111..f2c3fba5 100644
--- a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoCompleteFragment.kt
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoCompleteFragment.kt
@@ -1,11 +1,14 @@
package com.going.presentation.todo.ourtodo.todolist
+import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import com.going.presentation.R
import com.going.presentation.databinding.FragmentOurTodoCompleteBinding
import com.going.presentation.todo.ourtodo.OurTodoViewModel
+import com.going.presentation.todo.ourtodo.detail.OurTodoDetailActivity
+import com.going.presentation.todo.ourtodo.detail.OurTodoDetailActivity.Companion.EXTRA_TODO_ID
import com.going.ui.base.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@@ -22,12 +25,23 @@ class OurTodoCompleteFragment() :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- initTodoListAdapter()
+ initAdapterWithClickListener()
+ setTodoList()
}
- private fun initTodoListAdapter() {
- _adapter = OurTodoListAdapter(true)
+ private fun initAdapterWithClickListener() {
+ _adapter = OurTodoListAdapter(
+ true
+ ) { todoId ->
+ Intent(activity, OurTodoDetailActivity::class.java).apply {
+ putExtra(EXTRA_TODO_ID, todoId)
+ startActivity(this)
+ }
+ }
binding.rvOurTodoComplete.adapter = adapter
+ }
+
+ private fun setTodoList() {
adapter.submitList(viewModel.mockCompleteTodoList)
}
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListAdapter.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListAdapter.kt
index 67cf45e0..f1535234 100644
--- a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListAdapter.kt
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListAdapter.kt
@@ -8,13 +8,14 @@ import com.going.presentation.databinding.ItemOurTodoBinding
import com.going.ui.extension.ItemDiffCallback
class OurTodoListAdapter(
- private val isCompleted: Boolean
+ private val isCompleted: Boolean,
+ private val itemDetailClick: (Long) -> Unit
) : ListAdapter(diffUtil) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OurTodoListViewHolder {
val binding: ItemOurTodoBinding =
ItemOurTodoBinding.inflate(LayoutInflater.from(parent.context), parent, false)
- return OurTodoListViewHolder(binding, isCompleted)
+ return OurTodoListViewHolder(binding, isCompleted, itemDetailClick)
}
override fun onBindViewHolder(holder: OurTodoListViewHolder, position: Int) {
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListViewHolder.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListViewHolder.kt
index 9c2df34d..a8ea27f7 100644
--- a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListViewHolder.kt
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoListViewHolder.kt
@@ -6,10 +6,12 @@ import com.going.domain.entity.response.TodoModel
import com.going.presentation.R
import com.going.presentation.databinding.ItemOurTodoBinding
import com.going.presentation.todo.name.TodoNameAdapter
+import com.going.ui.extension.setOnSingleClickListener
class OurTodoListViewHolder(
val binding: ItemOurTodoBinding,
- private val isCompleted: Boolean
+ private val isCompleted: Boolean,
+ private val itemDetailClick: (Long) -> Unit
) : RecyclerView.ViewHolder(binding.root) {
fun onBind(item: TodoModel) {
@@ -19,6 +21,7 @@ class OurTodoListViewHolder(
rvOurTodoName.adapter = TodoNameAdapter(isCompleted).apply {
submitList(item.allocation)
}
+
if (isCompleted) {
tvOurTodoItemTitle.setTextColor(ContextCompat.getColor(binding.root.context,R.color.gray_300))
tvOurTodoItemDate.setTextColor(ContextCompat.getColor(binding.root.context,R.color.gray_200))
@@ -26,6 +29,10 @@ class OurTodoListViewHolder(
tvOurTodoItemTitle.setTextColor(ContextCompat.getColor(binding.root.context,R.color.black_000))
tvOurTodoItemDate.setTextColor(ContextCompat.getColor(binding.root.context,R.color.gray_300))
}
+
+ root.setOnSingleClickListener {
+ itemDetailClick(item.todoId)
+ }
}
}
diff --git a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoUncompleteFragment.kt b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoUncompleteFragment.kt
index 17b79c66..6908c355 100644
--- a/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoUncompleteFragment.kt
+++ b/presentation/src/main/java/com/going/presentation/todo/ourtodo/todolist/OurTodoUncompleteFragment.kt
@@ -1,11 +1,14 @@
package com.going.presentation.todo.ourtodo.todolist
+import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import com.going.presentation.R
import com.going.presentation.databinding.FragmentOurTodoUncompleteBinding
import com.going.presentation.todo.ourtodo.OurTodoViewModel
+import com.going.presentation.todo.ourtodo.detail.OurTodoDetailActivity
+import com.going.presentation.todo.ourtodo.detail.OurTodoDetailActivity.Companion.EXTRA_TODO_ID
import com.going.ui.base.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@@ -22,12 +25,23 @@ class OurTodoUncompleteFragment() :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- initTodoListAdapter()
+ initAdapterWithClickListener()
+ setTodoList()
}
- private fun initTodoListAdapter() {
- _adapter = OurTodoListAdapter(false)
+ private fun initAdapterWithClickListener() {
+ _adapter = OurTodoListAdapter(
+ false
+ ) { todoId ->
+ Intent(activity, OurTodoDetailActivity::class.java).apply {
+ putExtra(EXTRA_TODO_ID, todoId)
+ startActivity(this)
+ }
+ }
binding.rvOurTodoUncomplete.adapter = adapter
+ }
+
+ private fun setTodoList() {
adapter.submitList(viewModel.mockUncompleteTodoList)
}
diff --git a/presentation/src/main/res/drawable/sel_todo_shape_gray400_fill.xml b/presentation/src/main/res/drawable/sel_todo_shape_gray400_fill.xml
new file mode 100644
index 00000000..8fe2d738
--- /dev/null
+++ b/presentation/src/main/res/drawable/sel_todo_shape_gray400_fill.xml
@@ -0,0 +1,21 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/drawable/sel_todo_shape_red500_fill.xml b/presentation/src/main/res/drawable/sel_todo_shape_red500_fill.xml
new file mode 100644
index 00000000..630502f8
--- /dev/null
+++ b/presentation/src/main/res/drawable/sel_todo_shape_red500_fill.xml
@@ -0,0 +1,21 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/drawable/sel_todo_shape_tv_name.xml b/presentation/src/main/res/drawable/sel_todo_shape_red500_line.xml
similarity index 100%
rename from presentation/src/main/res/drawable/sel_todo_shape_tv_name.xml
rename to presentation/src/main/res/drawable/sel_todo_shape_red500_line.xml
diff --git a/presentation/src/main/res/layout/activity_our_todo_create.xml b/presentation/src/main/res/layout/activity_our_todo_create.xml
new file mode 100644
index 00000000..35e98b77
--- /dev/null
+++ b/presentation/src/main/res/layout/activity_our_todo_create.xml
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/layout/activity_our_todo_detail.xml b/presentation/src/main/res/layout/activity_our_todo_detail.xml
new file mode 100644
index 00000000..f640526f
--- /dev/null
+++ b/presentation/src/main/res/layout/activity_our_todo_detail.xml
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/layout/fragment_our_todo_create_bottom_sheet.xml b/presentation/src/main/res/layout/fragment_our_todo_create_bottom_sheet.xml
new file mode 100644
index 00000000..e807c634
--- /dev/null
+++ b/presentation/src/main/res/layout/fragment_our_todo_create_bottom_sheet.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/layout/item_todo_create_name.xml b/presentation/src/main/res/layout/item_todo_create_name.xml
new file mode 100644
index 00000000..169e5620
--- /dev/null
+++ b/presentation/src/main/res/layout/item_todo_create_name.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/layout/item_todo_name.xml b/presentation/src/main/res/layout/item_todo_name.xml
index bc933fb2..017d55c8 100644
--- a/presentation/src/main/res/layout/item_todo_name.xml
+++ b/presentation/src/main/res/layout/item_todo_name.xml
@@ -13,7 +13,7 @@
style="@style/TextAppearance.Doorip.Detail2.Regular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:background="@drawable/sel_todo_shape_tv_name"
+ android:background="@drawable/sel_todo_shape_red500_line"
android:paddingHorizontal="5dp"
android:textColor="@color/gray_400"
app:layout_constraintBottom_toBottomOf="parent"
diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml
index b64cefe4..530d9ad8 100644
--- a/presentation/src/main/res/values/strings.xml
+++ b/presentation/src/main/res/values/strings.xml
@@ -70,8 +70,8 @@
나만보기
할일이 %s개 남았어요
-
- 여행 생성하기
+
+ 할일 추가
할일
할일을 입력해주세요.
언제까지