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개 남았어요 - - 여행 생성하기 + + 할일 추가 할일 할일을 입력해주세요. 언제까지