package me.amitshekhar.learn.kotlin.flow.ui.retryexponentialbackoff 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.ActivityRetryBinding 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 RetryExponentialBackoffActivity : AppCompatActivity() { private lateinit var viewModel: RetryExponentialBackoffModel private lateinit var binding: ActivityRetryBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityRetryBinding.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@RetryExponentialBackoffActivity, it.message, Toast.LENGTH_SHORT ).show() } } } } } viewModel.startTask() } private fun setupViewModel() { viewModel = ViewModelProvider( this, ViewModelFactory( ApiHelperImpl(RetrofitBuilder.apiService), DatabaseHelperImpl(DatabaseBuilder.getInstance(applicationContext)), DefaultDispatcherProvider() ) )[RetryExponentialBackoffModel::class.java] } }