From 8cd047cbcf1db43194b54635709d060b3649941e Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Tue, 16 Jan 2024 01:53:24 +0900 Subject: [PATCH 01/20] =?UTF-8?q?[feat]:=20app=20add=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/onboarding/build.gradle.kts | 1 + .../feature/onboarding/OnBoardingActivity.kt | 3 +- .../adapter/OnBoardingAppSelectionAdapter.kt | 37 ++++++++++ .../OnBoardingAppSelectionViewHolder.kt | 34 ++++++++++ .../OnBoardingAppSelectionViewModel.kt | 15 ++++ .../OnBoardingFragmentStateAdapter.kt | 2 +- .../fragment/OnBoardingSelectDataFragment.kt | 2 +- .../OnBoardingAppSelectionFragment.kt | 68 +++++++++++++++++++ .../OnBoardingSelectDataViewModel.kt | 2 +- .../viewmodel/OnBoardingViewModel.kt | 22 +++++- 10 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt create mode 100644 feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt create mode 100644 feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt rename feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/{ => adapter}/OnBoardingFragmentStateAdapter.kt (97%) create mode 100644 feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt diff --git a/feature/onboarding/build.gradle.kts b/feature/onboarding/build.gradle.kts index 607430bf9..f3682d949 100644 --- a/feature/onboarding/build.gradle.kts +++ b/feature/onboarding/build.gradle.kts @@ -15,4 +15,5 @@ dependencies { implementation(projects.feature.main) implementation(projects.core.network) + implementation(projects.domain.challenge) } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 554020747..4c2e1682e 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import com.hmh.hamyeonham.common.view.viewBinding +import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentStateAdapter import com.hmh.hamyeonham.feature.onboarding.databinding.ActivityOnBoardingBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingEffect import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel @@ -34,7 +35,7 @@ class OnBoardingActivity : AppCompatActivity() { setBackPressedCallback() val accessToken = intent.getStringExtra(EXTRA_ACCESS_TOKEN) - viewModel.updateState { + viewModel.updateOnBoardingState { copy(accessToken = accessToken.orEmpty()) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt new file mode 100644 index 000000000..c9aa95125 --- /dev/null +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt @@ -0,0 +1,37 @@ +package com.hmh.hamyeonham.feature.onboarding.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.ListAdapter +import com.hmh.hamyeonham.common.view.ItemDiffCallback +import com.hmh.hamyeonham.feature.challenge.databinding.ItemAppBinding + +class OnBoardingAppSelectionAdapter( + private val onAppCheckboxClicked: (String) -> Unit, + private val onAppCheckboxUnClicked: (String) -> Unit, +) : + ListAdapter( + ItemDiffCallback(onItemsTheSame = { oldItem, newItem -> + oldItem == newItem + }, onContentsTheSame = { oldItem, newItem -> + oldItem == newItem + }), + ) { + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): OnBoardingAppSelectionViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ItemAppBinding.inflate(inflater, parent, false) + return OnBoardingAppSelectionViewHolder( + binding, + onAppCheckboxClicked = onAppCheckboxClicked, + onAppCheckboxUnClicked = onAppCheckboxUnClicked, + ) + } + + override fun onBindViewHolder(holder: OnBoardingAppSelectionViewHolder, position: Int) { + holder.onBind(currentList[position]) + } +} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt new file mode 100644 index 000000000..643ed700b --- /dev/null +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt @@ -0,0 +1,34 @@ +package com.hmh.hamyeonham.feature.onboarding.adapter + +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import com.hmh.hamyeonham.common.context.getAppIconFromPackageName +import com.hmh.hamyeonham.common.context.getAppNameFromPackageName +import com.hmh.hamyeonham.feature.challenge.databinding.ItemAppBinding + +class OnBoardingAppSelectionViewHolder( + private val binding: ItemAppBinding, + private val onAppCheckboxClicked: (String) -> Unit, + private val onAppCheckboxUnClicked: (String) -> Unit +) : ViewHolder(binding.root) { + fun onBind(packageName: String) { + binding.run { + val context = binding.root.context + tvAppname.text = context.getAppNameFromPackageName(packageName) + ivAppicon.setImageDrawable(context.getAppIconFromPackageName(packageName)) + } + setCheckBoxButtonListener(packageName) + } + + private fun setCheckBoxButtonListener(packageName: String) { + binding.cbApp.setOnClickListener { + if (adapterPosition != RecyclerView.NO_POSITION) { + if (binding.cbApp.isChecked) { + onAppCheckboxClicked(packageName) + } else { + onAppCheckboxUnClicked(packageName) + } + } + } + } +} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt new file mode 100644 index 000000000..6ca64b95a --- /dev/null +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt @@ -0,0 +1,15 @@ +package com.hmh.hamyeonham.feature.onboarding.adapter + +import androidx.lifecycle.ViewModel +import com.hmh.hamyeonham.challenge.repository.DeviceRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class OnBoardingAppSelectionViewModel @Inject constructor( + private val deviceRepository: DeviceRepository +) : ViewModel() { + fun getInstalledApps(): List { + return deviceRepository.getInstalledApps() + } +} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingFragmentStateAdapter.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt similarity index 97% rename from feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingFragmentStateAdapter.kt rename to feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt index a2b92975e..3c0ee53f1 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingFragmentStateAdapter.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt @@ -1,4 +1,4 @@ -package com.hmh.hamyeonham.feature.onboarding +package com.hmh.hamyeonham.feature.onboarding.adapter import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt index 96e4ea604..8e290ac8c 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt @@ -13,7 +13,7 @@ import com.hmh.hamyeonham.common.fragment.colorOf import com.hmh.hamyeonham.common.fragment.drawableOf import com.hmh.hamyeonham.common.primitive.extractDigits import com.hmh.hamyeonham.common.view.viewBinding -import com.hmh.hamyeonham.feature.onboarding.OnBoardingFragmentType +import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentType import com.hmh.hamyeonham.feature.onboarding.R import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectDataBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingSelectDataViewModel diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt new file mode 100644 index 000000000..1f6544674 --- /dev/null +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt @@ -0,0 +1,68 @@ +package com.hmh.hamyeonham.feature.onboarding.viewmodel + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.hmh.hamyeonham.common.view.viewBinding +import com.hmh.hamyeonham.feature.challenge.databinding.FrargmentAppSelectionBinding +import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionAdapter +import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionViewModel +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class OnBoardingAppSelectionFragment : Fragment() { + private val binding by viewBinding(FrargmentAppSelectionBinding::bind) + private val viewModel by viewModels() + private val activityViewModel by activityViewModels() + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { + return FrargmentAppSelectionBinding.inflate(inflater, container, false).root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initViews() + } + + private fun initViews() { + initAppSelectionRecyclerAdapter() + } + + private fun initAppSelectionRecyclerAdapter() { + binding.rvAppSelection.run { + adapter = OnBoardingAppSelectionAdapter( + onAppCheckboxClicked = ::onAppCheckboxClicked, + onAppCheckboxUnClicked = ::onAppCheckboxUnClicked, + ) + layoutManager = LinearLayoutManager(requireContext()) + } + setViewPager() + } + + private fun setViewPager() { + val onboardingAppSelectionAdapter = + binding.rvAppSelection.adapter as? OnBoardingAppSelectionAdapter + onboardingAppSelectionAdapter?.submitList(viewModel.getInstalledApps()) + } + + private fun onAppCheckboxClicked(packageName: String) { + activityViewModel.updateAppAddState { + copy(selectedApp = selectedApp + packageName) + } + } + + private fun onAppCheckboxUnClicked(packageName: String) { + activityViewModel.updateAppAddState { + copy(selectedApp = selectedApp - packageName) + } + } +} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingSelectDataViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingSelectDataViewModel.kt index b85c14e5e..067028197 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingSelectDataViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingSelectDataViewModel.kt @@ -1,7 +1,7 @@ package com.hmh.hamyeonham.feature.onboarding.viewmodel import androidx.lifecycle.ViewModel -import com.hmh.hamyeonham.feature.onboarding.OnBoardingFragmentType +import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentType import com.hmh.hamyeonham.feature.onboarding.model.OnBoardingQuestion import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index b50b0e015..4a9ad4e16 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -21,6 +21,15 @@ sealed interface OnBoardingEffect { data object SignUpFail : OnBoardingEffect } +sealed interface AppAddEffect { + data class AppAdd(val selectedApp: List, val goalTime: Long) : AppAddEffect +} + +data class AppAddState( + val selectedApp: List = listOf(), + val goalTime: Long = 0 +) + data class OnBoardingState( val onBoardingAnswer: OnboardingAnswer = OnboardingAnswer(), val pageInfo: List = emptyList(), @@ -39,6 +48,11 @@ class OnBoardingViewModel @Inject constructor( private val _onboardEffect = MutableSharedFlow() val onboardEffect = _onboardEffect.asSharedFlow() + private val _addState = MutableStateFlow(AppAddState()) + val addState = _addState.asStateFlow() + + private val _addEffect = MutableSharedFlow() + val addEffect = _addEffect.asSharedFlow() init { _onBoardingState.value = onBoardingState.value.copy( pageInfo = initializeButtonInfoList(), @@ -57,12 +71,18 @@ class OnBoardingViewModel @Inject constructor( _onBoardingState.value = onBoardingState.value.copy(onBoardingAnswer = newState) } - fun updateState(transform: OnBoardingState.() -> OnBoardingState) { + fun updateOnBoardingState(transform: OnBoardingState.() -> OnBoardingState) { val currentState = onBoardingState.value val newState = currentState.transform() _onBoardingState.value = newState } + fun updateAppAddState(transform: AppAddState.() -> AppAddState) { + val currentState = addState.value + val newState = currentState.transform() + _addState.value = newState + } + fun setEffect(effect: OnBoardingEffect) { viewModelScope.launch { _onboardEffect.emit(effect) From 10202483f1c50ae59e98dfe8c2bf59bf988e5dae Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Tue, 16 Jan 2024 15:10:55 +0900 Subject: [PATCH 02/20] =?UTF-8?q?[feat]:=20=EC=95=B1=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20fragment=20=EB=B6=99=EC=9D=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hmh/hamyeonham/SampleActivity.kt | 3 +- feature/onboarding/build.gradle.kts | 1 + .../feature/onboarding/OnBoardingActivity.kt | 10 +++++ .../adapter/OnBoardingAppSelectionAdapter.kt | 4 +- .../OnBoardingAppSelectionViewHolder.kt | 4 +- .../adapter/OnBoardingFragmentStateAdapter.kt | 3 ++ .../OnBoardingAppAddSelectionFragment.kt} | 11 ++--- .../OnBoardingRequestPermissionFragment.kt | 2 +- .../fragment/OnBoardingSelectDataFragment.kt | 4 +- .../OnBoardingSelectScreenTimeFragment.kt | 4 +- .../viewmodel/OnBoardingViewModel.kt | 1 + ...fragment_on_boarding_app_add_selection.xml | 37 ++++++++++++++++ .../fragment_on_boarding_app_selection.xml | 37 ++++++++++++++++ .../src/main/res/layout/item_add_app.xml | 43 +++++++++++++++++++ 14 files changed, 149 insertions(+), 15 deletions(-) rename feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/{viewmodel/OnBoardingAppSelectionFragment.kt => fragment/OnBoardingAppAddSelectionFragment.kt} (81%) create mode 100644 feature/onboarding/src/main/res/layout/fragment_on_boarding_app_add_selection.xml create mode 100644 feature/onboarding/src/main/res/layout/fragment_on_boarding_app_selection.xml create mode 100644 feature/onboarding/src/main/res/layout/item_add_app.xml diff --git a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt index f84b99be2..9161bdf05 100644 --- a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt +++ b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt @@ -11,6 +11,7 @@ import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.databinding.ActivitySampleBinding import com.hmh.hamyeonham.feature.login.LoginActivity import com.hmh.hamyeonham.feature.main.MainActivity +import com.hmh.hamyeonham.feature.onboarding.OnBoardingActivity import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -22,7 +23,7 @@ class SampleActivity : AppCompatActivity() { val splashScreen = installSplashScreen() initSplashAnimation(splashScreen) setContentView(binding.root) - startActivity(Intent(this, LoginActivity::class.java)) + startActivity(Intent(this, OnBoardingActivity::class.java)) finish() } diff --git a/feature/onboarding/build.gradle.kts b/feature/onboarding/build.gradle.kts index f3682d949..039cb2a14 100644 --- a/feature/onboarding/build.gradle.kts +++ b/feature/onboarding/build.gradle.kts @@ -1,6 +1,7 @@ @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed plugins { hmh("feature") + alias(libs.plugins.kotlin.android) } android { diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 78b05cda8..2a4f6a3c0 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -86,6 +86,15 @@ class OnBoardingActivity : AppCompatActivity() { currentItem == lastItem -> { startSignupApi() } + currentItem == 7 -> { + binding.btnOnboardingNext.text = "앱 선택하기" + } + currentItem == 8 -> { + binding.btnOnboardingNext.text = "선택 완료" + } + currentItem == 9 -> { + binding.btnOnboardingNext.text = "완료" + } else -> Unit } } @@ -101,6 +110,7 @@ class OnBoardingActivity : AppCompatActivity() { is OnBoardingEffect.SignUpFail -> { } + else -> Unit } }.launchIn(lifecycleScope) } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt index c9aa95125..dda94c9f3 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionAdapter.kt @@ -4,7 +4,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter import com.hmh.hamyeonham.common.view.ItemDiffCallback -import com.hmh.hamyeonham.feature.challenge.databinding.ItemAppBinding +import com.hmh.hamyeonham.feature.onboarding.databinding.ItemAddAppBinding class OnBoardingAppSelectionAdapter( private val onAppCheckboxClicked: (String) -> Unit, @@ -23,7 +23,7 @@ class OnBoardingAppSelectionAdapter( viewType: Int, ): OnBoardingAppSelectionViewHolder { val inflater = LayoutInflater.from(parent.context) - val binding = ItemAppBinding.inflate(inflater, parent, false) + val binding = ItemAddAppBinding.inflate(inflater, parent, false) return OnBoardingAppSelectionViewHolder( binding, onAppCheckboxClicked = onAppCheckboxClicked, diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt index 643ed700b..4b098f57b 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewHolder.kt @@ -4,10 +4,10 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.hmh.hamyeonham.common.context.getAppIconFromPackageName import com.hmh.hamyeonham.common.context.getAppNameFromPackageName -import com.hmh.hamyeonham.feature.challenge.databinding.ItemAppBinding +import com.hmh.hamyeonham.feature.onboarding.databinding.ItemAddAppBinding class OnBoardingAppSelectionViewHolder( - private val binding: ItemAppBinding, + private val binding: ItemAddAppBinding, private val onAppCheckboxClicked: (String) -> Unit, private val onAppCheckboxUnClicked: (String) -> Unit ) : ViewHolder(binding.root) { diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt index 3c0ee53f1..58c9204fc 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingFragmentStateAdapter.kt @@ -3,6 +3,7 @@ package com.hmh.hamyeonham.feature.onboarding.adapter import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.viewpager2.adapter.FragmentStateAdapter +import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingAppAddSelectionFragment import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingRequestPermissionFragment import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingSelectAppFragment import com.hmh.hamyeonham.feature.onboarding.fragment.OnBoardingSelectDataFragment @@ -16,6 +17,7 @@ enum class OnBoardingFragmentType { SELECT_SCREEN_TIME_GOAL, REQUEST_PERMISSION, SELECT_APP, + SELECT_APP_VIEW, SELECT_USE_TIME_GOAL, } @@ -42,6 +44,7 @@ class OnBoardingFragmentStateAdapter(fragmentActivity: FragmentActivity) : OnBoardingFragmentType.SELECT_SCREEN_TIME_GOAL -> OnBoardingSelectScreenTimeFragment() OnBoardingFragmentType.REQUEST_PERMISSION -> OnBoardingRequestPermissionFragment() OnBoardingFragmentType.SELECT_APP -> OnBoardingSelectAppFragment() + OnBoardingFragmentType.SELECT_APP_VIEW -> OnBoardingAppAddSelectionFragment() OnBoardingFragmentType.SELECT_USE_TIME_GOAL -> OnBoardingSelectUseTimeFragment() } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt similarity index 81% rename from feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt rename to feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index 1f6544674..9c04167e4 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -1,4 +1,4 @@ -package com.hmh.hamyeonham.feature.onboarding.viewmodel +package com.hmh.hamyeonham.feature.onboarding.fragment import android.os.Bundle import android.view.LayoutInflater @@ -9,14 +9,15 @@ import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager import com.hmh.hamyeonham.common.view.viewBinding -import com.hmh.hamyeonham.feature.challenge.databinding.FrargmentAppSelectionBinding import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionAdapter import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionViewModel +import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingAppAddSelectionBinding +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class OnBoardingAppSelectionFragment : Fragment() { - private val binding by viewBinding(FrargmentAppSelectionBinding::bind) +class OnBoardingAppAddSelectionFragment : Fragment() { + private val binding by viewBinding(FragmentOnBoardingAppAddSelectionBinding::bind) private val viewModel by viewModels() private val activityViewModel by activityViewModels() @@ -25,7 +26,7 @@ class OnBoardingAppSelectionFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle?, ): View { - return FrargmentAppSelectionBinding.inflate(inflater, container, false).root + return FragmentOnBoardingAppAddSelectionBinding.inflate(inflater, container, false).root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt index c4593e089..5cb1d4cea 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt @@ -68,7 +68,7 @@ class OnBoardingRequestPermissionFragment : Fragment() { override fun onResume() { super.onResume() - activityViewModel.updateState { + activityViewModel.updateOnBoardingState { copy(isNextButtonActive = allPermissionIsGranted()) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt index 1b2f30c77..1f774a398 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt @@ -60,7 +60,7 @@ class OnBoardingSelectDataFragment : Fragment() { override fun onResume() { super.onResume() - activityViewModel.updateState { + activityViewModel.updateOnBoardingState { copy(isNextButtonActive = selectedButtons.isNotEmpty()) } } @@ -136,7 +136,7 @@ class OnBoardingSelectDataFragment : Fragment() { selectedButtons.clear() if (selectedButton.isSelected) selectedButtons.add(selectedButton) } - activityViewModel.updateState { + activityViewModel.updateOnBoardingState { copy(isNextButtonActive = selectedButtons.isNotEmpty()) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index 1d57c1c66..bcaf765b1 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -40,7 +40,7 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { updateUserResponses { copy(goalTime = newTime) } - updateState { + updateOnBoardingState { copy(isNextButtonActive = true) } } @@ -49,7 +49,7 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { override fun onResume() { super.onResume() - activityViewModel.updateState { + activityViewModel.updateOnBoardingState { copy(isNextButtonActive = true) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index 26a8a991f..ecfb4ee7e 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -118,4 +118,5 @@ class OnBoardingViewModel @Inject constructor( } } } + } } diff --git a/feature/onboarding/src/main/res/layout/fragment_on_boarding_app_add_selection.xml b/feature/onboarding/src/main/res/layout/fragment_on_boarding_app_add_selection.xml new file mode 100644 index 000000000..1d714a0d8 --- /dev/null +++ b/feature/onboarding/src/main/res/layout/fragment_on_boarding_app_add_selection.xml @@ -0,0 +1,37 @@ + + + + + + + + + diff --git a/feature/onboarding/src/main/res/layout/fragment_on_boarding_app_selection.xml b/feature/onboarding/src/main/res/layout/fragment_on_boarding_app_selection.xml new file mode 100644 index 000000000..8b8a1a000 --- /dev/null +++ b/feature/onboarding/src/main/res/layout/fragment_on_boarding_app_selection.xml @@ -0,0 +1,37 @@ + + + + + + + + + diff --git a/feature/onboarding/src/main/res/layout/item_add_app.xml b/feature/onboarding/src/main/res/layout/item_add_app.xml new file mode 100644 index 000000000..e9979ef50 --- /dev/null +++ b/feature/onboarding/src/main/res/layout/item_add_app.xml @@ -0,0 +1,43 @@ + + + + + + + + + + \ No newline at end of file From 249050479879715033470807ee20053a6105b7dd Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Tue, 16 Jan 2024 15:13:28 +0900 Subject: [PATCH 03/20] =?UTF-8?q?[fix]:=20viewmodel=20package=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onboarding/fragment/OnBoardingAppAddSelectionFragment.kt | 2 +- .../{adapter => viewmodel}/OnBoardingAppSelectionViewModel.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/{adapter => viewmodel}/OnBoardingAppSelectionViewModel.kt (88%) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index 9c04167e4..ffe344712 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -10,7 +10,7 @@ import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionAdapter -import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingAppSelectionViewModel import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingAppAddSelectionBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel import dagger.hilt.android.AndroidEntryPoint diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionViewModel.kt similarity index 88% rename from feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt rename to feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionViewModel.kt index 6ca64b95a..ba7211220 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/adapter/OnBoardingAppSelectionViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingAppSelectionViewModel.kt @@ -1,4 +1,4 @@ -package com.hmh.hamyeonham.feature.onboarding.adapter +package com.hmh.hamyeonham.feature.onboarding.viewmodel import androidx.lifecycle.ViewModel import com.hmh.hamyeonham.challenge.repository.DeviceRepository From 9db5f32b48efee6cc81ecce421572da9139a2bfe Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Tue, 16 Jan 2024 16:01:00 +0900 Subject: [PATCH 04/20] =?UTF-8?q?[feat]:=20=EC=84=A0=ED=83=9D=EB=90=9C=20?= =?UTF-8?q?=EC=95=B1=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B0=9B=EC=95=84?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/onboarding/OnBoardingActivity.kt | 9 -------- .../onboarding/model/OnboardingAnswer.kt | 3 ++- .../viewmodel/OnBoardingViewModel.kt | 21 ++++++++++++------- .../src/main/res/values/strings.xml | 3 +++ 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 2a4f6a3c0..7c26fbc1d 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -86,15 +86,6 @@ class OnBoardingActivity : AppCompatActivity() { currentItem == lastItem -> { startSignupApi() } - currentItem == 7 -> { - binding.btnOnboardingNext.text = "앱 선택하기" - } - currentItem == 8 -> { - binding.btnOnboardingNext.text = "선택 완료" - } - currentItem == 9 -> { - binding.btnOnboardingNext.text = "완료" - } else -> Unit } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt index e630d515a..84a145364 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt @@ -18,7 +18,8 @@ data class OnboardingAnswer( fun OnboardingAnswer.toSignUpRequest(): SignRequestDomain { return SignRequestDomain( challenge = SignRequestDomain.Challenge( - app = apps.map { app -> + app = + apps.map { app -> SignRequestDomain.Challenge.App( appCode = app.appCode, goalTime = app.goalTime, diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index ecfb4ee7e..ce3bb684c 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -1,5 +1,6 @@ package com.hmh.hamyeonham.feature.onboarding.viewmodel +import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.hmh.hamyeonham.core.network.auth.datastore.HMHNetworkPreference @@ -21,13 +22,8 @@ sealed interface OnBoardingEffect { data object SignUpFail : OnBoardingEffect } -sealed interface AppAddEffect { - data class AppAdd(val selectedApp: List, val goalTime: Long) : AppAddEffect -} - data class AppAddState( val selectedApp: List = listOf(), - val goalTime: Long = 0 ) data class OnBoardingState( @@ -48,15 +44,15 @@ class OnBoardingViewModel @Inject constructor( private val _onBoardingState = MutableStateFlow(OnBoardingState()) val onBoardingState = _onBoardingState.asStateFlow() - // TODO : stateFlow -> sharedFlow private val _onboardEffect = MutableSharedFlow() val onboardEffect = _onboardEffect.asSharedFlow() private val _addState = MutableStateFlow(AppAddState()) val addState = _addState.asStateFlow() - private val _addEffect = MutableSharedFlow() + private val _addEffect = MutableSharedFlow() val addEffect = _addEffect.asSharedFlow() + init { _onBoardingState.value = onBoardingState.value.copy( pageInfo = initializeButtonInfoList(), @@ -69,6 +65,13 @@ class OnBoardingViewModel @Inject constructor( } } + fun getAddAppEffect(selectedApp: List) { + Log.d("OnBoardingViewModel", "getAddAppEffect: $selectedApp") + viewModelScope.launch { + _addEffect.emit(AppAddState(selectedApp = selectedApp)) + } + } + fun updateUserResponses(transform: OnboardingAnswer.() -> OnboardingAnswer) { val currentState = userResponses.value val newState = currentState.transform() @@ -82,9 +85,12 @@ class OnBoardingViewModel @Inject constructor( } fun updateAppAddState(transform: AppAddState.() -> AppAddState) { + Log.d("OnBoardingViewModel", "updateAppAddState: $transform") val currentState = addState.value val newState = currentState.transform() _addState.value = newState + Log.d("OnBoardingViewModel", "updateAppAddState: $newState") + } private fun initializeButtonInfoList(): List { @@ -99,6 +105,7 @@ class OnBoardingViewModel @Inject constructor( viewModelScope.launch { val token = onBoardingState.value.accessToken val request = onBoardingState.value.onBoardingAnswer + Log.d("OnBoardingViewModel", "signUp: $request") runCatching { authRepository.signUp(token, request.toSignUpRequest()) }.onSuccess { result -> diff --git a/feature/onboarding/src/main/res/values/strings.xml b/feature/onboarding/src/main/res/values/strings.xml index 9526f4549..3dbd30375 100644 --- a/feature/onboarding/src/main/res/values/strings.xml +++ b/feature/onboarding/src/main/res/values/strings.xml @@ -30,4 +30,7 @@ 이미 권한이 허용되어 있습니다 이미 권한이 허용되어 있습니다 이미 권한이 허용되어 있습니다 + 완료 + 선택 완료 + 앱 선택하기 From 2505a962bf1f726dbdd98e02cb674745bed173c7 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 02:03:29 +0900 Subject: [PATCH 05/20] [fix]: solve conflict --- .../hamyeonham/feature/onboarding/OnBoardingActivity.kt | 2 +- .../fragment/OnBoardingRequestPermissionFragment.kt | 2 +- .../onboarding/fragment/OnBoardingSelectDataFragment.kt | 6 +++--- .../fragment/OnBoardingSelectScreenTimeFragment.kt | 5 ++--- .../feature/onboarding/viewmodel/OnBoardingViewModel.kt | 7 ------- 5 files changed, 7 insertions(+), 15 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 9bbeaccc1..9ed8dd04b 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -2,6 +2,7 @@ package com.hmh.hamyeonham.feature.onboarding import android.content.Intent import android.os.Bundle +import android.util.Log import androidx.activity.OnBackPressedCallback import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity @@ -9,7 +10,6 @@ import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.viewpager2.widget.ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT import com.hmh.hamyeonham.common.view.initAndStartProgressBarAnimation -import com.hmh.hamyeonham.common.view.initAndStartProgressBarAnimation import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentStateAdapter import com.hmh.hamyeonham.feature.onboarding.databinding.ActivityOnBoardingBinding diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt index 5cb1d4cea..c4593e089 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt @@ -68,7 +68,7 @@ class OnBoardingRequestPermissionFragment : Fragment() { override fun onResume() { super.onResume() - activityViewModel.updateOnBoardingState { + activityViewModel.updateState { copy(isNextButtonActive = allPermissionIsGranted()) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt index 1f774a398..cd1292d14 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt @@ -13,8 +13,8 @@ import com.hmh.hamyeonham.common.fragment.colorOf import com.hmh.hamyeonham.common.fragment.drawableOf import com.hmh.hamyeonham.common.primitive.extractDigits import com.hmh.hamyeonham.common.view.viewBinding -import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentType import com.hmh.hamyeonham.feature.onboarding.R +import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentType import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectDataBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingSelectDataViewModel import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel @@ -60,7 +60,7 @@ class OnBoardingSelectDataFragment : Fragment() { override fun onResume() { super.onResume() - activityViewModel.updateOnBoardingState { + activityViewModel.updateState { copy(isNextButtonActive = selectedButtons.isNotEmpty()) } } @@ -136,7 +136,7 @@ class OnBoardingSelectDataFragment : Fragment() { selectedButtons.clear() if (selectedButton.isSelected) selectedButtons.add(selectedButton) } - activityViewModel.updateOnBoardingState { + activityViewModel.updateState { copy(isNextButtonActive = selectedButtons.isNotEmpty()) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index bcaf765b1..bcf7fefc1 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -34,13 +34,12 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { binding.npOnboardingScreentimeGoal.descendantFocusability = NumberPicker.FOCUS_BLOCK_DESCENDANTS - binding.npOnboardingScreentimeGoal.setOnValueChangedListener { _, _, newTime -> activityViewModel.run { updateUserResponses { copy(goalTime = newTime) } - updateOnBoardingState { + updateState { copy(isNextButtonActive = true) } } @@ -49,7 +48,7 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { override fun onResume() { super.onResume() - activityViewModel.updateOnBoardingState { + activityViewModel.updateState { copy(isNextButtonActive = true) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index 89bf3fc15..2495033c1 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -58,12 +58,6 @@ class OnBoardingViewModel @Inject constructor( ) } - fun changeStateNextButton(isActive: Boolean) { - viewModelScope.launch { - _onboardEffect.emit(OnBoardingEffect.ActiveNextButton(isActive)) - } - } - fun getAddAppEffect(selectedApp: List) { Log.d("OnBoardingViewModel", "getAddAppEffect: $selectedApp") viewModelScope.launch { @@ -89,7 +83,6 @@ class OnBoardingViewModel @Inject constructor( val newState = currentState.transform() _addState.value = newState Log.d("OnBoardingViewModel", "updateAppAddState: $newState") - } private fun initializeButtonInfoList(): List { From eaf448271d3a6e4b307241d162849d2bfe208102 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 02:33:54 +0900 Subject: [PATCH 06/20] =?UTF-8?q?[fix]:=20=EC=84=A0=ED=83=9D=EB=90=9C=20?= =?UTF-8?q?=EC=95=B1=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20apps[appcode,=20goalt?= =?UTF-8?q?ime]=EC=9C=BC=EB=A1=9C=20mapping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/hmh/hamyeonham/SampleActivity.kt | 4 +--- .../fragment/OnBoardingSelectUseTimeFragment.kt | 1 - .../onboarding/viewmodel/OnBoardingViewModel.kt | 11 +++++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt index af7e19fb3..daebf2a86 100644 --- a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt +++ b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt @@ -9,8 +9,6 @@ import androidx.core.splashscreen.SplashScreen import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.databinding.ActivitySampleBinding -import com.hmh.hamyeonham.feature.login.LoginActivity -import com.hmh.hamyeonham.feature.main.MainActivity import com.hmh.hamyeonham.feature.onboarding.OnBoardingActivity import dagger.hilt.android.AndroidEntryPoint @@ -23,7 +21,7 @@ class SampleActivity : AppCompatActivity() { val splashScreen = installSplashScreen() initSplashAnimation(splashScreen) setContentView(binding.root) - startActivity(Intent(this, LoginActivity::class.java)) + startActivity(Intent(this, OnBoardingActivity::class.java)) finish() } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index 647114e93..67e2c5d9f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -58,7 +58,6 @@ class OnBoardingSelectUseTimeFragment : Fragment() { copy( apps = listOf( OnboardingAnswer.App( - appCode = "", goalTime = useTotalTime, ), ), diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index 2495033c1..805a4931d 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -83,6 +83,16 @@ class OnBoardingViewModel @Inject constructor( val newState = currentState.transform() _addState.value = newState Log.d("OnBoardingViewModel", "updateAppAddState: $newState") + val selectedApps = addState.value.selectedApp + + val challengeApps = selectedApps.map { appCode -> + OnboardingAnswer.App(appCode = appCode, goalTime = 0) + } + + updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(apps = challengeApps)) + } + Log.d("OnBoardingViewModel", "updateAppAddState: ${onBoardingState.value.onBoardingAnswer}") } private fun initializeButtonInfoList(): List { @@ -97,6 +107,7 @@ class OnBoardingViewModel @Inject constructor( viewModelScope.launch { val token = onBoardingState.value.accessToken val request = onBoardingState.value.onBoardingAnswer + Log.d("OnBoardingViewModel", "signUp: $request") authRepository.signUp(token, request.toSignUpRequest()) .onSuccess { signUpUser -> signUpUser.let { From 74679fb0a5139c6a466d0856ff9514e967650037 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 16:49:40 +0900 Subject: [PATCH 07/20] =?UTF-8?q?[fix]:=20=EC=84=A0=ED=83=9D=EB=90=9C=20?= =?UTF-8?q?=EC=95=B1=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20OnBoardingAnswer?= =?UTF-8?q?=EC=97=90=20update=20=EC=95=88=20=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OnBoardingAppAddSelectionFragment.kt | 23 ++++++++++++++++++- .../fragment/OnBoardingSelectDataFragment.kt | 9 ++++++++ .../OnBoardingSelectScreenTimeFragment.kt | 4 ++++ .../OnBoardingSelectUseTimeFragment.kt | 11 +++++++++ .../viewmodel/OnBoardingViewModel.kt | 17 ++------------ 5 files changed, 48 insertions(+), 16 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index ffe344712..29f10cb7c 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -1,6 +1,7 @@ package com.hmh.hamyeonham.feature.onboarding.fragment import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -10,8 +11,9 @@ import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionAdapter -import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingAppSelectionViewModel import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingAppAddSelectionBinding +import com.hmh.hamyeonham.feature.onboarding.model.OnboardingAnswer +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingAppSelectionViewModel import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel import dagger.hilt.android.AndroidEntryPoint @@ -59,11 +61,30 @@ class OnBoardingAppAddSelectionFragment : Fragment() { activityViewModel.updateAppAddState { copy(selectedApp = selectedApp + packageName) } + + val challengeApps = activityViewModel.addState.value.selectedApp.map { appCode -> + OnboardingAnswer.App(appCode = appCode) + } + Log.d("TAG", "onAppCheckboxUnClicked: $challengeApps") + + + activityViewModel.updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(apps = challengeApps)) + } + Log.d("TAG", "onAppCheckboxClicked: ${activityViewModel.addState.value.selectedApp}") } private fun onAppCheckboxUnClicked(packageName: String) { activityViewModel.updateAppAddState { copy(selectedApp = selectedApp - packageName) } + val challengeApps = activityViewModel.addState.value.selectedApp.map { appCode -> + OnboardingAnswer.App(appCode = appCode) + } + Log.d("TAG", "onAppCheckboxUnClicked: $challengeApps") + + activityViewModel.updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(apps = challengeApps)) + } } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt index cd1292d14..33bcf78de 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt @@ -150,18 +150,27 @@ class OnBoardingSelectDataFragment : Fragment() { activityViewModel.updateUserResponses { copy(usuallyUseTime = firstSelected.orEmpty()) } + activityViewModel.updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(usuallyUseTime = firstSelected.orEmpty())) + } } OnBoardingFragmentType.SELECT_DATA_PROBLEM -> { activityViewModel.updateUserResponses { copy(problems = selectedQuestion) } + activityViewModel.updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(problems = selectedQuestion)) + } } OnBoardingFragmentType.SELECT_DATA_PERIOD -> { activityViewModel.updateUserResponses { copy(period = firstSelected?.extractDigits() ?: 0) } + activityViewModel.updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(period = firstSelected?.extractDigits() ?: 0)) + } } else -> {} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index bcf7fefc1..58bbaeb5e 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import android.widget.NumberPicker import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import com.hmh.hamyeonham.common.primitive.extractDigits import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectScreentimeBinding @@ -42,6 +43,9 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { updateState { copy(isNextButtonActive = true) } + updateState { + copy(onBoardingAnswer = onBoardingAnswer.copy(goalTime = newTime)) + } } } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index 67e2c5d9f..a73ed243f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -63,5 +63,16 @@ class OnBoardingSelectUseTimeFragment : Fragment() { ), ) } + activityViewModel.updateState { + copy( + onBoardingAnswer = onBoardingAnswer.copy( + apps = listOf( + OnboardingAnswer.App( + goalTime = useTotalTime, + ), + ), + ), + ) + } } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index 805a4931d..5e358fb9f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -49,22 +49,12 @@ class OnBoardingViewModel @Inject constructor( private val _addState = MutableStateFlow(AppAddState()) val addState = _addState.asStateFlow() - private val _addEffect = MutableSharedFlow() - val addEffect = _addEffect.asSharedFlow() - init { _onBoardingState.value = onBoardingState.value.copy( pageInfo = initializeButtonInfoList(), ) } - fun getAddAppEffect(selectedApp: List) { - Log.d("OnBoardingViewModel", "getAddAppEffect: $selectedApp") - viewModelScope.launch { - _addEffect.emit(AppAddState(selectedApp = selectedApp)) - } - } - fun updateUserResponses(transform: OnboardingAnswer.() -> OnboardingAnswer) { val currentState = userResponses.value val newState = currentState.transform() @@ -78,15 +68,12 @@ class OnBoardingViewModel @Inject constructor( } fun updateAppAddState(transform: AppAddState.() -> AppAddState) { - Log.d("OnBoardingViewModel", "updateAppAddState: $transform") val currentState = addState.value val newState = currentState.transform() _addState.value = newState - Log.d("OnBoardingViewModel", "updateAppAddState: $newState") - val selectedApps = addState.value.selectedApp - val challengeApps = selectedApps.map { appCode -> - OnboardingAnswer.App(appCode = appCode, goalTime = 0) + val challengeApps = newState.selectedApp.map { appCode -> + OnboardingAnswer.App(appCode = appCode) } updateState { From dc7ce4dc523929a6880c0b9ae25feff199bb45af Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 17:20:36 +0900 Subject: [PATCH 08/20] =?UTF-8?q?[fix]:=20numberPicker=20minValue=202?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index 58bbaeb5e..2e4f653c8 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -30,7 +30,7 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.npOnboardingScreentimeGoal.setupScreentimeGoalRange(1, 6) + binding.npOnboardingScreentimeGoal.setupScreentimeGoalRange(2, 6) binding.npOnboardingScreentimeGoal.descendantFocusability = NumberPicker.FOCUS_BLOCK_DESCENDANTS From f47a53a18ae7a7cbcab417dcc04a505a4e68307d Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 17:41:08 +0900 Subject: [PATCH 09/20] =?UTF-8?q?[fix]:=20onBoardingActivity=20Backbutton?= =?UTF-8?q?=20=EC=9C=84=EC=B9=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fragment/OnBoardingRequestPermissionFragment.kt | 8 ++------ .../src/main/res/layout/activity_on_boarding.xml | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt index c4593e089..3b224efad 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt @@ -106,9 +106,7 @@ class OnBoardingRequestPermissionFragment : Fragment() { private fun requestOverlayPermission() { val packageUri = Uri.parse("package:" + requireContext().packageName) - val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, packageUri) - startActivity(intent) - overlayPermissionLauncher.launch(intent) + overlayPermissionLauncher.launch(Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, packageUri)) } private fun requestUsageAccessPermission() { @@ -118,9 +116,7 @@ class OnBoardingRequestPermissionFragment : Fragment() { startActivity(intent) usageStatsPermissionLauncher.launch(intent) } catch (e: Exception) { - val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS) - startActivity(intent) - usageStatsPermissionLauncher.launch(intent) + usageStatsPermissionLauncher.launch(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) } } diff --git a/feature/onboarding/src/main/res/layout/activity_on_boarding.xml b/feature/onboarding/src/main/res/layout/activity_on_boarding.xml index 1e08cf0ca..983f150d6 100644 --- a/feature/onboarding/src/main/res/layout/activity_on_boarding.xml +++ b/feature/onboarding/src/main/res/layout/activity_on_boarding.xml @@ -10,7 +10,6 @@ android:id="@+id/iv_onboarding_back" android:layout_width="wrap_content" android:layout_height="0dp" - android:layout_marginStart="20dp" android:layout_marginTop="20dp" android:paddingVertical="5dp" android:paddingStart="8dp" From 80b147aec6d54d060cad40f9c386a18985654901 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 19:17:53 +0900 Subject: [PATCH 10/20] =?UTF-8?q?[fix]:=20signUp=20request=20body=EC=97=90?= =?UTF-8?q?=20appCode=20=EC=95=88=20=EB=93=A4=EC=96=B4=EA=B0=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onboarding/viewmodel/OnBoardingViewModel.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index 5e358fb9f..4678d3dc6 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -72,12 +72,12 @@ class OnBoardingViewModel @Inject constructor( val newState = currentState.transform() _addState.value = newState - val challengeApps = newState.selectedApp.map { appCode -> - OnboardingAnswer.App(appCode = appCode) - } - - updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(apps = challengeApps)) + updateUserResponses { + copy( + apps = newState.selectedApp.map { appCode -> + OnboardingAnswer.App(appCode = appCode) + }, + ) } Log.d("OnBoardingViewModel", "updateAppAddState: ${onBoardingState.value.onBoardingAnswer}") } From dabb3e5d03f54c7e4da67ad24ac84562b2642a8a Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Wed, 17 Jan 2024 20:12:08 +0900 Subject: [PATCH 11/20] =?UTF-8?q?[fix]:=20signUp=20request=20body=EC=97=90?= =?UTF-8?q?=20appCode=20=EC=95=88=20=EB=93=A4=EC=96=B4=EA=B0=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OnBoardingSelectScreenTimeFragment.kt | 21 +++++++++++++------ .../OnBoardingSelectUseTimeFragment.kt | 9 -------- .../onboarding/model/OnboardingAnswer.kt | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index 2e4f653c8..624bde5eb 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -7,10 +7,11 @@ import android.view.ViewGroup import android.widget.NumberPicker import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import com.hmh.hamyeonham.common.primitive.extractDigits +import com.hmh.hamyeonham.common.time.timeToMs import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectScreentimeBinding +import com.hmh.hamyeonham.feature.onboarding.model.OnboardingAnswer import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel class OnBoardingSelectScreenTimeFragment : Fragment() { @@ -36,15 +37,23 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { NumberPicker.FOCUS_BLOCK_DESCENDANTS binding.npOnboardingScreentimeGoal.setOnValueChangedListener { _, _, newTime -> + + var updateTime = (newTime * 60).timeToMs() activityViewModel.run { - updateUserResponses { - copy(goalTime = newTime) - } updateState { copy(isNextButtonActive = true) } - updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(goalTime = newTime)) + + activityViewModel.updateState { + copy( + onBoardingAnswer = onBoardingAnswer.copy( + apps = listOf( + OnboardingAnswer.App( + goalTime = updateTime, + ), + ), + ), + ) } } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index a73ed243f..55c6a8833 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -54,15 +54,6 @@ class OnBoardingSelectUseTimeFragment : Fragment() { } private fun updateViewModel() { - activityViewModel.updateUserResponses { - copy( - apps = listOf( - OnboardingAnswer.App( - goalTime = useTotalTime, - ), - ), - ) - } activityViewModel.updateState { copy( onBoardingAnswer = onBoardingAnswer.copy( diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt index 84a145364..b822d1992 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt @@ -6,7 +6,7 @@ data class OnboardingAnswer( val usuallyUseTime: String = "", val problems: List = emptyList(), val period: Int = -1, - val goalTime: Int = 1, + val goalTime: Long = 1, val apps: List = emptyList(), ) { data class App( From 80425a409f005ba99f29e36cd4b88fc25ffa91fd Mon Sep 17 00:00:00 2001 From: KwakEuiJin Date: Thu, 18 Jan 2024 00:06:52 +0900 Subject: [PATCH 12/20] [fix]: Fix Onboarding --- .../usagestats/di/UsageStatsModule.kt | 10 +---- .../usagestats/mapper/UsageGoalMapper.kt | 2 +- .../repository/DefaultUsageGoalsRepository.kt | 2 +- .../feature/onboarding/OnBoardingActivity.kt | 3 +- .../OnBoardingAppAddSelectionFragment.kt | 38 ++++++++----------- .../OnBoardingRequestPermissionFragment.kt | 4 +- .../OnBoardingSelectUseTimeFragment.kt | 20 ++++------ .../viewmodel/OnBoardingViewModel.kt | 18 --------- 8 files changed, 30 insertions(+), 67 deletions(-) diff --git a/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/di/UsageStatsModule.kt b/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/di/UsageStatsModule.kt index fdc4b4ad6..fbe1d7dec 100644 --- a/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/di/UsageStatsModule.kt +++ b/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/di/UsageStatsModule.kt @@ -2,7 +2,7 @@ package com.hmh.hamyeonham.usagestats.di import android.app.usage.UsageStatsManager import android.content.Context -import com.hmh.hamyeonham.usagestats.datasource.UsageGoalsRemoteDataSource +import androidx.core.content.getSystemService import com.hmh.hamyeonham.usagestats.datasource.UsageStatusDataSource import com.hmh.hamyeonham.usagestats.datasource.UsageStatusDataSourceImpl import com.hmh.hamyeonham.usagestats.repository.DefaultUsageGoalsRepository @@ -24,13 +24,7 @@ object UsageStatsModule { @Provides @Singleton fun provideUsageStatusManager(@ApplicationContext context: Context): UsageStatsManager? { - return context.getSystemService(Context.USAGE_STATS_SERVICE) as? UsageStatsManager - } - - @Provides - @Singleton - fun provideUsageGoalsDataSource(): UsageGoalsRemoteDataSource { - return UsageGoalsRemoteDataSource() + return context.getSystemService() } @Module diff --git a/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/mapper/UsageGoalMapper.kt b/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/mapper/UsageGoalMapper.kt index 90e629293..6011f289c 100644 --- a/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/mapper/UsageGoalMapper.kt +++ b/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/mapper/UsageGoalMapper.kt @@ -1,4 +1,4 @@ -package com.hmh.hamyeonham.login.mapper +package com.hmh.hamyeonham.usagestats.mapper import com.hmh.hamyeonham.core.network.usagegoal.model.UsageGoalResponse import com.hmh.hamyeonham.usagestats.model.UsageGoal diff --git a/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/repository/DefaultUsageGoalsRepository.kt b/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/repository/DefaultUsageGoalsRepository.kt index de7c4dd84..c5227ee88 100644 --- a/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/repository/DefaultUsageGoalsRepository.kt +++ b/data/usagestats/src/main/java/com/hmh/hamyeonham/usagestats/repository/DefaultUsageGoalsRepository.kt @@ -1,7 +1,7 @@ package com.hmh.hamyeonham.usagestats.repository import com.hmh.hamyeonham.core.network.usagegoal.UsageGoalService -import com.hmh.hamyeonham.login.mapper.toUsageGoalList +import com.hmh.hamyeonham.usagestats.mapper.toUsageGoalList import com.hmh.hamyeonham.usagestats.datasource.UsageGoalsRemoteDataSource import com.hmh.hamyeonham.usagestats.model.UsageGoal import javax.inject.Inject diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 9ed8dd04b..7ba9c1f09 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -54,8 +54,7 @@ class OnBoardingActivity : AppCompatActivity() { moveToOnBoardingDoneSignUpActivity() } - is SignUpEffect.SignUpFail -> { - } + is SignUpEffect.SignUpFail -> {} } }.launchIn(lifecycleScope) } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index 29f10cb7c..98ce061db 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -1,7 +1,6 @@ package com.hmh.hamyeonham.feature.onboarding.fragment import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -58,33 +57,28 @@ class OnBoardingAppAddSelectionFragment : Fragment() { } private fun onAppCheckboxClicked(packageName: String) { - activityViewModel.updateAppAddState { - copy(selectedApp = selectedApp + packageName) - } - - val challengeApps = activityViewModel.addState.value.selectedApp.map { appCode -> - OnboardingAnswer.App(appCode = appCode) - } - Log.d("TAG", "onAppCheckboxUnClicked: $challengeApps") - - activityViewModel.updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(apps = challengeApps)) + val currentState = onBoardingAnswer.apps + copy( + onBoardingAnswer = onBoardingAnswer.copy( + apps = currentState + OnboardingAnswer.App( + packageName + ) + ) + ) } - Log.d("TAG", "onAppCheckboxClicked: ${activityViewModel.addState.value.selectedApp}") } private fun onAppCheckboxUnClicked(packageName: String) { - activityViewModel.updateAppAddState { - copy(selectedApp = selectedApp - packageName) - } - val challengeApps = activityViewModel.addState.value.selectedApp.map { appCode -> - OnboardingAnswer.App(appCode = appCode) - } - Log.d("TAG", "onAppCheckboxUnClicked: $challengeApps") - activityViewModel.updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(apps = challengeApps)) + val currentState = onBoardingAnswer.apps + copy( + onBoardingAnswer = onBoardingAnswer.copy( + apps = currentState - OnboardingAnswer.App( + packageName + ) + ) + ) } } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt index 3b224efad..e3b478a36 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt @@ -113,10 +113,10 @@ class OnBoardingRequestPermissionFragment : Fragment() { try { val packageUri = Uri.parse("package:" + requireContext().packageName) val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS, packageUri) - startActivity(intent) + // startActivity(intent) usageStatsPermissionLauncher.launch(intent) } catch (e: Exception) { - usageStatsPermissionLauncher.launch(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) + // usageStatsPermissionLauncher.launch(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index 55c6a8833..354b76180 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -11,13 +11,12 @@ import com.hmh.hamyeonham.common.time.timeToMs import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectUseTimeBinding -import com.hmh.hamyeonham.feature.onboarding.model.OnboardingAnswer import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel class OnBoardingSelectUseTimeFragment : Fragment() { private val binding by viewBinding(FragmentOnBoardingSelectUseTimeBinding::bind) private val activityViewModel by activityViewModels() - private var useTotalTime: Long = 0L + private var useSelectTime: Long = 0L override fun onCreateView( inflater: LayoutInflater, @@ -35,11 +34,11 @@ class OnBoardingSelectUseTimeFragment : Fragment() { private fun handleNumberPickerValue() { binding.npOnboardingUseTimeGoalHour.setOnValueChangedListener { _, _, newTime -> - useTotalTime = (newTime * 60 + binding.npOnboardingUseTimeGoalMinute.value).timeToMs() + useSelectTime = (newTime * 60 + binding.npOnboardingUseTimeGoalMinute.value).timeToMs() updateViewModel() } binding.npOnboardingUseTimeGoalMinute.setOnValueChangedListener { _, _, newTime -> - useTotalTime = (binding.npOnboardingUseTimeGoalHour.value * 60 + newTime).timeToMs() + useSelectTime = (binding.npOnboardingUseTimeGoalHour.value * 60 + newTime).timeToMs() updateViewModel() } } @@ -55,15 +54,10 @@ class OnBoardingSelectUseTimeFragment : Fragment() { private fun updateViewModel() { activityViewModel.updateState { - copy( - onBoardingAnswer = onBoardingAnswer.copy( - apps = listOf( - OnboardingAnswer.App( - goalTime = useTotalTime, - ), - ), - ), - ) + val onBoardingAnswer = activityViewModel.onBoardingState.value.onBoardingAnswer + copy(onBoardingAnswer = onBoardingAnswer.copy(apps = onBoardingAnswer.apps.map { app -> + app.copy(goalTime = useSelectTime) + })) } } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index 4678d3dc6..fb34a62fb 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -46,9 +46,6 @@ class OnBoardingViewModel @Inject constructor( private val _onboardEffect = MutableSharedFlow() val onboardEffect = _onboardEffect.asSharedFlow() - private val _addState = MutableStateFlow(AppAddState()) - val addState = _addState.asStateFlow() - init { _onBoardingState.value = onBoardingState.value.copy( pageInfo = initializeButtonInfoList(), @@ -67,21 +64,6 @@ class OnBoardingViewModel @Inject constructor( _onBoardingState.value = newState } - fun updateAppAddState(transform: AppAddState.() -> AppAddState) { - val currentState = addState.value - val newState = currentState.transform() - _addState.value = newState - - updateUserResponses { - copy( - apps = newState.selectedApp.map { appCode -> - OnboardingAnswer.App(appCode = appCode) - }, - ) - } - Log.d("OnBoardingViewModel", "updateAppAddState: ${onBoardingState.value.onBoardingAnswer}") - } - private fun initializeButtonInfoList(): List { val buttonInfoList = mutableListOf() for (index in 0..3) { From f56bbcb04e097539c8d9b86a0e126039a1e627a3 Mon Sep 17 00:00:00 2001 From: KwakEuiJin Date: Thu, 18 Jan 2024 01:51:54 +0900 Subject: [PATCH 13/20] [Fix]: Fix Onboarding --- .../network/signup/model/SignUpRequest.kt | 2 +- .../login/model/SignRequestDomain.kt | 1 - feature/onboarding/build.gradle.kts | 2 +- .../feature/onboarding/OnBoardingActivity.kt | 6 +- .../OnBoardingAppAddSelectionFragment.kt | 24 +-- .../fragment/OnBoardingSelectDataFragment.kt | 26 +-- .../OnBoardingSelectScreenTimeFragment.kt | 23 +-- .../OnBoardingSelectUseTimeFragment.kt | 21 +-- .../onboarding/model/OnboardingAnswer.kt | 37 ----- .../viewmodel/OnBoardingViewModel.kt | 155 +++++++++++++----- 10 files changed, 139 insertions(+), 158 deletions(-) delete mode 100644 feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt diff --git a/core/network/src/main/java/com/hmh/hamyeonham/core/network/signup/model/SignUpRequest.kt b/core/network/src/main/java/com/hmh/hamyeonham/core/network/signup/model/SignUpRequest.kt index e5ce500e6..42bc4ee64 100644 --- a/core/network/src/main/java/com/hmh/hamyeonham/core/network/signup/model/SignUpRequest.kt +++ b/core/network/src/main/java/com/hmh/hamyeonham/core/network/signup/model/SignUpRequest.kt @@ -56,6 +56,6 @@ fun SignRequestDomain.toSignUpRequest(): SignUpRequest { averageUseTime = onboarding.averageUseTime, problem = onboarding.problem, ), - socialPlatform = socialPlatform, + socialPlatform = "KAKAO", ) } diff --git a/domain/login/src/main/java/com/hmh/hamyeonham/login/model/SignRequestDomain.kt b/domain/login/src/main/java/com/hmh/hamyeonham/login/model/SignRequestDomain.kt index b1d3a501f..3ceb33384 100644 --- a/domain/login/src/main/java/com/hmh/hamyeonham/login/model/SignRequestDomain.kt +++ b/domain/login/src/main/java/com/hmh/hamyeonham/login/model/SignRequestDomain.kt @@ -3,7 +3,6 @@ package com.hmh.hamyeonham.login.model data class SignRequestDomain( val challenge: Challenge, val onboarding: Onboarding, - val socialPlatform: String, ) { data class Onboarding( val averageUseTime: String, diff --git a/feature/onboarding/build.gradle.kts b/feature/onboarding/build.gradle.kts index 039cb2a14..6873dd66f 100644 --- a/feature/onboarding/build.gradle.kts +++ b/feature/onboarding/build.gradle.kts @@ -11,10 +11,10 @@ android { dependencies { implementation(projects.core.common) implementation(projects.core.designsystem) + implementation(projects.core.network) implementation(projects.domain.login) implementation(projects.feature.main) - implementation(projects.core.network) implementation(projects.domain.challenge) } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 7ba9c1f09..88d89d248 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -14,7 +14,7 @@ import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentStateAdapter import com.hmh.hamyeonham.feature.onboarding.databinding.ActivityOnBoardingBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel -import com.hmh.hamyeonham.feature.onboarding.viewmodel.SignUpEffect +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEffect import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -50,11 +50,11 @@ class OnBoardingActivity : AppCompatActivity() { private fun collectSignUpEffect() { viewModel.onboardEffect.flowWithLifecycle(lifecycle).onEach { when (it) { - is SignUpEffect.SignUpSuccess -> { + is OnboardEffect.OnboardSuccess -> { moveToOnBoardingDoneSignUpActivity() } - is SignUpEffect.SignUpFail -> {} + is OnboardEffect.OnboardFail -> {} } }.launchIn(lifecycleScope) } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index 98ce061db..af774667f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -11,9 +11,9 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionAdapter import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingAppAddSelectionBinding -import com.hmh.hamyeonham.feature.onboarding.model.OnboardingAnswer import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingAppSelectionViewModel import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -57,28 +57,10 @@ class OnBoardingAppAddSelectionFragment : Fragment() { } private fun onAppCheckboxClicked(packageName: String) { - activityViewModel.updateState { - val currentState = onBoardingAnswer.apps - copy( - onBoardingAnswer = onBoardingAnswer.copy( - apps = currentState + OnboardingAnswer.App( - packageName - ) - ) - ) - } + activityViewModel.sendEvent(OnboardEvent.AddApps(packageName)) } private fun onAppCheckboxUnClicked(packageName: String) { - activityViewModel.updateState { - val currentState = onBoardingAnswer.apps - copy( - onBoardingAnswer = onBoardingAnswer.copy( - apps = currentState - OnboardingAnswer.App( - packageName - ) - ) - ) - } + activityViewModel.sendEvent(OnboardEvent.DeleteApp(packageName)) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt index 33bcf78de..f8ad2ef9a 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt @@ -18,6 +18,7 @@ import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingFragmentType import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectDataBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingSelectDataViewModel import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -147,30 +148,19 @@ class OnBoardingSelectDataFragment : Fragment() { when (fragmentType) { OnBoardingFragmentType.SELECT_DATA_TIME -> { - activityViewModel.updateUserResponses { - copy(usuallyUseTime = firstSelected.orEmpty()) - } - activityViewModel.updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(usuallyUseTime = firstSelected.orEmpty())) - } + activityViewModel.sendEvent(OnboardEvent.UpdateUsuallyUseTime(firstSelected.orEmpty())) } OnBoardingFragmentType.SELECT_DATA_PROBLEM -> { - activityViewModel.updateUserResponses { - copy(problems = selectedQuestion) - } - activityViewModel.updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(problems = selectedQuestion)) - } + activityViewModel.sendEvent(OnboardEvent.UpdateProblems(selectedQuestion)) } OnBoardingFragmentType.SELECT_DATA_PERIOD -> { - activityViewModel.updateUserResponses { - copy(period = firstSelected?.extractDigits() ?: 0) - } - activityViewModel.updateState { - copy(onBoardingAnswer = onBoardingAnswer.copy(period = firstSelected?.extractDigits() ?: 0)) - } + activityViewModel.sendEvent( + OnboardEvent.UpdatePeriod( + firstSelected?.extractDigits() ?: 0 + ) + ) } else -> {} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index 624bde5eb..1e5105ad8 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -7,12 +7,11 @@ import android.view.ViewGroup import android.widget.NumberPicker import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import com.hmh.hamyeonham.common.time.timeToMs import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectScreentimeBinding -import com.hmh.hamyeonham.feature.onboarding.model.OnboardingAnswer import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent class OnBoardingSelectScreenTimeFragment : Fragment() { private val binding by viewBinding(FragmentOnBoardingSelectScreentimeBinding::bind) @@ -37,25 +36,7 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { NumberPicker.FOCUS_BLOCK_DESCENDANTS binding.npOnboardingScreentimeGoal.setOnValueChangedListener { _, _, newTime -> - - var updateTime = (newTime * 60).timeToMs() - activityViewModel.run { - updateState { - copy(isNextButtonActive = true) - } - - activityViewModel.updateState { - copy( - onBoardingAnswer = onBoardingAnswer.copy( - apps = listOf( - OnboardingAnswer.App( - goalTime = updateTime, - ), - ), - ), - ) - } - } + activityViewModel.sendEvent(OnboardEvent.UpdateScreenGoalTime(newTime)) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index 354b76180..b37585aa6 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -7,11 +7,11 @@ import android.view.ViewGroup import android.widget.NumberPicker import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import com.hmh.hamyeonham.common.time.timeToMs import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectUseTimeBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent class OnBoardingSelectUseTimeFragment : Fragment() { private val binding by viewBinding(FragmentOnBoardingSelectUseTimeBinding::bind) @@ -33,13 +33,11 @@ class OnBoardingSelectUseTimeFragment : Fragment() { } private fun handleNumberPickerValue() { - binding.npOnboardingUseTimeGoalHour.setOnValueChangedListener { _, _, newTime -> - useSelectTime = (newTime * 60 + binding.npOnboardingUseTimeGoalMinute.value).timeToMs() - updateViewModel() + binding.npOnboardingUseTimeGoalHour.setOnValueChangedListener { _, _, hour -> + activityViewModel.sendEvent(OnboardEvent.UpdateAppGoalTimeHour(hour)) } - binding.npOnboardingUseTimeGoalMinute.setOnValueChangedListener { _, _, newTime -> - useSelectTime = (binding.npOnboardingUseTimeGoalHour.value * 60 + newTime).timeToMs() - updateViewModel() + binding.npOnboardingUseTimeGoalMinute.setOnValueChangedListener { _, _, minute -> + activityViewModel.sendEvent(OnboardEvent.UpdateAppGoalTimeMinute(minute)) } } @@ -51,13 +49,4 @@ class OnBoardingSelectUseTimeFragment : Fragment() { NumberPicker.FOCUS_BLOCK_DESCENDANTS } } - - private fun updateViewModel() { - activityViewModel.updateState { - val onBoardingAnswer = activityViewModel.onBoardingState.value.onBoardingAnswer - copy(onBoardingAnswer = onBoardingAnswer.copy(apps = onBoardingAnswer.apps.map { app -> - app.copy(goalTime = useSelectTime) - })) - } - } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt deleted file mode 100644 index b822d1992..000000000 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/model/OnboardingAnswer.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.hmh.hamyeonham.feature.onboarding.model - -import com.hmh.hamyeonham.login.model.SignRequestDomain - -data class OnboardingAnswer( - val usuallyUseTime: String = "", - val problems: List = emptyList(), - val period: Int = -1, - val goalTime: Long = 1, - val apps: List = emptyList(), -) { - data class App( - val appCode: String = "", - val goalTime: Long = -1, - ) -} - -fun OnboardingAnswer.toSignUpRequest(): SignRequestDomain { - return SignRequestDomain( - challenge = SignRequestDomain.Challenge( - app = - apps.map { app -> - SignRequestDomain.Challenge.App( - appCode = app.appCode, - goalTime = app.goalTime, - ) - }, - goalTime = goalTime.toLong(), - period = period, - ), - onboarding = SignRequestDomain.Onboarding( - averageUseTime = usuallyUseTime, - problem = problems, - ), - socialPlatform = "KAKAO", - ) -} diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index fb34a62fb..dc8f85a57 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -1,12 +1,10 @@ package com.hmh.hamyeonham.feature.onboarding.viewmodel -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.hmh.hamyeonham.common.time.timeToMs import com.hmh.hamyeonham.core.network.auth.datastore.HMHNetworkPreference -import com.hmh.hamyeonham.feature.onboarding.model.OnboardingAnswer -import com.hmh.hamyeonham.feature.onboarding.model.OnboardingPageInfo -import com.hmh.hamyeonham.feature.onboarding.model.toSignUpRequest +import com.hmh.hamyeonham.login.model.SignRequestDomain import com.hmh.hamyeonham.login.repository.AuthRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow @@ -16,68 +14,129 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import javax.inject.Inject -sealed interface SignUpEffect { - data object SignUpSuccess : SignUpEffect - data object SignUpFail : SignUpEffect +sealed interface OnboardEvent { + data class UpdateUsuallyUseTime(val usuallyUseTime: String) : OnboardEvent + data class UpdateProblems(val problems: List) : OnboardEvent + data class UpdatePeriod(val period: Int) : OnboardEvent + data class UpdateScreenGoalTime(val screeGoalTime: Int) : OnboardEvent + data class AddApps(val appCode: String) : OnboardEvent + data class DeleteApp(val appCode: String) : OnboardEvent + data class UpdateAppGoalTimeMinute(val goalTimeMinute: Int) : OnboardEvent + data class UpdateAppGoalTimeHour(val goalTimeHour: Int) : OnboardEvent + data class UpdateNextButtonActive(val isNextButtonActive: Boolean) : OnboardEvent + data class UpdateAccessToken(val accessToken: String) : OnboardEvent } -data class AppAddState( - val selectedApp: List = listOf(), -) +sealed interface OnboardEffect { + data object OnboardSuccess : OnboardEffect + data object OnboardFail : OnboardEffect +} data class OnBoardingState( - val onBoardingAnswer: OnboardingAnswer = OnboardingAnswer(), - val pageInfo: List = emptyList(), + val usuallyUseTime: String = "", + val problems: List = emptyList(), + val period: Int = -1, + val screenGoalTime: Int = 2, + val appCodeList: List = emptyList(), + val appGoalTimeMinute: Int = 0, + val appGoalTimeHour: Int = 0, val isNextButtonActive: Boolean = false, val accessToken: String = "", -) +) { + val goalTime: Long + get() = (screenGoalTime * 60).timeToMs() + val appGoalTime: Long + get() = ((appGoalTimeHour * 60) + appGoalTimeMinute).timeToMs() +} @HiltViewModel class OnBoardingViewModel @Inject constructor( private val authRepository: AuthRepository, private val hmhNetworkPreference: HMHNetworkPreference, ) : ViewModel() { - private val _userResponses = MutableStateFlow(OnboardingAnswer()) - val userResponses = _userResponses.asStateFlow() private val _onBoardingState = MutableStateFlow(OnBoardingState()) val onBoardingState = _onBoardingState.asStateFlow() - private val _onboardEffect = MutableSharedFlow() + private val _onboardEffect = MutableSharedFlow() val onboardEffect = _onboardEffect.asSharedFlow() - init { - _onBoardingState.value = onBoardingState.value.copy( - pageInfo = initializeButtonInfoList(), - ) - } - - fun updateUserResponses(transform: OnboardingAnswer.() -> OnboardingAnswer) { - val currentState = userResponses.value - val newState = currentState.transform() - _userResponses.value = newState - } - fun updateState(transform: OnBoardingState.() -> OnBoardingState) { val currentState = onBoardingState.value val newState = currentState.transform() _onBoardingState.value = newState } - private fun initializeButtonInfoList(): List { - val buttonInfoList = mutableListOf() - for (index in 0..3) { - buttonInfoList.add(OnboardingPageInfo(index)) + fun sendEvent(event: OnboardEvent) { + when (event) { + is OnboardEvent.UpdateUsuallyUseTime -> { + updateState { + copy(usuallyUseTime = event.usuallyUseTime) + } + } + + is OnboardEvent.UpdateProblems -> { + updateState { + copy(problems = event.problems) + } + } + + is OnboardEvent.UpdatePeriod -> { + updateState { + copy(period = event.period) + } + } + + is OnboardEvent.UpdateScreenGoalTime -> { + updateState { + copy(screenGoalTime = event.screeGoalTime) + } + } + + is OnboardEvent.AddApps -> { + updateState { + copy(appCodeList = appCodeList + event.appCode) + } + } + + is OnboardEvent.DeleteApp -> { + updateState { + copy(appCodeList = appCodeList - event.appCode) + } + } + + is OnboardEvent.UpdateAppGoalTimeMinute -> { + updateState { + copy(appGoalTimeMinute = event.goalTimeMinute) + } + } + + is OnboardEvent.UpdateAppGoalTimeHour -> { + updateState { + copy(appGoalTimeHour = event.goalTimeHour) + } + } + + is OnboardEvent.UpdateNextButtonActive -> { + updateState { + copy(isNextButtonActive = event.isNextButtonActive) + } + } + + is OnboardEvent.UpdateAccessToken -> { + updateState { + copy(accessToken = event.accessToken) + } + } } - return buttonInfoList } fun signUp() { viewModelScope.launch { - val token = onBoardingState.value.accessToken - val request = onBoardingState.value.onBoardingAnswer - Log.d("OnBoardingViewModel", "signUp: $request") - authRepository.signUp(token, request.toSignUpRequest()) + val state = onBoardingState.value + val token = state.accessToken + val request = getRequestDomain(state) + authRepository.signUp(token, request) .onSuccess { signUpUser -> signUpUser.let { hmhNetworkPreference.accessToken = it.accessToken @@ -86,13 +145,31 @@ class OnBoardingViewModel @Inject constructor( hmhNetworkPreference.autoLoginConfigured = true } viewModelScope.launch { - _onboardEffect.emit(SignUpEffect.SignUpSuccess) + _onboardEffect.emit(OnboardEffect.OnboardSuccess) } }.onFailure { viewModelScope.launch { - _onboardEffect.emit(SignUpEffect.SignUpFail) + _onboardEffect.emit(OnboardEffect.OnboardFail) } } } } + + private fun getRequestDomain(state: OnBoardingState) = + SignRequestDomain( + challenge = SignRequestDomain.Challenge( + period = state.period, + app = state.appCodeList.map { appCode -> + SignRequestDomain.Challenge.App( + appCode = appCode, + goalTime = state.appGoalTime, + ) + }, + goalTime = state.goalTime, + ), + onboarding = SignRequestDomain.Onboarding( + averageUseTime = state.usuallyUseTime, + problem = state.problems, + ), + ) } From be30c9f66e406bc4df211c469b07f00e62a7c81f Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 18 Jan 2024 02:06:34 +0900 Subject: [PATCH 14/20] =?UTF-8?q?[fix]:=20=EA=B6=8C=ED=95=9C=20=ED=97=88?= =?UTF-8?q?=EC=9A=A9=20=EB=91=90=EB=B2=88=20=EB=9F=B0=EC=B9=98=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onboarding/fragment/OnBoardingRequestPermissionFragment.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt index e3b478a36..936af49a5 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt @@ -113,10 +113,9 @@ class OnBoardingRequestPermissionFragment : Fragment() { try { val packageUri = Uri.parse("package:" + requireContext().packageName) val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS, packageUri) - // startActivity(intent) usageStatsPermissionLauncher.launch(intent) } catch (e: Exception) { - // usageStatsPermissionLauncher.launch(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) + usageStatsPermissionLauncher.launch(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)) } } From 68f71db6a50b5f6b527e03873be8652ef00afb17 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 18 Jan 2024 02:24:01 +0900 Subject: [PATCH 15/20] =?UTF-8?q?[fix]:=20LoginActivity=20=EC=A7=84?= =?UTF-8?q?=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt index daebf2a86..8692a4603 100644 --- a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt +++ b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt @@ -9,7 +9,7 @@ import androidx.core.splashscreen.SplashScreen import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.databinding.ActivitySampleBinding -import com.hmh.hamyeonham.feature.onboarding.OnBoardingActivity +import com.hmh.hamyeonham.feature.login.LoginActivity import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -21,7 +21,7 @@ class SampleActivity : AppCompatActivity() { val splashScreen = installSplashScreen() initSplashAnimation(splashScreen) setContentView(binding.root) - startActivity(Intent(this, OnBoardingActivity::class.java)) + startActivity(Intent(this, LoginActivity::class.java)) finish() } From 48b322e4ebb5a14736d097257b219a5d7eeeb85f Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 18 Jan 2024 03:45:50 +0900 Subject: [PATCH 16/20] =?UTF-8?q?[feat]:=20=ED=94=84=EB=9E=98=EA=B7=B8?= =?UTF-8?q?=EB=A8=BC=ED=8A=B8=EB=B3=84=20=EB=B2=84=ED=8A=BC=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt | 3 ++- .../hamyeonham/feature/onboarding/OnBoardingActivity.kt | 9 +++++++-- .../fragment/OnBoardingAppAddSelectionFragment.kt | 7 +++++++ .../onboarding/fragment/OnBoardingSelectAppFragment.kt | 7 +++++++ .../fragment/OnBoardingSelectUseTimeFragment.kt | 5 +++++ .../feature/onboarding/viewmodel/OnBoardingViewModel.kt | 7 +++++++ 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt index 8692a4603..64bd54722 100644 --- a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt +++ b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt @@ -10,6 +10,7 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import com.hmh.hamyeonham.common.view.viewBinding import com.hmh.hamyeonham.databinding.ActivitySampleBinding import com.hmh.hamyeonham.feature.login.LoginActivity +import com.hmh.hamyeonham.feature.onboarding.OnBoardingActivity import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -21,7 +22,7 @@ class SampleActivity : AppCompatActivity() { val splashScreen = installSplashScreen() initSplashAnimation(splashScreen) setContentView(binding.root) - startActivity(Intent(this, LoginActivity::class.java)) + startActivity(Intent(this, OnBoardingActivity::class.java)) finish() } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 88d89d248..8be4a72ec 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -36,7 +36,7 @@ class OnBoardingActivity : AppCompatActivity() { setBackPressedCallback() collectOnboardingState() collectSignUpEffect() - + changeOnBoardingButtonTextState() updateAccessToken() } @@ -115,6 +115,12 @@ class OnBoardingActivity : AppCompatActivity() { }.launchIn(lifecycleScope) } + private fun changeOnBoardingButtonTextState() { + viewModel.onBoardingState.flowWithLifecycle(lifecycle).onEach { + binding.btnOnboardingNext.text = it.buttonText + }.launchIn(lifecycleScope) + } + private fun setBackPressedCallback() { onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { @@ -146,7 +152,6 @@ class OnBoardingActivity : AppCompatActivity() { private fun updateProgressBar(currentItem: Int, totalItems: Int) { val progress = (currentItem + 1).toFloat() / totalItems.toFloat() val progressBarWidth = (progress * 100).toInt() - Log.d("progressBarWidth", progressBarWidth.toString()) binding.pbOnboarding.progress = progressBarWidth initAndStartProgressBarAnimation(binding.pbOnboarding, progressBarWidth) } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index af774667f..61e8e4486 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager import com.hmh.hamyeonham.common.view.viewBinding +import com.hmh.hamyeonham.feature.onboarding.R import com.hmh.hamyeonham.feature.onboarding.adapter.OnBoardingAppSelectionAdapter import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingAppAddSelectionBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingAppSelectionViewModel @@ -37,6 +38,7 @@ class OnBoardingAppAddSelectionFragment : Fragment() { private fun initViews() { initAppSelectionRecyclerAdapter() + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_select_done))) } private fun initAppSelectionRecyclerAdapter() { @@ -63,4 +65,9 @@ class OnBoardingAppAddSelectionFragment : Fragment() { private fun onAppCheckboxUnClicked(packageName: String) { activityViewModel.sendEvent(OnboardEvent.DeleteApp(packageName)) } + + override fun onResume() { + super.onResume() + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_select_done))) + } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt index a8dc22166..472bf0edb 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt @@ -7,8 +7,10 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.hmh.hamyeonham.common.view.viewBinding +import com.hmh.hamyeonham.feature.onboarding.R import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectAppBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent class OnBoardingSelectAppFragment : Fragment() { private val binding by viewBinding(FragmentOnBoardingSelectAppBinding::bind) @@ -24,4 +26,9 @@ class OnBoardingSelectAppFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) } + + override fun onResume() { + super.onResume() + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_select_app))) + } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index b37585aa6..2a48d5b7f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding +import com.hmh.hamyeonham.feature.onboarding.R import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectUseTimeBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent @@ -49,4 +50,8 @@ class OnBoardingSelectUseTimeFragment : Fragment() { NumberPicker.FOCUS_BLOCK_DESCENDANTS } } + override fun onResume() { + super.onResume() + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_done))) + } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index dc8f85a57..f56c2976b 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -25,6 +25,7 @@ sealed interface OnboardEvent { data class UpdateAppGoalTimeHour(val goalTimeHour: Int) : OnboardEvent data class UpdateNextButtonActive(val isNextButtonActive: Boolean) : OnboardEvent data class UpdateAccessToken(val accessToken: String) : OnboardEvent + data class changeActivityButtonText(val buttonText: String) : OnboardEvent } sealed interface OnboardEffect { @@ -42,6 +43,7 @@ data class OnBoardingState( val appGoalTimeHour: Int = 0, val isNextButtonActive: Boolean = false, val accessToken: String = "", + val buttonText: String = "다음", ) { val goalTime: Long get() = (screenGoalTime * 60).timeToMs() @@ -128,6 +130,11 @@ class OnBoardingViewModel @Inject constructor( copy(accessToken = event.accessToken) } } + is OnboardEvent.changeActivityButtonText -> { + updateState { + copy(buttonText = event.buttonText) + } + } } } From b7cb7e101ca2c88d863e37b38186e86dc8a70fa7 Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 18 Jan 2024 04:09:54 +0900 Subject: [PATCH 17/20] =?UTF-8?q?[feat]:=20=EC=95=B1=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20=ED=94=84=EB=9E=98=EA=B7=B8=EB=A8=BC=ED=8A=B8=20progressbar?= =?UTF-8?q?=20gone=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feature/onboarding/OnBoardingActivity.kt | 11 +++++++++++ .../fragment/OnBoardingAppAddSelectionFragment.kt | 2 +- .../onboarding/viewmodel/OnBoardingViewModel.kt | 8 ++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index 8be4a72ec..bcdb74ad2 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -3,6 +3,7 @@ package com.hmh.hamyeonham.feature.onboarding import android.content.Intent import android.os.Bundle import android.util.Log +import android.view.View import androidx.activity.OnBackPressedCallback import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity @@ -38,6 +39,7 @@ class OnBoardingActivity : AppCompatActivity() { collectSignUpEffect() changeOnBoardingButtonTextState() updateAccessToken() + changeProgressbarVisibleState() } private fun updateAccessToken() { @@ -120,6 +122,15 @@ class OnBoardingActivity : AppCompatActivity() { binding.btnOnboardingNext.text = it.buttonText }.launchIn(lifecycleScope) } + private fun changeProgressbarVisibleState() { + viewModel.onBoardingState.flowWithLifecycle(lifecycle).onEach { + if(it.progressbarVisible) { + binding.pbOnboarding.visibility = View.VISIBLE + } else { + binding.pbOnboarding.visibility = View.GONE + } + }.launchIn(lifecycleScope) + } private fun setBackPressedCallback() { onBackPressedCallback = object : OnBackPressedCallback(true) { diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt index 61e8e4486..520ee9679 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingAppAddSelectionFragment.kt @@ -38,7 +38,6 @@ class OnBoardingAppAddSelectionFragment : Fragment() { private fun initViews() { initAppSelectionRecyclerAdapter() - activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_select_done))) } private fun initAppSelectionRecyclerAdapter() { @@ -69,5 +68,6 @@ class OnBoardingAppAddSelectionFragment : Fragment() { override fun onResume() { super.onResume() activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_select_done))) + activityViewModel.sendEvent(OnboardEvent.visibleProgressbar(false)) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt index f56c2976b..2662f328f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/viewmodel/OnBoardingViewModel.kt @@ -26,6 +26,8 @@ sealed interface OnboardEvent { data class UpdateNextButtonActive(val isNextButtonActive: Boolean) : OnboardEvent data class UpdateAccessToken(val accessToken: String) : OnboardEvent data class changeActivityButtonText(val buttonText: String) : OnboardEvent + data class visibleProgressbar(val progressbarVisible: Boolean) : OnboardEvent + } sealed interface OnboardEffect { @@ -44,6 +46,7 @@ data class OnBoardingState( val isNextButtonActive: Boolean = false, val accessToken: String = "", val buttonText: String = "다음", + val progressbarVisible: Boolean = true, ) { val goalTime: Long get() = (screenGoalTime * 60).timeToMs() @@ -135,6 +138,11 @@ class OnBoardingViewModel @Inject constructor( copy(buttonText = event.buttonText) } } + is OnboardEvent.visibleProgressbar -> { + updateState { + copy(progressbarVisible = event.progressbarVisible) + } + } } } From 1648409fdb518ec6b14b8313b74e1a5ea0f9b02e Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 18 Jan 2024 04:57:58 +0900 Subject: [PATCH 18/20] =?UTF-8?q?[fix]:=20=EC=95=B1=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20=ED=94=84=EB=9E=98=EA=B7=B8=EB=A8=BC=ED=8A=B8=20progressbar?= =?UTF-8?q?=20gone=EC=B2=98=EB=A6=AC=20=EB=AA=A8=EB=93=A0=20=ED=94=84?= =?UTF-8?q?=EB=9E=98=EA=B7=B8=EB=A8=BC=ED=8A=B8=EC=97=90=20event=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt | 4 ++-- .../fragment/OnBoardingRequestPermissionFragment.kt | 3 +++ .../onboarding/fragment/OnBoardingSelectAppFragment.kt | 1 + .../onboarding/fragment/OnBoardingSelectDataFragment.kt | 2 ++ .../onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt | 3 +++ .../onboarding/fragment/OnBoardingSelectUseTimeFragment.kt | 1 + 6 files changed, 12 insertions(+), 2 deletions(-) diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt index bcdb74ad2..85556131a 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/OnBoardingActivity.kt @@ -2,7 +2,6 @@ package com.hmh.hamyeonham.feature.onboarding import android.content.Intent import android.os.Bundle -import android.util.Log import android.view.View import androidx.activity.OnBackPressedCallback import androidx.activity.viewModels @@ -122,9 +121,10 @@ class OnBoardingActivity : AppCompatActivity() { binding.btnOnboardingNext.text = it.buttonText }.launchIn(lifecycleScope) } + private fun changeProgressbarVisibleState() { viewModel.onBoardingState.flowWithLifecycle(lifecycle).onEach { - if(it.progressbarVisible) { + if (it.progressbarVisible) { binding.pbOnboarding.visibility = View.VISIBLE } else { binding.pbOnboarding.visibility = View.GONE diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt index 936af49a5..77cd14952 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingRequestPermissionFragment.kt @@ -19,6 +19,7 @@ import com.hmh.hamyeonham.feature.onboarding.OnBoardingAccessibilityService import com.hmh.hamyeonham.feature.onboarding.R import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingRequestPermissionBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel +import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint @@ -71,6 +72,8 @@ class OnBoardingRequestPermissionFragment : Fragment() { activityViewModel.updateState { copy(isNextButtonActive = allPermissionIsGranted()) } + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_next))) + activityViewModel.sendEvent(OnboardEvent.visibleProgressbar(true)) } private fun clickRequireAccessibilityButton() { diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt index 472bf0edb..9e5471f52 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectAppFragment.kt @@ -30,5 +30,6 @@ class OnBoardingSelectAppFragment : Fragment() { override fun onResume() { super.onResume() activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_select_app))) + activityViewModel.sendEvent(OnboardEvent.visibleProgressbar(true)) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt index f8ad2ef9a..6b973c619 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectDataFragment.kt @@ -64,6 +64,8 @@ class OnBoardingSelectDataFragment : Fragment() { activityViewModel.updateState { copy(isNextButtonActive = selectedButtons.isNotEmpty()) } + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_next))) + activityViewModel.sendEvent(OnboardEvent.visibleProgressbar(true)) } private fun initViews() { diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt index 1e5105ad8..6015fe4b3 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectScreenTimeFragment.kt @@ -9,6 +9,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.hmh.hamyeonham.common.view.setupScreentimeGoalRange import com.hmh.hamyeonham.common.view.viewBinding +import com.hmh.hamyeonham.feature.onboarding.R import com.hmh.hamyeonham.feature.onboarding.databinding.FragmentOnBoardingSelectScreentimeBinding import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnBoardingViewModel import com.hmh.hamyeonham.feature.onboarding.viewmodel.OnboardEvent @@ -45,5 +46,7 @@ class OnBoardingSelectScreenTimeFragment : Fragment() { activityViewModel.updateState { copy(isNextButtonActive = true) } + activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_next))) + activityViewModel.sendEvent(OnboardEvent.visibleProgressbar(true)) } } diff --git a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt index 2a48d5b7f..31cd5fd2f 100644 --- a/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt +++ b/feature/onboarding/src/main/java/com/hmh/hamyeonham/feature/onboarding/fragment/OnBoardingSelectUseTimeFragment.kt @@ -53,5 +53,6 @@ class OnBoardingSelectUseTimeFragment : Fragment() { override fun onResume() { super.onResume() activityViewModel.sendEvent(OnboardEvent.changeActivityButtonText(getString(R.string.all_done))) + activityViewModel.sendEvent(OnboardEvent.visibleProgressbar(true)) } } From 704eef40bd70c2b192998a1d001e64b1a30ba2fd Mon Sep 17 00:00:00 2001 From: kangyuri1114 Date: Thu, 18 Jan 2024 05:05:46 +0900 Subject: [PATCH 19/20] =?UTF-8?q?[fix]:=20onBoarding=20title=20top=20margi?= =?UTF-8?q?n=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature/onboarding/src/main/res/layout/activity_on_boarding.xml | 2 +- .../main/res/layout/fragment_on_boarding_request_permission.xml | 2 +- .../src/main/res/layout/fragment_on_boarding_select_app.xml | 2 +- .../src/main/res/layout/fragment_on_boarding_select_data.xml | 2 +- .../main/res/layout/fragment_on_boarding_select_screentime.xml | 2 +- .../main/res/layout/fragment_on_boarding_select_use_time.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/feature/onboarding/src/main/res/layout/activity_on_boarding.xml b/feature/onboarding/src/main/res/layout/activity_on_boarding.xml index 983f150d6..13bb69baa 100644 --- a/feature/onboarding/src/main/res/layout/activity_on_boarding.xml +++ b/feature/onboarding/src/main/res/layout/activity_on_boarding.xml @@ -37,7 +37,7 @@ app:layout_constraintBottom_toTopOf="@+id/btn_onboarding_next" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/pb_onboarding" /> + app:layout_constraintTop_toBottomOf="@+id/iv_onboarding_back" /> Date: Thu, 18 Jan 2024 05:06:24 +0900 Subject: [PATCH 20/20] =?UTF-8?q?[fix]:=20=EC=A7=84=EC=9E=85=20LoginActivi?= =?UTF-8?q?ty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt index 64bd54722..8a94932be 100644 --- a/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt +++ b/app/src/main/java/com/hmh/hamyeonham/SampleActivity.kt @@ -22,7 +22,7 @@ class SampleActivity : AppCompatActivity() { val splashScreen = installSplashScreen() initSplashAnimation(splashScreen) setContentView(binding.root) - startActivity(Intent(this, OnBoardingActivity::class.java)) + startActivity(Intent(this, LoginActivity::class.java)) finish() }