diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/GetHappyProgressUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/GetHappyProgressUseCase.kt similarity index 86% rename from app/src/main/java/com/sopetit/softie/domain/usecase/GetHappyProgressUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/GetHappyProgressUseCase.kt index 546c1dde..8a67e40b 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/GetHappyProgressUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/GetHappyProgressUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.happyroutine import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/PatchMemberHappinessAchieveUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PatchMemberHappinessAchieveUseCase.kt similarity index 86% rename from app/src/main/java/com/sopetit/softie/domain/usecase/PatchMemberHappinessAchieveUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PatchMemberHappinessAchieveUseCase.kt index 8e35763d..4af2a0be 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/PatchMemberHappinessAchieveUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PatchMemberHappinessAchieveUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.happyroutine import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/progress/HappyProgressFragment.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineFragment.kt similarity index 65% rename from app/src/main/java/com/sopetit/softie/ui/happyroutine/progress/HappyProgressFragment.kt rename to app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineFragment.kt index 25331024..520c25f5 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/progress/HappyProgressFragment.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineFragment.kt @@ -6,10 +6,11 @@ import android.view.View import androidx.fragment.app.viewModels import coil.load import com.sopetit.softie.R -import com.sopetit.softie.databinding.FragmentHappyProgressBinding -import com.sopetit.softie.ui.happyroutine.HappyRoutineFragment +import com.sopetit.softie.databinding.FragmentHappyMyRoutineBinding +import com.sopetit.softie.ui.happyroutine.HappyMyRoutineViewModel import com.sopetit.softie.ui.happyroutine.complete.HappyRoutineCompleteActivity import com.sopetit.softie.ui.happyroutine.delete.HappyDeleteFragment +import com.sopetit.softie.ui.happyroutine.list.HappyAddListActivity import com.sopetit.softie.util.OriginalBottomSheet import com.sopetit.softie.util.binding.BindingBottomSheet import com.sopetit.softie.util.binding.BindingFragment @@ -17,41 +18,44 @@ import com.sopetit.softie.util.setSingleOnClickListener import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class HappyProgressFragment : - BindingFragment(R.layout.fragment_happy_progress) { +class HappyMyRoutineFragment : + BindingFragment(R.layout.fragment_happy_my_routine) { - private val viewModel by viewModels() + private val viewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val happyProgress = viewModel.getHappyProgress() + binding.viewModel = viewModel - setCardBinding(happyProgress) + initSetBearFace() + setMyCardEnter() setCardEnter() setEditEnter() + setClearEnter() } - private fun setCardBinding(happyProgress: Unit) { - viewModel.happyProgressResponse.observe(viewLifecycleOwner) { happyProgress -> - happyProgress?.let { - with(binding) { - tvHappyProgressSubtitle.text = happyProgress.title - ivHappyProgressCardFront.load(happyProgress.contentImageUrl) - tvHappyProgressCardFrontTitle.text = - happyProgress.content - tvHappyProgressCardBackTitle.text = - happyProgress.content - tvHappyProgressCardBackContent.text = - happyProgress.detailContent - tvHappyProgressCardBackTime.text = - happyProgress.timeTaken - tvHappyProgressCardBackPlace.text = happyProgress.place - } - setClearEnter(happyProgress.iconImageUrl) + override fun onResume() { + super.onResume() + viewModel.getHappyProgress() + } + + private fun initSetBearFace() { + viewModel.setDollFace() + viewModel.bearFace.observe(viewLifecycleOwner) { bearFace -> + binding.ivHappyRoutineCharacter.load(bearFace) { + placeholder(R.drawable.ic_loading_bear) + error(R.drawable.ic_loading_bear) } } } + private fun setMyCardEnter() { + binding.ivHappyRoutineEmptyCard.setOnClickListener { + val intent = Intent(requireContext(), HappyAddListActivity::class.java) + startActivity(intent) + } + } + private fun setCardEnter() { with(binding) { clHappyProgressCardFront.setSingleOnClickListener { @@ -100,31 +104,32 @@ class HappyProgressFragment : doBtnAction = { viewModel.happyProgressResponse.observe(viewLifecycleOwner) { happyProgress -> happyProgress?.let { + startHappyRoutineCompleteActivity() viewModel.patchAchieveHappyRoutine(happyProgress.routineId) startHappyRoutineCompleteActivity() - moveToHappyRoutineEmptyCardView() } } } ).show(parentFragmentManager, OriginalBottomSheet.BOTTOM_SHEET_TAG) } - private fun moveToHappyRoutineEmptyCardView() { - val happyRoutineFragment = HappyRoutineFragment() - requireActivity().supportFragmentManager.beginTransaction() - .replace(R.id.fcv_main, happyRoutineFragment) - .commit() - } - private fun startHappyRoutineCompleteActivity() { val intentToCompleteActivity = Intent(requireActivity(), HappyRoutineCompleteActivity::class.java) startActivity(intentToCompleteActivity) } - private fun setClearEnter(icon: String) { - binding.btnHappyProgressClear.setSingleOnClickListener { - initHappyRoutineCompleteBottomSheet(icon) + private fun setClearEnter() { + binding.btnHappyProgressClear.setOnClickListener { + viewModel.happyProgressResponse.value?.iconImageUrl?.let { url -> + initHappyRoutineCompleteBottomSheet( + url + ) + } } } + + companion object { + private const val REQUEST_CODE_HAPPY_DETAIL = 990320 + } } diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/progress/HappyProgressViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt similarity index 52% rename from app/src/main/java/com/sopetit/softie/ui/happyroutine/progress/HappyProgressViewModel.kt rename to app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt index adedf7ca..a4558497 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/progress/HappyProgressViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.ui.happyroutine.progress +package com.sopetit.softie.ui.happyroutine import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -6,41 +6,60 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopetit.softie.domain.entity.HappyProgress import com.sopetit.softie.domain.usecase.DeleteMemberHappyRoutineUseCase -import com.sopetit.softie.domain.usecase.GetHappyProgressUseCase -import com.sopetit.softie.domain.usecase.PatchMemberHappinessAchieveUseCase +import com.sopetit.softie.domain.usecase.GetBearTypeUseCase +import com.sopetit.softie.domain.usecase.doll.GetDollUseCase +import com.sopetit.softie.domain.usecase.happyroutine.GetHappyProgressUseCase +import com.sopetit.softie.domain.usecase.happyroutine.PatchMemberHappinessAchieveUseCase +import com.sopetit.softie.ui.onboarding.OnboardingViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject @HiltViewModel -class HappyProgressViewModel @Inject constructor( +class HappyMyRoutineViewModel @Inject constructor( + private val getDollUseCase: GetDollUseCase, + private val getBearTypeUseCase: GetBearTypeUseCase, private val getHappyProgressUseCase: GetHappyProgressUseCase, private val patchMemberHappinessAchieveUseCase: PatchMemberHappinessAchieveUseCase, private val deleteMemberHappyRoutineUseCase: DeleteMemberHappyRoutineUseCase ) : ViewModel() { + private val _bearFace: MutableLiveData = MutableLiveData() + val bearFace: LiveData + get() = _bearFace + private val _happyProgressResponse = MutableLiveData() val happyProgressResponse: LiveData get() = _happyProgressResponse private val _isDeleteHappyCardResponse: MutableLiveData = MutableLiveData() - val isDeleteHappyCardResponse: LiveData - get() = _isDeleteHappyCardResponse - - private val _isHappyRoutineAchieve: MutableLiveData = MutableLiveData() - val isHappyRoutineAchieve: LiveData - get() = _isHappyRoutineAchieve - - private val _myRoutineId: MutableLiveData = MutableLiveData() - val myRoutineId: LiveData - get() = _myRoutineId + private val _isHappinessRoutineProgress: MutableLiveData = MutableLiveData(false) + val isHappinessRoutineProgress: LiveData get() = _isHappinessRoutineProgress + fun setDollFace() { + viewModelScope.launch { + when (getBearTypeUseCase()) { + OnboardingViewModel.BROWN -> getDollUseCase(OnboardingViewModel.BROWN) + OnboardingViewModel.GRAY -> getDollUseCase(OnboardingViewModel.GRAY) + OnboardingViewModel.WHITE -> getDollUseCase(OnboardingViewModel.WHITE) + OnboardingViewModel.RED -> getDollUseCase(OnboardingViewModel.RED) + else -> getDollUseCase(OnboardingViewModel.BROWN) + }.onSuccess { response -> + _bearFace.value = response + Timber.d("곰돌이 서버 통신 성공 -> $response") + }.onFailure { + Timber.e("곰돌이 서버 통신 실패 -> ${it.message}") + } + } + } fun getHappyProgress() { viewModelScope.launch { getHappyProgressUseCase() .onSuccess { response -> + _isHappinessRoutineProgress.value = true _happyProgressResponse.value = response } .onFailure { throwable -> + _isHappinessRoutineProgress.value = false Timber.e("$throwable") } } @@ -50,7 +69,7 @@ class HappyProgressViewModel @Inject constructor( viewModelScope.launch { patchMemberHappinessAchieveUseCase(routineId) .onSuccess { response -> - _isHappyRoutineAchieve.value + Timber.e("$response") } .onFailure { throwable -> Timber.e("$throwable") diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyRoutineFragment.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyRoutineFragment.kt deleted file mode 100644 index f7991f68..00000000 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyRoutineFragment.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.sopetit.softie.ui.happyroutine - -import android.content.Intent -import android.os.Bundle -import android.view.View -import androidx.fragment.app.viewModels -import coil.load -import com.sopetit.softie.R -import com.sopetit.softie.databinding.FragmentHappyRoutineBinding -import com.sopetit.softie.ui.happyroutine.list.HappyAddListActivity -import com.sopetit.softie.util.binding.BindingFragment -import com.sopetit.softie.util.setSingleOnClickListener -import com.sopetit.softie.util.setStatusBarColor -import dagger.hilt.android.AndroidEntryPoint - -@AndroidEntryPoint -class HappyRoutineFragment : - BindingFragment(R.layout.fragment_happy_routine) { - - private val viewModel by viewModels() - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - initSetBearFace() - setCardEnter() - setStatusBarColor(R.color.background) - } - - private fun initSetBearFace() { - viewModel.setDollFace() - viewModel.bearFace.observe(viewLifecycleOwner) { bearFace -> - binding.ivHappyRoutineCharacter.load(bearFace) - } - } - - private fun setCardEnter() { - binding.ivHappyRoutineEmptyCard.setSingleOnClickListener { - val intent = Intent(requireContext(), HappyAddListActivity::class.java) - startActivity(intent) - } - } -} diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyRoutineViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyRoutineViewModel.kt deleted file mode 100644 index f9b48601..00000000 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyRoutineViewModel.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.sopetit.softie.ui.happyroutine - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.sopetit.softie.domain.usecase.GetBearTypeUseCase -import com.sopetit.softie.domain.usecase.doll.GetDollUseCase -import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.BROWN -import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.GRAY -import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.RED -import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.WHITE -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.launch -import timber.log.Timber -import javax.inject.Inject - -@HiltViewModel -class HappyRoutineViewModel @Inject constructor( - private val getDollUseCase: GetDollUseCase, - private val getBearTypeUseCase: GetBearTypeUseCase -) : ViewModel() { - private val _bearFace: MutableLiveData = MutableLiveData() - val bearFace: LiveData - get() = _bearFace - - fun setDollFace() { - viewModelScope.launch { - when (getBearTypeUseCase()) { - BROWN -> getDollUseCase(BROWN) - GRAY -> getDollUseCase(GRAY) - WHITE -> getDollUseCase(WHITE) - RED -> getDollUseCase(RED) - else -> getDollUseCase(BROWN) - }.onSuccess { response -> - _bearFace.value = response - Timber.d("곰돌이 서버 통신 성공 -> $response") - }.onFailure { - Timber.e("곰돌이 서버 통신 실패 -> ${it.message}") - } - } - } -} diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/delete/HappyDeleteFragment.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/delete/HappyDeleteFragment.kt index 56256f3a..3d4f25f7 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/delete/HappyDeleteFragment.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/delete/HappyDeleteFragment.kt @@ -6,8 +6,8 @@ import androidx.fragment.app.viewModels import coil.load import com.sopetit.softie.R import com.sopetit.softie.databinding.FragmentHappyDeleteBinding -import com.sopetit.softie.ui.happyroutine.HappyRoutineFragment -import com.sopetit.softie.ui.happyroutine.progress.HappyProgressViewModel +import com.sopetit.softie.ui.happyroutine.HappyMyRoutineViewModel +import com.sopetit.softie.ui.happyroutine.progress.HappyMyRoutineFragment import com.sopetit.softie.util.OriginalBottomSheet import com.sopetit.softie.util.binding.BindingBottomSheet import com.sopetit.softie.util.binding.BindingFragment @@ -19,7 +19,7 @@ import dagger.hilt.android.AndroidEntryPoint class HappyDeleteFragment : BindingFragment(R.layout.fragment_happy_delete) { - private val viewModel by viewModels() + private val viewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val happyProgress = viewModel.getHappyProgress() @@ -98,7 +98,7 @@ class HappyDeleteFragment : getString(R.string.happy_routine_delete_snack_bar) ) requireActivity().supportFragmentManager.beginTransaction() - .replace(R.id.fcv_main, HappyRoutineFragment()) + .replace(R.id.fcv_main, HappyMyRoutineFragment()) .commit() } } diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailActivity.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailActivity.kt index 009347c4..5c4382cf 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailActivity.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailActivity.kt @@ -7,14 +7,13 @@ import android.os.Bundle import android.view.View import androidx.activity.viewModels import androidx.recyclerview.widget.RecyclerView -import androidx.viewpager2.widget.CompositePageTransformer import androidx.viewpager2.widget.ViewPager2 import coil.load import com.sopetit.softie.R import com.sopetit.softie.databinding.ActivityHappyAddDetailBinding import com.sopetit.softie.ui.LoadingIndicator +import com.sopetit.softie.ui.happyroutine.list.HappyAddListActivity.Companion.ICON_IMAGE_URL import com.sopetit.softie.ui.happyroutine.list.HappyAddListActivity.Companion.ID -import com.sopetit.softie.ui.main.MainActivity import com.sopetit.softie.ui.onboarding.OnboardingActivity.Companion.LOADING_DELAY import com.sopetit.softie.util.OriginalBottomSheet import com.sopetit.softie.util.binding.BindingActivity @@ -41,18 +40,19 @@ class HappyDetailActivity : setStatusBarColorFromResource(R.color.background) val routineId = intent.getIntExtra(ID, -1).toString() + val imageUrl = intent.getStringExtra(ICON_IMAGE_URL) - setInitBinding(routineId) + setInitBinding(routineId, imageUrl) setCurrentCard() setBackEnter() setupAdapter(routineId) setIndicator() initSetLoading() initViewPager() - initPagerDiv(0, 90) + initPagerDiv(0, 20) } - private fun setInitBinding(routineId: String) { + private fun setInitBinding(routineId: String, imageUrl: String?) { viewModel.getHappyCard(routineId) viewModel.happyCardResponse.observe(this) { happyCard -> happyCard?.let { @@ -64,7 +64,9 @@ class HappyDetailActivity : } viewModel.mySubroutineId.observe(this) { mySubRoutineId -> mySubRoutineId?.let { - setBottomSheetEnter(happyCard.iconImageUrl, mySubRoutineId) + imageUrl?.let { + setBottomSheetEnter(it, mySubRoutineId) + } } } } @@ -120,10 +122,8 @@ class HappyDetailActivity : } private fun moveToProgress() { - val intent = Intent(this, MainActivity::class.java) - intent.putExtra("happy_progress_fragment", "happy_progress") - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK - startActivity(intent) + val intentToHappinessAddRoutine = Intent().putExtra("isAdded", true) + setResult(RESULT_OK, intentToHappinessAddRoutine) finish() } @@ -154,7 +154,7 @@ class HappyDetailActivity : val dp = resources.getDimensionPixelSize(R.dimen.view_margin) val d = resources.displayMetrics.density - val margin = (dp * d).toInt() + val margin = (dp * d * 0.8).toInt() with(binding.vpHappyAddDetailCard) { clipChildren = false @@ -162,8 +162,6 @@ class HappyDetailActivity : offscreenPageLimit = 3 setPadding(margin, 0, margin, 0) } - val compositePageTransformer = CompositePageTransformer() - binding.vpHappyAddDetailCard.setPageTransformer(compositePageTransformer) } private fun initPagerDiv(previewWidth: Int, itemMargin: Int) { diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListActivity.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListActivity.kt index 27a4c477..7e3f1b41 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListActivity.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListActivity.kt @@ -2,6 +2,7 @@ package com.sopetit.softie.ui.happyroutine.list import android.content.Intent import android.os.Bundle +import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.recyclerview.widget.RecyclerView import com.sopetit.softie.R @@ -25,6 +26,15 @@ class HappyAddListActivity : private var happyAddListChipContentAdapter: HappyAddListChipContentAdapter? = null private var happyAddListContentAdapter: HappyAddListContentAdapter? = null + private val addHappinessRoutineResult = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + val isHappinessRoutineAdd = result.data?.getBooleanExtra("isAdded", false) ?: false + if (result.resultCode == RESULT_OK && isHappinessRoutineAdd) { + finish() + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityHappyAddListBinding.inflate(layoutInflater) @@ -74,14 +84,16 @@ class HappyAddListActivity : } } - private fun moveToDetail(id: Int) { - Intent(this, HappyDetailActivity::class.java).apply { + private fun moveToDetail(id: Int, iconImageUrl: String) { + val intentToDetail = Intent(this, HappyDetailActivity::class.java).apply { putExtra(ID, id) - startActivity(this) + putExtra(ICON_IMAGE_URL, iconImageUrl) } + addHappinessRoutineResult.launch(intentToDetail) } companion object { const val ID = "id" + const val ICON_IMAGE_URL = "iconImageUrl" } } diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListChipContentAdapter.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListChipContentAdapter.kt index cda83f50..b92e0ee6 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListChipContentAdapter.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListChipContentAdapter.kt @@ -7,7 +7,6 @@ import androidx.recyclerview.widget.RecyclerView import com.sopetit.softie.databinding.ItemHappyAddListChipBinding import com.sopetit.softie.domain.entity.HappyChip import com.sopetit.softie.util.ItemDiffCallback -import com.sopetit.softie.util.setSingleOnClickListener class HappyAddListChipContentAdapter : ListAdapter( @@ -16,32 +15,36 @@ class HappyAddListChipContentAdapter : onContentsTheSame = { oldItem, newItem -> oldItem == newItem } ) ) { - private val selectedPositions = HashSet() private var onItemClickListener: ((HappyChip) -> Unit)? = null + private var isInitialSelection = true inner class HappyAddListChipContentViewHolder( private val binding: ItemHappyAddListChipBinding ) : RecyclerView.ViewHolder(binding.root) { fun onBind(data: HappyChip) { binding.itemHappyAddChipComponent.text = data.name - binding.itemHappyAddChipComponent.isChecked = isSelected(adapterPosition) + val isSelected = isSelected(adapterPosition, data.themeId) + binding.itemHappyAddChipComponent.isChecked = isSelected - binding.root.setSingleOnClickListener { - chipCurrentSelection(adapterPosition) + binding.root.setOnClickListener { + chipCurrentSelection(adapterPosition, data.themeId) notifyDataSetChanged() onItemClickListener?.let { it(data) } } } } - private fun isSelected(position: Int) = selectedPositions.contains(position) + private fun isSelected(position: Int, themeId: Int) = if (isInitialSelection) { + isInitialSelection = false + themeId == 0 + } else { + selectedPosition == position + } - private fun chipCurrentSelection(position: Int) { - if (isSelected(position)) { - } else { - selectedPositions.clear() - selectedPositions.add(position) - } + private var selectedPosition = -1 + + private fun chipCurrentSelection(position: Int, themeId: Int) { + selectedPosition = position } fun setOnChipClickListener(listener: (HappyChip) -> Unit) { diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListContentAdapter.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListContentAdapter.kt index 5cd39e6d..323727e5 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListContentAdapter.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/list/HappyAddListContentAdapter.kt @@ -6,12 +6,12 @@ import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import coil.load +import com.sopetit.softie.R import com.sopetit.softie.databinding.ItemHappyAddListBinding import com.sopetit.softie.domain.entity.HappyContent import com.sopetit.softie.util.ItemDiffCallback -import com.sopetit.softie.util.setSingleOnClickListener -class HappyAddListContentAdapter(private val moveToDetail: (Int) -> Unit) : +class HappyAddListContentAdapter(private val moveToDetail: (Int, String) -> Unit) : ListAdapter( ItemDiffCallback( onItemsTheSame = { oldItem, newItem -> oldItem == newItem }, @@ -21,17 +21,19 @@ class HappyAddListContentAdapter(private val moveToDetail: (Int) -> Unit) : inner class HappyAddListContentViewHolder( private val binding: ItemHappyAddListBinding, - private val moveToDetail: (Int) -> Unit + private val moveToDetail: (Int, String) -> Unit ) : RecyclerView.ViewHolder(binding.root) { fun onBind(data: HappyContent) { binding.tvHappyListItemTitle.text = data.name binding.tvHappyListItemTitle.setTextColor(Color.parseColor(data.nameColor)) binding.tvHappyListItemContent.text = data.title - binding.ivHappyListItemIcon.load(data.iconImageUrl) - - binding.root.setSingleOnClickListener { - moveToDetail(data.routineId) + binding.ivHappyListItemIcon.load(data.iconImageUrl) { + placeholder(R.drawable.ic_bear_base) + error(R.drawable.ic_bear_base) + } + binding.root.setOnClickListener { + moveToDetail(data.routineId, data.iconImageUrl) } } } diff --git a/app/src/main/java/com/sopetit/softie/ui/main/MainActivity.kt b/app/src/main/java/com/sopetit/softie/ui/main/MainActivity.kt index 3f7b100b..d99a9796 100644 --- a/app/src/main/java/com/sopetit/softie/ui/main/MainActivity.kt +++ b/app/src/main/java/com/sopetit/softie/ui/main/MainActivity.kt @@ -2,13 +2,14 @@ package com.sopetit.softie.ui.main import android.content.res.ColorStateList import android.os.Bundle +import androidx.activity.viewModels import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import com.sopetit.softie.R import com.sopetit.softie.databinding.ActivityMainBinding import com.sopetit.softie.ui.dailyroutine.DailyRoutineFragment -import com.sopetit.softie.ui.happyroutine.HappyRoutineFragment -import com.sopetit.softie.ui.happyroutine.progress.HappyProgressFragment +import com.sopetit.softie.ui.happyroutine.HappyMyRoutineViewModel +import com.sopetit.softie.ui.happyroutine.progress.HappyMyRoutineFragment import com.sopetit.softie.ui.main.home.HomeFragment import com.sopetit.softie.util.binding.BindingActivity import com.sopetit.softie.util.setStatusBarColorFromResource @@ -17,6 +18,7 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : BindingActivity(R.layout.activity_main) { + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -40,7 +42,7 @@ class MainActivity : BindingActivity(R.layout.activity_main when (item.itemId) { R.id.bottom_navigation_daily_routine -> changeFragment(DailyRoutineFragment()) R.id.bottom_navigation_home -> changeFragment(HomeFragment()) - R.id.bottom_navigation_happiness_routine -> changeFragment(HappyRoutineFragment()) + R.id.bottom_navigation_happiness_routine -> changeFragment(HappyMyRoutineFragment()) else -> true } } @@ -90,7 +92,7 @@ class MainActivity : BindingActivity(R.layout.activity_main ) setStatusBarColorFromResource(R.color.background) binding.bnvMain.selectedItemId = R.id.bottom_navigation_happiness_routine - fragmentTransaction.replace(R.id.fcv_main, HappyProgressFragment()) + fragmentTransaction.replace(R.id.fcv_main, HappyMyRoutineFragment()) fragmentTransaction.commit() } } diff --git a/app/src/main/java/com/sopetit/softie/util/Context.kt b/app/src/main/java/com/sopetit/softie/util/Context.kt index 35f5645e..6f1377d9 100644 --- a/app/src/main/java/com/sopetit/softie/util/Context.kt +++ b/app/src/main/java/com/sopetit/softie/util/Context.kt @@ -25,7 +25,7 @@ fun Context.hideKeyboard(view: View?) { fun snackBar( anchorView: View, - message: String + message: String, ) { CustomSnackbar.make(anchorView, message).show() } diff --git a/app/src/main/res/drawable/ic_bear_base.xml b/app/src/main/res/drawable/ic_bear_base.xml new file mode 100644 index 00000000..79dd4ab7 --- /dev/null +++ b/app/src/main/res/drawable/ic_bear_base.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_happy_bling_blue.xml b/app/src/main/res/drawable/ic_happy_bling_blue.xml deleted file mode 100644 index f177b2d5..00000000 --- a/app/src/main/res/drawable/ic_happy_bling_blue.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_happy_bling_green.xml b/app/src/main/res/drawable/ic_happy_bling_green.xml deleted file mode 100644 index c937d095..00000000 --- a/app/src/main/res/drawable/ic_happy_bling_green.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_happy_bling_orange.xml b/app/src/main/res/drawable/ic_happy_bling_orange.xml deleted file mode 100644 index 623252de..00000000 --- a/app/src/main/res/drawable/ic_happy_bling_orange.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_happy_bling_purple.xml b/app/src/main/res/drawable/ic_happy_bling_purple.xml deleted file mode 100644 index 13a44f54..00000000 --- a/app/src/main/res/drawable/ic_happy_bling_purple.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_happy_bling_red.xml b/app/src/main/res/drawable/ic_happy_bling_red.xml deleted file mode 100644 index 31116965..00000000 --- a/app/src/main/res/drawable/ic_happy_bling_red.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_happy_blue.xml b/app/src/main/res/drawable/ic_happy_blue.xml deleted file mode 100644 index 09cfe6a9..00000000 --- a/app/src/main/res/drawable/ic_happy_blue.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_happy_green.xml b/app/src/main/res/drawable/ic_happy_green.xml deleted file mode 100644 index 3dc95f45..00000000 --- a/app/src/main/res/drawable/ic_happy_green.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/drawable/ic_happy_orange.xml b/app/src/main/res/drawable/ic_happy_orange.xml deleted file mode 100644 index 8223c17d..00000000 --- a/app/src/main/res/drawable/ic_happy_orange.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/drawable/ic_happy_purple.xml b/app/src/main/res/drawable/ic_happy_purple.xml deleted file mode 100644 index ad92683b..00000000 --- a/app/src/main/res/drawable/ic_happy_purple.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/drawable/ic_happy_red.xml b/app/src/main/res/drawable/ic_happy_red.xml deleted file mode 100644 index 9bbe3d16..00000000 --- a/app/src/main/res/drawable/ic_happy_red.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_happycard.xml b/app/src/main/res/drawable/ic_happycard.xml deleted file mode 100644 index 95635e1c..00000000 --- a/app/src/main/res/drawable/ic_happycard.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_loading_bear.xml b/app/src/main/res/drawable/ic_loading_bear.xml new file mode 100644 index 00000000..3486edbc --- /dev/null +++ b/app/src/main/res/drawable/ic_loading_bear.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_theme_1.xml b/app/src/main/res/drawable/ic_theme_1.xml deleted file mode 100644 index 71cb0d82..00000000 --- a/app/src/main/res/drawable/ic_theme_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - diff --git a/app/src/main/res/layout/activity_happy_add_detail.xml b/app/src/main/res/layout/activity_happy_add_detail.xml index b003bbad..bae31c99 100644 --- a/app/src/main/res/layout/activity_happy_add_detail.xml +++ b/app/src/main/res/layout/activity_happy_add_detail.xml @@ -31,21 +31,21 @@ style="@style/body1" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="80dp" + android:layout_marginBottom="18dp" android:textColor="@color/happyroutine_red" + app:layout_constraintBottom_toTopOf="@id/iv_happy_add_detail_icon" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" tools:text="@string/chip_item_happy_relationship" /> + app:layout_constraintBottom_toTopOf="@id/tv_happy_delete_subtitle" /> + app:layout_constraintBottom_toTopOf="@id/btn_happy_delete_clear"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_happy_progress.xml b/app/src/main/res/layout/fragment_happy_progress.xml deleted file mode 100644 index 677d6680..00000000 --- a/app/src/main/res/layout/fragment_happy_progress.xml +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_happy_routine.xml b/app/src/main/res/layout/fragment_happy_routine.xml index b6741f2a..1d60ff8d 100644 --- a/app/src/main/res/layout/fragment_happy_routine.xml +++ b/app/src/main/res/layout/fragment_happy_routine.xml @@ -28,6 +28,7 @@ android:layout_height="50dp" android:layout_marginStart="22dp" android:layout_marginTop="28dp" + android:src="@drawable/ic_loading_bear" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_happy_routine_title" /> diff --git a/app/src/main/res/layout/item_happy_add_detail_card.xml b/app/src/main/res/layout/item_happy_add_detail_card.xml index f7697d75..67651e13 100644 --- a/app/src/main/res/layout/item_happy_add_detail_card.xml +++ b/app/src/main/res/layout/item_happy_add_detail_card.xml @@ -13,9 +13,10 @@ @@ -20,7 +20,7 @@ android:layout_marginStart="16dp" android:layout_marginTop="22dp" android:layout_marginBottom="22dp" - android:src="@drawable/ic_happy_red" + android:src="@drawable/ic_bear_base" app:layout_constraintBottom_toBottomOf="@id/chip_happy_add_component" app:layout_constraintStart_toStartOf="@id/chip_happy_add_component" app:layout_constraintTop_toTopOf="@id/chip_happy_add_component" /> diff --git a/app/src/main/res/layout/item_onboarding_choice_theme.xml b/app/src/main/res/layout/item_onboarding_choice_theme.xml index 7e4ecb2b..75e1d154 100644 --- a/app/src/main/res/layout/item_onboarding_choice_theme.xml +++ b/app/src/main/res/layout/item_onboarding_choice_theme.xml @@ -19,7 +19,6 @@ android:id="@+id/iv_theme_icon" android:layout_width="40dp" android:layout_height="40dp" - android:src="@drawable/ic_theme_1" app:layout_constraintTop_toTopOf="@id/iv_theme_background" app:layout_constraintBottom_toBottomOf="@id/iv_theme_background" app:layout_constraintStart_toStartOf="@id/iv_theme_background" diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index a733202e..58b648ac 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,4 +1,4 @@ - 20dp + 30dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a59f0a0..591fbc8f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,7 +76,7 @@ 삭제하기 정말 삭제할까요? 삭제할래 - 취소 + 더 생각해볼래 어떤 친구와 함께 할까요?