Skip to content

Instantly share code, notes, and snippets.

@rohitjakhar
Created February 16, 2022 06:42
Show Gist options
  • Save rohitjakhar/410c1cd98d5844887d8adfe9299ab542 to your computer and use it in GitHub Desktop.
Save rohitjakhar/410c1cd98d5844887d8adfe9299ab542 to your computer and use it in GitHub Desktop.
package com.rohit.healthOn.ui.homeScreen.dashboardScreen.sleep
import android.os.Bundle
import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import com.rohit.healthOn.R
import com.rohit.healthOn.databinding.FragmentSleepDashboardBinding
import com.rohit.healthOn.ui.adapters.SleepLogAdapter
import com.rohit.healthOn.ui.dialogs.addSleepDialog.AddSleepDialogFragment
import com.rohit.healthOn.ui.dialogs.noInternetDialog.NoInternetDialogFragment
import com.rohit.healthOn.util.OPEN_ADD_SLEEP_DIALOG
import com.rohit.healthOn.util.OPEN_NO_INTERNET_DIALOG
import com.rohit.healthOn.util.showToast
import com.rohit.healthOn.util.viewBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import timber.log.Timber
@AndroidEntryPoint
class SleepDashboardFragment : Fragment(R.layout.fragment_sleep_dashboard) {
private val binding by viewBinding(FragmentSleepDashboardBinding::bind)
private val viewModel: SleepDashboardViewModel by viewModels()
private val sleepLogAdapter = SleepLogAdapter()
companion object {
fun newInstance() = SleepDashboardFragment()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.addSleep.setOnClickListener {
viewModel.onAddSleepPressed()
}
binding.sleepLogRv.apply {
setHasFixedSize(false)
adapter = sleepLogAdapter
}
collectUiState()
collectUiEvents()
}
private fun collectUiEvents() = viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.events.collect {
when (it) {
SleepDashboardScreenEvents.OpenAddSleepDialog -> openAddSleepDialog()
is SleepDashboardScreenEvents.ShowToast -> requireContext().showToast(it.message)
SleepDashboardScreenEvents.ShowNoInternetDialog -> showNoInternetDialog()
}
}
}
private fun collectUiState() = viewLifecycleOwner.lifecycleScope.launchWhenCreated {
viewModel.uiState.collect {
binding.apply {
Timber.d(it.toString())
greetingText.text = it.greeting
fotdText.text = it.factOfTheDay
completedText.text = it.completedAmount.toString()
totalText.text = "/ ${it.totalAmount} hrs"
progress.progress = it.progress
addSleep.isEnabled = it.isAddSleepButtonEnabled
loadingLayout.loadingLayout.isVisible = it.isLoading
sleepLogAdapter.submitList(it.sleepLog)
yayText.text = it.mainGreeting
}
}
}
private fun openAddSleepDialog() {
AddSleepDialogFragment(
onTimeSelected = {
viewModel.onSleepSelected(it)
},
onDismiss = {
viewModel.onDialogClosed()
}
).show(parentFragmentManager, OPEN_ADD_SLEEP_DIALOG)
}
private fun showNoInternetDialog() {
NoInternetDialogFragment().show(parentFragmentManager, OPEN_NO_INTERNET_DIALOG)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment