package me.amitshekhar.learn.kotlin.flow.ui.task.twotasks import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.launch import me.amitshekhar.learn.kotlin.flow.data.api.ApiHelperImpl import me.amitshekhar.learn.kotlin.flow.data.api.RetrofitBuilder import me.amitshekhar.learn.kotlin.flow.data.local.DatabaseBuilder import me.amitshekhar.learn.kotlin.flow.data.local.DatabaseHelperImpl import me.amitshekhar.learn.kotlin.flow.databinding.ActivityLongRunningTaskBinding import me.amitshekhar.learn.kotlin.flow.utils.DefaultDispatcherProvider import me.amitshekhar.learn.kotlin.flow.ui.base.UiState import me.amitshekhar.learn.kotlin.flow.ui.base.ViewModelFactory class TwoLongRunningTasksActivity : AppCompatActivity() { private lateinit var viewModel: TwoLongRunningTasksViewModel private lateinit var binding: ActivityLongRunningTaskBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityLongRunningTaskBinding.inflate(layoutInflater) setContentView(binding.root) setupViewModel() setupLongRunningTask() } private fun setupLongRunningTask() { lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { viewModel.uiState.collect { when (it) { is UiState.Success -> { binding.progressBar.visibility = View.GONE binding.textView.text = it.data binding.textView.visibility = View.VISIBLE } is UiState.Loading -> { binding.progressBar.visibility = View.VISIBLE binding.textView.visibility = View.GONE } is UiState.Error -> { //Handle Error binding.progressBar.visibility = View.GONE Toast.makeText( this@TwoLongRunningTasksActivity, it.message, Toast.LENGTH_SHORT ).show() } } } } } viewModel.startLongRunningTask() } private fun setupViewModel() { viewModel = ViewModelProvider( this, ViewModelFactory( ApiHelperImpl(RetrofitBuilder.apiService), DatabaseHelperImpl(DatabaseBuilder.getInstance(applicationContext)), DefaultDispatcherProvider() ) )[TwoLongRunningTasksViewModel::class.java] } }