Skip to content

Commit

Permalink
#173[feat] 메인 화면 첫입성시에만 튜토리얼 뜨도록 pref 사용. 다음 버튼을 눌러야 튜토리얼을 완수한 것으로 판별
Browse files Browse the repository at this point in the history
  • Loading branch information
stellar-halo committed May 30, 2024
1 parent debff2e commit 9ce9ef0
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 12 deletions.
39 changes: 33 additions & 6 deletions app/src/main/java/com/sopetit/softie/ui/main/home/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import androidx.fragment.app.setFragmentResultListener
import androidx.fragment.app.viewModels
import com.airbnb.lottie.LottieAnimationView
import com.sopetit.softie.R
Expand All @@ -20,6 +21,7 @@ import com.sopetit.softie.util.setStatusBarColor
import dagger.hilt.android.AndroidEntryPoint
import kotlin.random.Random


@AndroidEntryPoint
class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home) {
private val viewModel by viewModels<HomeViewModel>()
Expand All @@ -30,26 +32,51 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home

companion object {
const val RUN_OUT = 0
val START = 0
val HELLO = 0
val DAILY = 1
val HAPPINESS = 2
const val REQUEST_KEY = "request_key"
const val RESULT_KEY = "result_key"
const val FINISH = "finish"
const val START = 0
const val HELLO = 0
const val DAILY = 1
const val HAPPINESS = 2
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setResultListener()
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.viewModel = viewModel
setStatusBarColor(R.color.home_background)

checkHomeTutorial()
setLottieVariable()
viewModel.getHome()
setUserLottieList()
setClickListener()
setObserveHomeResponse()
moveToPaymentView()
}

val bottomSheet = HomeTutorialFragment()
bottomSheet.show(requireActivity().supportFragmentManager, "HomeTutorialFragment")
private fun checkHomeTutorial() {
viewModel.isHomeTutorial.observe(viewLifecycleOwner) { isTutorial ->
if (isTutorial) {
val bottomSheet = HomeTutorialFragment()
bottomSheet.show(requireActivity().supportFragmentManager, this.tag)
}
}
}

private fun setResultListener() {
setFragmentResultListener(REQUEST_KEY) { _, bundle ->
val result = bundle.getString(RESULT_KEY)
if (result == FINISH) {
viewModel.updateHomeTutorial()
}
}
}

private fun setLottieListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.fragment.app.setFragmentResult
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.sopetit.softie.R
import com.sopetit.softie.databinding.FragmentHomeTutorialBottomsheetBinding
import com.sopetit.softie.domain.entity.Tutorial
import com.sopetit.softie.ui.main.home.HomeFragment.Companion.FINISH
import com.sopetit.softie.ui.main.home.HomeFragment.Companion.REQUEST_KEY
import com.sopetit.softie.ui.main.home.HomeFragment.Companion.RESULT_KEY
import java.lang.reflect.Field

class HomeTutorialFragment : BottomSheetDialogFragment() {
Expand All @@ -34,11 +39,7 @@ class HomeTutorialFragment : BottomSheetDialogFragment() {

override fun onStart() {
super.onStart()
if (dialog != null) {
val touchSideView =
dialog!!.window?.decorView?.findViewById<View>(com.google.android.material.R.id.touch_outside)
touchSideView?.setOnClickListener { null }
}
preventHorizontalSliding()
}

override fun onCreateView(
Expand All @@ -53,12 +54,32 @@ class HomeTutorialFragment : BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

setBtnAction()
setupAdapter()
setupIndicators()
updateIndicators()
setBottomSheetCallback()
}

private fun setBtnAction() {
binding.btnNext.setOnClickListener {
if (currentIndex == TUTORIAL_COTTON) {
setFragmentResult(REQUEST_KEY, bundleOf(RESULT_KEY to FINISH))
dismiss()
} else {
viewPager.currentItem = currentIndex + 1
}
}
}

private fun preventHorizontalSliding() {
if (dialog != null) {
val touchSideView =
dialog!!.window?.decorView?.findViewById<View>(com.google.android.material.R.id.touch_outside)
touchSideView?.setOnClickListener { null }
}
}

private fun setupAdapter() {
homeTutorialAdapter = HomeTutorialAdapter()
viewPager = binding.vpTutorial
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import androidx.lifecycle.viewModelScope
import com.sopetit.softie.domain.entity.Cotton
import com.sopetit.softie.domain.entity.Home
import com.sopetit.softie.domain.usecase.local.GetBearTypeUseCase
import com.sopetit.softie.domain.usecase.local.GetIsTutorialUseCase
import com.sopetit.softie.domain.usecase.local.SetBearTypeUseCase
import com.sopetit.softie.domain.usecase.local.SetIsTutorialUseCase
import com.sopetit.softie.domain.usecase.member.GetHomeUseCase
import com.sopetit.softie.domain.usecase.member.PatchCottonUseCase
import com.sopetit.softie.ui.main.home.HomeFragment.Companion.RUN_OUT
Expand All @@ -21,7 +23,9 @@ class HomeViewModel @Inject constructor(
private val getBearTypeUseCase: GetBearTypeUseCase,
private val getHomeUseCase: GetHomeUseCase,
private val patchCottonUseCase: PatchCottonUseCase,
private val setBearTypeUseCase: SetBearTypeUseCase
private val setBearTypeUseCase: SetBearTypeUseCase,
private val getIsTutorialUseCase: GetIsTutorialUseCase,
private val setIsTutorialUseCase: SetIsTutorialUseCase
) : ViewModel() {
private val _homeResponse = MutableLiveData<Home>()
val homeResponse: LiveData<Home> get() = _homeResponse
Expand All @@ -30,11 +34,17 @@ class HomeViewModel @Inject constructor(

private val _helloLottieVisible: MutableLiveData<Boolean> = MutableLiveData(false)
val helloLottieVisible: LiveData<Boolean> get() = _helloLottieVisible
private val _isHomeTutorial: MutableLiveData<Boolean> = MutableLiveData(false)
val isHomeTutorial: LiveData<Boolean> get() = _isHomeTutorial
private val _dailyLottieVisible: MutableLiveData<Boolean> = MutableLiveData(true)
val dailyLottieVisible: LiveData<Boolean> get() = _dailyLottieVisible
private val _happinessLottieVisible: MutableLiveData<Boolean> = MutableLiveData(false)
val happinessLottieVisible: LiveData<Boolean> get() = _happinessLottieVisible

init {
checkHomeTutorial()
}

fun getBearType(): String {
return getBearTypeUseCase()
}
Expand Down Expand Up @@ -102,4 +112,13 @@ class HomeViewModel @Inject constructor(
}
_homeResponse.value = changeData ?: homeResponse.value
}

private fun checkHomeTutorial() {
_isHomeTutorial.value = getIsTutorialUseCase()
}

fun updateHomeTutorial() {
_isHomeTutorial.value = false
setIsTutorialUseCase(isHomeTutorial.value ?: false)
}
}

0 comments on commit 9ce9ef0

Please sign in to comment.