From 440e641b69494dc1c87276279af6a9be4d3477cc Mon Sep 17 00:00:00 2001 From: Pronay sarker Date: Fri, 12 Jul 2024 12:46:16 +0600 Subject: [PATCH] MIFOSAC-216 Migrate Savings account activate fragment to compose b --- .../designsystem/component/MifosSweetError.kt | 34 ++- .../SavingsAccountActivateFragment.kt | 123 ++------ .../SavingsAccountActivateFragmentOld.kt | 154 ++++++++++ .../SavingsAccountActivateScreen.kt | 271 ++++++++++++++++++ .../SavingsAccountActivateUiState.kt | 2 + .../SavingsAccountActivateViewModel.kt | 10 +- 6 files changed, 474 insertions(+), 120 deletions(-) create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragmentOld.kt create mode 100644 mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateScreen.kt diff --git a/core/designsystem/src/main/java/com/mifos/core/designsystem/component/MifosSweetError.kt b/core/designsystem/src/main/java/com/mifos/core/designsystem/component/MifosSweetError.kt index 5dbd6759281..77e826ff372 100644 --- a/core/designsystem/src/main/java/com/mifos/core/designsystem/component/MifosSweetError.kt +++ b/core/designsystem/src/main/java/com/mifos/core/designsystem/component/MifosSweetError.kt @@ -36,7 +36,11 @@ import com.mifos.core.designsystem.theme.BluePrimaryDark import com.mifos.core.designsystem.theme.DarkGray @Composable -fun MifosSweetError(message: String, onclick: () -> Unit) { +fun MifosSweetError( + message: String, + isRetryEnabled : Boolean = true, + onclick: () -> Unit +) { Column( modifier = Modifier .fillMaxSize() @@ -72,19 +76,21 @@ fun MifosSweetError(message: String, onclick: () -> Unit) { color = DarkGray ) ) - Spacer(modifier = Modifier.height(20.dp)) - Button( - onClick = { onclick() }, - contentPadding = PaddingValues(), - colors = ButtonDefaults.buttonColors( - containerColor = if (isSystemInDarkTheme()) BluePrimaryDark else BluePrimary - ) - ) { - Text( - modifier = Modifier.padding(start = 20.dp, end = 20.dp), - text = stringResource(id = R.string.core_designsystem_try_again), - fontSize = 15.sp - ) + if (isRetryEnabled){ + Spacer(modifier = Modifier.height(20.dp)) + Button( + onClick = { onclick() }, + contentPadding = PaddingValues(), + colors = ButtonDefaults.buttonColors( + containerColor = if (isSystemInDarkTheme()) BluePrimaryDark else BluePrimary + ) + ) { + Text( + modifier = Modifier.padding(start = 20.dp, end = 20.dp), + text = stringResource(id = R.string.core_designsystem_try_again), + fontSize = 15.sp + ) + } } } } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragment.kt index 9272e43d1c6..d935a39ee6b 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragment.kt @@ -9,8 +9,12 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.fragment.app.DialogFragment +import androidx.fragment.app.viewModels import androidx.lifecycle.ViewModelProvider +import androidx.navigation.findNavController import androidx.navigation.fragment.navArgs import com.mifos.core.network.GenericResponse import com.mifos.core.objects.accounts.savings.DepositType @@ -18,6 +22,7 @@ import com.mifos.mifosxdroid.R import com.mifos.mifosxdroid.core.MifosBaseFragment import com.mifos.mifosxdroid.core.util.Toaster import com.mifos.mifosxdroid.databinding.DialogFragmentApproveSavingsBinding +import com.mifos.mifosxdroid.online.loanaccountdisbursement.LoanAccountDisbursementScreen import com.mifos.mifosxdroid.uihelpers.MFDatePicker import com.mifos.mifosxdroid.uihelpers.MFDatePicker.OnDatePickListener import com.mifos.utils.DateHelper @@ -27,27 +32,16 @@ import dagger.hilt.android.AndroidEntryPoint /** * Created by Tarun on 01/06/17. - * Fragment to allow user to select a date for account approval. - * It uses the same layout as Savings Account Approve Fragment. */ @AndroidEntryPoint -class SavingsAccountActivateFragment : MifosBaseFragment(), OnDatePickListener { +class SavingsAccountActivateFragment : MifosBaseFragment() { - private lateinit var binding: DialogFragmentApproveSavingsBinding private val arg: SavingsAccountActivateFragmentArgs by navArgs() + private val viewmodel: SavingsAccountActivateViewModel by viewModels() - private lateinit var viewModel: SavingsAccountActivateViewModel - - var activationDate: String? = null - var savingsAccountNumber = 0 - var savingsAccountType: DepositType? = null - private var mfDatePicker: DialogFragment? = null - private var safeUIBlockingUtility: SafeUIBlockingUtility? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - savingsAccountNumber = arg.savingsAccountNumber - savingsAccountType = arg.type - setHasOptionsMenu(true) + viewmodel.savingsAccountId = arg.savingsAccountNumber } override fun onCreateView( @@ -55,100 +49,23 @@ class SavingsAccountActivateFragment : MifosBaseFragment(), OnDatePickListener { container: ViewGroup?, savedInstanceState: Bundle? ): View { - // Inflate the layout for this fragment - activity?.actionBar?.setDisplayHomeAsUpEnabled(true) - binding = DialogFragmentApproveSavingsBinding.inflate(inflater, container, false) - viewModel = ViewModelProvider(this)[SavingsAccountActivateViewModel::class.java] - safeUIBlockingUtility = SafeUIBlockingUtility( - requireContext(), - getString(R.string.savings_account_loading_message) - ) - showUserInterface() - - viewModel.savingsAccountActivateUiState.observe(viewLifecycleOwner) { - when (it) { - is SavingsAccountActivateUiState.ShowError -> { - showProgressbar(false) - showError(it.message) - } - - is SavingsAccountActivateUiState.ShowProgressbar -> showProgressbar(true) - - is SavingsAccountActivateUiState.ShowSavingAccountActivatedSuccessfully -> { - showProgressbar(false) - showSavingAccountActivatedSuccessfully(it.genericResponse) - } + return ComposeView(requireContext()).apply { + setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) + setContent { + SavingsAccountActivateScreen( + navigateBack = { findNavController().popBackStack() } + ) } } - - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - binding.tvApprovalDate.setOnClickListener { - onClickApprovalDate() - } - - binding.btnApproveSavings.setOnClickListener { - onClickActivateSavings() - } - } - - private fun showUserInterface() { - binding.etSavingsApprovalReason.visibility = View.GONE - binding.tvApprovalDateOn.text = resources.getString(R.string.activated_on) - mfDatePicker = MFDatePicker.newInsance(this) - binding.tvApprovalDate.text = MFDatePicker.datePickedAsString - activationDate = binding.tvApprovalDate.text.toString() - showActivationDate() - } - - private fun onClickActivateSavings() { - val hashMap = HashMap() - hashMap["dateFormat"] = "dd MMMM yyyy" - hashMap["activatedOnDate"] = activationDate.toString() - hashMap["locale"] = "en" - viewModel.activateSavings(savingsAccountNumber, hashMap) - } - - private fun onClickApprovalDate() { - mfDatePicker?.show( - requireActivity().supportFragmentManager, - FragmentConstants.DFRAG_DATE_PICKER - ) - } - - override fun onDatePicked(date: String?) { - binding.tvApprovalDate.text = date - activationDate = date - showActivationDate() - } - - private fun showActivationDate() { - activationDate = DateHelper.getDateAsStringUsedForCollectionSheetPayload(activationDate) - .replace("-", " ") } - private fun showSavingAccountActivatedSuccessfully(genericResponse: GenericResponse?) { - Toaster.show( - binding.tvApprovalDateOn, - resources.getString(R.string.savings_account_activated) - ) - Toast.makeText(activity, "Savings Activated", Toast.LENGTH_LONG).show() - requireActivity().supportFragmentManager.popBackStack() + override fun onResume() { + super.onResume() + toolbar?.visibility = View.GONE } - private fun showError(message: String?) { - Toast.makeText(activity, message, Toast.LENGTH_LONG).show() - } - - private fun showProgressbar(b: Boolean) { - if (b) { - safeUIBlockingUtility?.safelyBlockUI() - } else { - safeUIBlockingUtility?.safelyUnBlockUI() - } + override fun onPause() { + super.onPause() + toolbar?.visibility = View.VISIBLE } } \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragmentOld.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragmentOld.kt new file mode 100644 index 00000000000..840a30b9b91 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateFragmentOld.kt @@ -0,0 +1,154 @@ +///* +// * This project is licensed under the open source MPL V2. +// * See https://github.com/openMF/android-client/blob/master/LICENSE.md +// */ +//package com.mifos.mifosxdroid.online.savingsaccountactivate +// +//import android.os.Bundle +//import android.view.LayoutInflater +//import android.view.View +//import android.view.ViewGroup +//import android.widget.Toast +//import androidx.fragment.app.DialogFragment +//import androidx.lifecycle.ViewModelProvider +//import androidx.navigation.fragment.navArgs +//import com.mifos.core.network.GenericResponse +//import com.mifos.core.objects.accounts.savings.DepositType +//import com.mifos.mifosxdroid.R +//import com.mifos.mifosxdroid.core.MifosBaseFragment +//import com.mifos.mifosxdroid.core.util.Toaster +//import com.mifos.mifosxdroid.databinding.DialogFragmentApproveSavingsBinding +//import com.mifos.mifosxdroid.uihelpers.MFDatePicker +//import com.mifos.mifosxdroid.uihelpers.MFDatePicker.OnDatePickListener +//import com.mifos.utils.DateHelper +//import com.mifos.utils.FragmentConstants +//import com.mifos.utils.SafeUIBlockingUtility +//import dagger.hilt.android.AndroidEntryPoint +// +///** +// * Created by Tarun on 01/06/17. +// * Fragment to allow user to select a date for account approval. +// * It uses the same layout as Savings Account Approve Fragment. +// */ +//@AndroidEntryPoint +//class SavingsAccountActivateFragment : MifosBaseFragment(), OnDatePickListener { +// +// private lateinit var binding: DialogFragmentApproveSavingsBinding +// private val arg: SavingsAccountActivateFragmentArgs by navArgs() +// +// private lateinit var viewModel: SavingsAccountActivateViewModel +// +// var activationDate: String? = null +// var savingsAccountNumber = 0 +// var savingsAccountType: DepositType? = null +// private var mfDatePicker: DialogFragment? = null +// private var safeUIBlockingUtility: SafeUIBlockingUtility? = null +// override fun onCreate(savedInstanceState: Bundle?) { +// super.onCreate(savedInstanceState) +// savingsAccountNumber = arg.savingsAccountNumber +// savingsAccountType = arg.type +// setHasOptionsMenu(true) +// } +// +// override fun onCreateView( +// inflater: LayoutInflater, +// container: ViewGroup?, +// savedInstanceState: Bundle? +// ): View { +// // Inflate the layout for this fragment +// activity?.actionBar?.setDisplayHomeAsUpEnabled(true) +// binding = DialogFragmentApproveSavingsBinding.inflate(inflater, container, false) +// viewModel = ViewModelProvider(this)[SavingsAccountActivateViewModel::class.java] +// safeUIBlockingUtility = SafeUIBlockingUtility( +// requireContext(), +// getString(R.string.savings_account_loading_message) +// ) +// showUserInterface() +// +// viewModel.savingsAccountActivateUiState.observe(viewLifecycleOwner) { +// when (it) { +// is SavingsAccountActivateUiState.ShowError -> { +// showProgressbar(false) +// showError(it.message) +// } +// +// is SavingsAccountActivateUiState.ShowProgressbar -> showProgressbar(true) +// +// is SavingsAccountActivateUiState.ShowSavingAccountActivatedSuccessfully -> { +// showProgressbar(false) +// showSavingAccountActivatedSuccessfully(it.genericResponse) +// } +// } +// } +// +// return binding.root +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// +// binding.tvApprovalDate.setOnClickListener { +// onClickApprovalDate() +// } +// +// binding.btnApproveSavings.setOnClickListener { +// onClickActivateSavings() +// } +// } +// +// private fun showUserInterface() { +// binding.etSavingsApprovalReason.visibility = View.GONE +// binding.tvApprovalDateOn.text = resources.getString(R.string.activated_on) +// mfDatePicker = MFDatePicker.newInsance(this) +// binding.tvApprovalDate.text = MFDatePicker.datePickedAsString +// activationDate = binding.tvApprovalDate.text.toString() +// showActivationDate() +// } +// +// private fun onClickActivateSavings() { +// val hashMap = HashMap() +// hashMap["dateFormat"] = "dd MMMM yyyy" +// hashMap["activatedOnDate"] = activationDate.toString() +// hashMap["locale"] = "en" +// viewModel.activateSavings(savingsAccountNumber, hashMap) +// } +// +// private fun onClickApprovalDate() { +// mfDatePicker?.show( +// requireActivity().supportFragmentManager, +// FragmentConstants.DFRAG_DATE_PICKER +// ) +// } +// +// override fun onDatePicked(date: String?) { +// binding.tvApprovalDate.text = date +// activationDate = date +// showActivationDate() +// } +// +// private fun showActivationDate() { +// activationDate = DateHelper.getDateAsStringUsedForCollectionSheetPayload(activationDate) +// .replace("-", " ") +// } +// +// private fun showSavingAccountActivatedSuccessfully(genericResponse: GenericResponse?) { +// Toaster.show( +// binding.tvApprovalDateOn, +// resources.getString(R.string.savings_account_activated) +// ) +// Toast.makeText(activity, "Savings Activated", Toast.LENGTH_LONG).show() +// requireActivity().supportFragmentManager.popBackStack() +// } +// +// private fun showError(message: String?) { +// Toast.makeText(activity, message, Toast.LENGTH_LONG).show() +// } +// +// private fun showProgressbar(b: Boolean) { +// if (b) { +// safeUIBlockingUtility?.safelyBlockUI() +// } else { +// safeUIBlockingUtility?.safelyUnBlockUI() +// } +// } +//} \ No newline at end of file diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateScreen.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateScreen.kt new file mode 100644 index 00000000000..6b00984a784 --- /dev/null +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateScreen.kt @@ -0,0 +1,271 @@ +package com.mifos.mifosxdroid.online.savingsaccountactivate + +import android.widget.Toast +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.DatePicker +import androidx.compose.material3.DatePickerDefaults +import androidx.compose.material3.DatePickerDialog +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SelectableDates +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.rememberDatePickerState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableLongStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.mifos.core.common.utils.Network +import com.mifos.core.designsystem.component.MifosCircularProgress +import com.mifos.core.designsystem.component.MifosDatePickerTextField +import com.mifos.core.designsystem.component.MifosOutlinedTextField +import com.mifos.core.designsystem.component.MifosScaffold +import com.mifos.core.designsystem.component.MifosSweetError +import com.mifos.core.designsystem.icon.MifosIcons +import com.mifos.core.designsystem.theme.BluePrimary +import com.mifos.core.designsystem.theme.BluePrimaryDark +import com.mifos.core.network.GenericResponse +import com.mifos.mifosxdroid.R +import com.mifos.mifosxdroid.online.savingsaccountapproval.SavingsAccountApprovalUiState +import java.text.SimpleDateFormat +import java.util.Locale + +/** + * Created by Pronay Sarker on 12/07/2024 (11:10 AM) + */ + +@Composable +fun SavingsAccountActivateScreen( + navigateBack: () -> Unit +) { + val viewModel: SavingsAccountActivateViewModel = hiltViewModel() + val uiState by viewModel.savingsAccountActivateUiState.collectAsStateWithLifecycle() + + SavingsAccountActivateScreen( + uiState = uiState, + navigateBack = navigateBack, + activateSavings = { viewModel.activateSavings(it) } + ) +} + +@Composable +fun SavingsAccountActivateScreen( + uiState: SavingsAccountActivateUiState, + navigateBack: () -> Unit, + activateSavings: (hashMap: HashMap) -> Unit, +) { + val snackBarHostState = remember { + SnackbarHostState() + } + val context = LocalContext.current + + MifosScaffold( + snackbarHostState = snackBarHostState, + title = stringResource(id = R.string.activate_savings), + onBackPressed = navigateBack, + icon = MifosIcons.arrowBack + ) { + Box( + modifier = Modifier + .fillMaxSize() + .padding(it) + ) { + when (uiState) { + SavingsAccountActivateUiState.Initial -> { + SavingsAccountActivateContent( + activateSavings = activateSavings + ) + } + + is SavingsAccountActivateUiState.ShowError -> { + MifosSweetError( + message = uiState.message, + isRetryEnabled = false, + onclick = {} + ) + } + + SavingsAccountActivateUiState.ShowProgressbar -> { + MifosCircularProgress() + } + + is SavingsAccountActivateUiState.ShowSavingAccountActivatedSuccessfully -> { + Toast.makeText( + context, + context.resources.getString(R.string.savings_account_activated), + Toast.LENGTH_LONG + ).show() + + navigateBack.invoke() + } + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SavingsAccountActivateContent( + activateSavings: (hashMap: HashMap) -> Unit, +) { + val scrollstate = rememberScrollState() + val context = LocalContext.current + var approvalDate by rememberSaveable { + mutableLongStateOf(System.currentTimeMillis()) + } + var approvalReason by rememberSaveable { + mutableStateOf("") + } + var showDatePickerDialog by rememberSaveable { + mutableStateOf(false) + } + val datePickerState = rememberDatePickerState( + initialSelectedDateMillis = approvalDate, + selectableDates = object : SelectableDates { + override fun isSelectableDate(utcTimeMillis: Long): Boolean { + return utcTimeMillis >= System.currentTimeMillis() + } + } + ) + + if (showDatePickerDialog) { + DatePickerDialog( + onDismissRequest = { + showDatePickerDialog = false + }, + confirmButton = { + TextButton( + onClick = { + datePickerState.selectedDateMillis?.let { + approvalDate = it + } + showDatePickerDialog = false + } + ) { Text(stringResource(id = R.string.select_date)) } + }, + dismissButton = { + TextButton( + onClick = { + showDatePickerDialog = false + } + ) { Text(stringResource(id = R.string.cancel)) } + } + ) + { + DatePicker(state = datePickerState) + } + } + + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollstate) + ) { + Spacer(modifier = Modifier.height(16.dp)) + + Text( + style = MaterialTheme.typography.bodyLarge, + text = stringResource(id = R.string.approved_on), + modifier = Modifier.padding(start = 16.dp) + ) + + Spacer(modifier = Modifier.height(16.dp)) + + MifosDatePickerTextField( + value = SimpleDateFormat( + "dd-MMMM-yyyy", + Locale.getDefault() + ).format(approvalDate), label = R.string.approval_savings_date + ) { + showDatePickerDialog = true + } + + Spacer(modifier = Modifier.height(16.dp)) + + MifosOutlinedTextField( + value = approvalReason, + onValueChange = { approvalReason = it }, + label = stringResource(id = R.string.savings_approval_reason), + error = null + ) + + Spacer(modifier = Modifier.height(16.dp)) + + Button(modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) + .heightIn(46.dp), + colors = ButtonDefaults.buttonColors( + containerColor = if (isSystemInDarkTheme()) BluePrimaryDark else BluePrimary + ), + onClick = { + if (Network.isOnline(context)) { + val hashMap = HashMap() + hashMap["dateFormat"] = "dd MMMM yyyy" + hashMap["activatedOnDate"] = SimpleDateFormat( + "dd-MMMM-yyyy", + Locale.getDefault() + ).format(approvalDate) + hashMap["locale"] = "en" + + activateSavings.invoke(hashMap) + } else { + Toast.makeText( + context, + context.resources.getString(R.string.interestPostingPeriodTypeId), + Toast.LENGTH_SHORT + ).show() + } + }) { + Text(text = stringResource(id = R.string.save)) + } + } +} + +class SavingsAccountActivateScreenPreviewProvider : + PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + SavingsAccountActivateUiState.Initial, + SavingsAccountActivateUiState.ShowProgressbar, + SavingsAccountActivateUiState.ShowSavingAccountActivatedSuccessfully(GenericResponse()), + SavingsAccountActivateUiState.ShowError("Error") + ) +} + +@Composable +@Preview(showSystemUi = true) +fun PreviewSavingsAccountActivateScreen( + @PreviewParameter(SavingsAccountActivateScreenPreviewProvider::class) savingsAccountActivateUiState: SavingsAccountActivateUiState +) { + SavingsAccountActivateScreen( + uiState = savingsAccountActivateUiState, + navigateBack = { }, + activateSavings = {} + ) +} diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateUiState.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateUiState.kt index c60f51323c7..a645ca48b6d 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateUiState.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateUiState.kt @@ -7,6 +7,8 @@ import com.mifos.core.network.GenericResponse */ sealed class SavingsAccountActivateUiState { + data object Initial : SavingsAccountActivateUiState() + data object ShowProgressbar : SavingsAccountActivateUiState() data class ShowError(val message: String) : SavingsAccountActivateUiState() diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateViewModel.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateViewModel.kt index c896ff6b19a..8e2cb2946eb 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateViewModel.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/savingsaccountactivate/SavingsAccountActivateViewModel.kt @@ -5,6 +5,8 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.mifos.core.network.GenericResponse import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import rx.Subscriber import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers @@ -17,12 +19,14 @@ import javax.inject.Inject class SavingsAccountActivateViewModel @Inject constructor(private val repository: SavingsAccountActivateRepository) : ViewModel() { - private val _savingsAccountActivateUiState = MutableLiveData() + private val _savingsAccountActivateUiState = MutableStateFlow(SavingsAccountActivateUiState.Initial) - val savingsAccountActivateUiState: LiveData + val savingsAccountActivateUiState: StateFlow get() = _savingsAccountActivateUiState - fun activateSavings(savingsAccountId: Int, request: HashMap) { + var savingsAccountId = 0 + + fun activateSavings(request: HashMap) { _savingsAccountActivateUiState.value = SavingsAccountActivateUiState.ShowProgressbar repository.activateSavings(savingsAccountId, request) .observeOn(AndroidSchedulers.mainThread())