diff --git a/core/analytics/src/main/java/org/mifos/mobilewallet/mifospay/core/analytics/AnalyticsEvent.kt b/core/analytics/src/main/java/org/mifos/mobilewallet/mifospay/core/analytics/AnalyticsEvent.kt
index 191548ae..e3825afe 100644
--- a/core/analytics/src/main/java/org/mifos/mobilewallet/mifospay/core/analytics/AnalyticsEvent.kt
+++ b/core/analytics/src/main/java/org/mifos/mobilewallet/mifospay/core/analytics/AnalyticsEvent.kt
@@ -15,8 +15,10 @@ data class AnalyticsEvent(
val extras: List = emptyList(),
) {
// Standard analytics types.
- object Types {
- const val SCREEN_VIEW = "screen_view" // (extras: SCREEN_NAME)
+ class Types {
+ companion object {
+ const val SCREEN_VIEW = "screen_view" // (extras: SCREEN_NAME)
+ }
}
/**
@@ -32,7 +34,9 @@ data class AnalyticsEvent(
data class Param(val key: String, val value: String)
// Standard parameter keys.
- object ParamKeys {
- const val SCREEN_NAME = "screen_name"
+ class ParamKeys {
+ companion object {
+ const val SCREEN_NAME = "screen_name"
+ }
}
}
diff --git a/core/data/src/main/java/org/mifos/mobilewallet/core/util/TimeZoneMonitor.kt b/core/data/src/main/java/org/mifos/mobilewallet/core/util/TimeZoneMonitor.kt
index e403ce8d..5f576aa5 100644
--- a/core/data/src/main/java/org/mifos/mobilewallet/core/util/TimeZoneMonitor.kt
+++ b/core/data/src/main/java/org/mifos/mobilewallet/core/util/TimeZoneMonitor.kt
@@ -65,8 +65,7 @@ internal class TimeZoneBroadcastMonitor @Inject constructor(
}
}
- /* If there isn't a zoneId in the intent, fallback to the systemDefault,
- which should also reflect the change */
+ // If there isn't a zoneId in the intent, fallback to the systemDefault, which should also reflect the change
trySend(zoneIdFromIntent ?: TimeZone.currentSystemDefault())
}
}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 7012b63e..973480e7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -61,7 +61,6 @@ androidxTracing = "1.3.0-alpha02"
coil = "2.6.0"
androidxMetrics = "1.0.0-beta01"
androidxBrowser = "1.8.0"
-sheets_compose_dialogs_core = "1.3.0"
[libraries]
androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "activityVersion" }
@@ -140,8 +139,7 @@ coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "
coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" }
androidx-metrics = { group = "androidx.metrics", name = "metrics-performance", version.ref = "androidxMetrics" }
androidx-browser = { group = "androidx.browser", name = "browser", version.ref = "androidxBrowser" }
-sheets-compose-dialogs-core = { group = "com.maxkeppeler.sheets-compose-dialogs",name = "core",version.ref = "sheets_compose_dialogs_core"}
-sheets-compose-dialogs-calender = { group = "com.maxkeppeler.sheets-compose-dialogs",name = "calendar",version.ref = "sheets_compose_dialogs_core"}
+
# Dependencies of the included build-logic
android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" }
diff --git a/mifospay/build.gradle.kts b/mifospay/build.gradle.kts
index 640922fa..dc9f18f8 100644
--- a/mifospay/build.gradle.kts
+++ b/mifospay/build.gradle.kts
@@ -96,9 +96,6 @@ dependencies {
implementation("androidx.compose.material:material:1.6.0")
implementation(libs.compose.country.code.picker) // remove after moving auth code to module
- //calender for date picking
- implementation(libs.sheets.compose.dialogs.core)
- implementation(libs.sheets.compose.dialogs.calender)
// ViewModel
implementation(libs.androidx.lifecycle.ktx)
diff --git a/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/presenter/KYCLevel1ViewModel.kt b/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/presenter/KYCLevel1ViewModel.kt
deleted file mode 100644
index 9903bae9..00000000
--- a/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/presenter/KYCLevel1ViewModel.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.mifos.mobilewallet.mifospay.kyc.presenter
-
-import androidx.lifecycle.ViewModel
-import com.mifos.mobilewallet.model.entity.kyc.KYCLevel1Details
-import dagger.hilt.android.lifecycle.HiltViewModel
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.StateFlow
-import org.mifos.mobilewallet.core.base.UseCase
-import org.mifos.mobilewallet.core.base.UseCaseHandler
-import org.mifos.mobilewallet.core.domain.usecase.kyc.UploadKYCLevel1Details
-import org.mifos.mobilewallet.mifospay.data.local.LocalRepository
-import javax.inject.Inject
-
-@HiltViewModel
-class KYCLevel1ViewModel @Inject constructor(
- private val mUseCaseHandler: UseCaseHandler,
- private val mLocalRepository: LocalRepository,
- private val uploadKYCLevel1DetailsUseCase: UploadKYCLevel1Details
-) : ViewModel() {
-
- private val _kyc1uiState =
- MutableStateFlow(KYCLevel1UiState.Empty)
- val kyc1uiState: StateFlow = _kyc1uiState
-
- fun submitData(
- fname: String, lname: String, address1: String, address2: String,
- phoneno: String, dob: String
- ) {
- val kycLevel1Details =
- KYCLevel1Details(
- fname, lname, address1,
- address2, phoneno, dob, "1"
- )
-
- uploadKYCLevel1DetailsUseCase.walletRequestValues = UploadKYCLevel1Details.RequestValues(
- mLocalRepository.clientDetails.clientId.toInt(),
- kycLevel1Details
- )
- val requestValues = uploadKYCLevel1DetailsUseCase.walletRequestValues
- mUseCaseHandler.execute(uploadKYCLevel1DetailsUseCase, requestValues,
- object : UseCase.UseCaseCallback {
- override fun onSuccess(response: UploadKYCLevel1Details.ResponseValue) {
- _kyc1uiState.value = KYCLevel1UiState.Success
- }
-
- override fun onError(message: String) {
- _kyc1uiState.value = KYCLevel1UiState.Error
- }
- }
- )
- }
-}
-
-sealed interface KYCLevel1UiState {
- data object Empty : KYCLevel1UiState
- data object Success : KYCLevel1UiState
- data object Error : KYCLevel1UiState
-}
\ No newline at end of file
diff --git a/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Fragment.kt b/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Fragment.kt
index 95650ee4..0524f083 100644
--- a/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Fragment.kt
+++ b/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Fragment.kt
@@ -1,43 +1,142 @@
package org.mifos.mobilewallet.mifospay.kyc.ui
+import android.app.DatePickerDialog
+import android.app.DatePickerDialog.OnDateSetListener
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.ViewCompositionStrategy
+import android.widget.Button
+import android.widget.EditText
+import butterknife.BindView
+import butterknife.ButterKnife
+import butterknife.OnClick
+import com.hbb20.CountryCodePicker
import dagger.hilt.android.AndroidEntryPoint
+import org.mifos.mobilewallet.mifospay.R
import org.mifos.mobilewallet.mifospay.base.BaseFragment
-import org.mifos.mobilewallet.mifospay.theme.MifosTheme
+import org.mifos.mobilewallet.mifospay.kyc.KYCContract
+import org.mifos.mobilewallet.mifospay.kyc.KYCContract.KYCLevel1View
+import org.mifos.mobilewallet.mifospay.kyc.presenter.KYCLevel1Presenter
+import org.mifos.mobilewallet.mifospay.common.Constants
+import org.mifos.mobilewallet.mifospay.utils.Toaster
+import org.mifos.mobilewallet.mifospay.utils.Utils.hideSoftKeyboard
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import javax.inject.Inject
/**
* Created by ankur on 17/May/2018
*/
@AndroidEntryPoint
-class KYCLevel1Fragment : BaseFragment() {
+class KYCLevel1Fragment : BaseFragment(), KYCLevel1View {
+ @JvmField
+ @Inject
+ var mPresenter: KYCLevel1Presenter? = null
+ var mKYCLevel1Presenter: KYCContract.KYCLevel1Presenter? = null
+
+ @JvmField
+ @BindView(R.id.et_fname)
+ var etFname: EditText? = null
+
+ @JvmField
+ @BindView(R.id.et_lname)
+ var etLname: EditText? = null
+
+ @JvmField
+ @BindView(R.id.et_address1)
+ var etAddress1: EditText? = null
+
+ @JvmField
+ @BindView(R.id.et_address2)
+ var etAddress2: EditText? = null
+
+ @JvmField
+ @BindView(R.id.ccp_code)
+ var ccpPhonecode: CountryCodePicker? = null
+
+ @JvmField
+ @BindView(R.id.et_mobile_number)
+ var etMobileNumber: EditText? = null
+
+ @JvmField
+ @BindView(R.id.et_dob)
+ var etDOB: EditText? = null
+
+ @JvmField
+ @BindView(R.id.btn_submit)
+ var btnSubmit: Button? = null
+ var date: OnDateSetListener? = null
+ private lateinit var myCalendar: Calendar
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
- ): View {
- return ComposeView(requireContext()).apply {
- setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
- setContent {
- MifosTheme {
- KYCLevel1Screen(
- navigateBack = { goBack() }
- )
- }
- }
+ ): View? {
+ val rootView = inflater.inflate(R.layout.fragment_kyc_lvl1, container, false)
+ ButterKnife.bind(this, rootView)
+ mPresenter!!.attachView(this)
+ //setToolbarTitle(Constants.KYC_REGISTRATION_LEVEL_1);
+ myCalendar = Calendar.getInstance()
+ date = OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
+ myCalendar.set(Calendar.YEAR, year)
+ myCalendar.set(Calendar.MONTH, monthOfYear)
+ myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
+ val myFormat = Constants.DD_MM_YY
+ val sdf = SimpleDateFormat(myFormat)
+ etDOB!!.setText(sdf.format(myCalendar.getTime()))
}
+ ccpPhonecode!!.registerCarrierNumberEditText(etMobileNumber)
+ ccpPhonecode!!.setCustomMasterCountries(null)
+ return rootView
}
- fun goBack() {
+ @OnClick(R.id.et_dob)
+ fun onClickDOB() {
+ myCalendar
+ ?.get(Calendar.YEAR)?.let {
+ DatePickerDialog(
+ requireContext(), date, it, myCalendar!![Calendar.MONTH],
+ myCalendar!![Calendar.DAY_OF_MONTH]
+ ).show()
+ }
+ }
+
+ @OnClick(R.id.btn_submit)
+ fun onClickSubmit() {
+ showProgressDialog(Constants.PLEASE_WAIT)
+ val fname = etFname!!.text.toString().trim { it <= ' ' }
+ val lname = etLname!!.text.toString().trim { it <= ' ' }
+ val address1 = etAddress1!!.text.toString().trim { it <= ' ' }
+ val address2 = etAddress2!!.text.toString().trim { it <= ' ' }
+ val phoneno = ccpPhonecode!!.fullNumber
+ val dob = etDOB!!.text.toString().trim { it <= ' ' }
+ mKYCLevel1Presenter!!.submitData(fname, lname, address1, address2, phoneno, dob)
+ hideSoftKeyboard(requireActivity())
+ }
+
+ override fun showToast(s: String?) {
+ Toaster.show(view, s)
+ }
+
+ public override fun showProgressDialog(message: String?) {
+ super.showProgressDialog(message)
+ }
+
+ override fun hideProgressDialog() {
+ super.hideProgressDialog()
+ }
+
+ override fun goBack() {
val intent = requireActivity().intent
requireActivity().finish()
startActivity(intent)
}
+ override fun setPresenter(presenter: KYCContract.KYCLevel1Presenter?) {
+ mKYCLevel1Presenter = presenter
+ }
+
companion object {
@JvmStatic
fun newInstance(): KYCLevel1Fragment {
diff --git a/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Screen.kt b/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Screen.kt
deleted file mode 100644
index e6ac7ea7..00000000
--- a/mifospay/src/main/java/org/mifos/mobilewallet/mifospay/kyc/ui/KYCLevel1Screen.kt
+++ /dev/null
@@ -1,264 +0,0 @@
-package org.mifos.mobilewallet.mifospay.kyc.ui
-
-import android.content.Context
-import android.widget.Toast
-import androidx.compose.foundation.border
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.foundation.text.KeyboardActions
-import androidx.compose.material.TextFieldDefaults
-import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalSoftwareKeyboardController
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.hilt.navigation.compose.hiltViewModel
-import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState
-import com.maxkeppeler.sheets.calendar.CalendarDialog
-import com.maxkeppeler.sheets.calendar.models.CalendarConfig
-import com.maxkeppeler.sheets.calendar.models.CalendarSelection
-import com.maxkeppeler.sheets.calendar.models.CalendarStyle
-import com.togitech.ccp.component.TogiCountryCodePicker
-import org.mifos.mobilewallet.mifospay.R
-import org.mifos.mobilewallet.mifospay.designsystem.component.MifosOutlinedTextField
-import org.mifos.mobilewallet.mifospay.kyc.presenter.KYCLevel1UiState
-import org.mifos.mobilewallet.mifospay.kyc.presenter.KYCLevel1ViewModel
-import org.mifos.mobilewallet.mifospay.theme.MifosTheme
-import java.time.format.DateTimeFormatter
-
-
-@Composable
-fun KYCLevel1Screen(
- viewModel: KYCLevel1ViewModel = hiltViewModel(),
- navigateBack: () -> Unit
-) {
- val context = LocalContext.current
- val kyc1uiState by viewModel.kyc1uiState.collectAsStateWithLifecycle()
-
- KYCLevel1Screen(
- context = context,
- uiState = kyc1uiState,
- submitData = { fname, lname,address1, address2,
- phoneno, dob ->
- viewModel.submitData(
- fname.trim { it <= ' ' },
- lname.trim { it <= ' ' },
- address1.trim { it <= ' ' },
- address2.trim { it <= ' ' },
- phoneno.trim { it <= ' ' },
- dob.trim { it <= ' ' }
- )
- },
- navigateBack = navigateBack
- )
-}
-
-
-@Composable
-fun KYCLevel1Screen(
- context:Context,
- uiState: KYCLevel1UiState,
- submitData: (String, String,String,String,String,String) -> Unit,
- navigateBack:() -> Unit
-) {
-
- when(uiState){
- KYCLevel1UiState.Empty -> {
- Kyc1Form(
- modifier = Modifier,
- submitData = submitData
- )
- }
-
- KYCLevel1UiState.Error -> {
- Toast.makeText(context, stringResource(R.string.error_adding_KYC_Level_1_details),Toast.LENGTH_SHORT).show()
- navigateBack.invoke()
- }
-
- KYCLevel1UiState.Success -> {
- Toast.makeText(context, stringResource(R.string.successkyc1),Toast.LENGTH_SHORT).show()
- navigateBack.invoke()
- }
- }
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Composable
-fun Kyc1Form(
- modifier:Modifier,
- submitData: (String, String,String,String,String,String) -> Unit
-){
-
- var firstName by remember { mutableStateOf("") }
- var lastName by remember { mutableStateOf("") }
- var address1 by remember { mutableStateOf("") }
- var address2 by remember { mutableStateOf("") }
- var mobileNumber by remember { mutableStateOf("") }
- var dateOfBirth by remember { mutableStateOf("") }
- val dateState = rememberUseCaseState()
- val dateFormatter = DateTimeFormatter.ofPattern(stringResource(R.string.date_format))
-
- Column(
- modifier = Modifier
- .fillMaxWidth()
- .padding(16.dp)
- ) {
- Spacer(modifier = Modifier.height(20.dp))
- MifosOutlinedTextField(
- modifier = modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- value = firstName,
- onValueChange = {
- firstName = it
- },
- label = R.string.first_name,
- )
- MifosOutlinedTextField(
- modifier = modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- value = lastName,
- onValueChange = {
- lastName = it
- },
- label = R.string.last_name,
- )
- MifosOutlinedTextField(
- modifier = modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- value = address1,
- onValueChange = {
- address1 = it
- },
- label = R.string.address_line_1,
- )
- MifosOutlinedTextField(
- modifier = modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
- value = address2,
- onValueChange = {
- address2 = it
- },
- label = R.string.address_line_2,
- )
-
- Box (
- modifier = Modifier
- .padding(vertical = 7.dp)
- ){
- val keyboardController = LocalSoftwareKeyboardController.current
- TogiCountryCodePicker(
- modifier = Modifier,
- shape = RoundedCornerShape(3.dp),
- colors = TextFieldDefaults.outlinedTextFieldColors(
- focusedBorderColor = MaterialTheme.colorScheme.primary
- ),
- onValueChange = { (code, phone), isValid ->
- if (isValid){
- mobileNumber = code + phone
- }
- },
- label = {
- Text(stringResource(id = R.string.phone_number)) },
- keyboardActions = KeyboardActions { keyboardController?.hide() }
- )
- }
-
- CalendarDialog(
- state = dateState,
- config = CalendarConfig(
- monthSelection = true,
- yearSelection = true,
- style = CalendarStyle.MONTH
- ),
- selection = CalendarSelection.Date{ date ->
- dateOfBirth = dateFormatter.format(date)
- }
- )
-
- Box(
- modifier = Modifier
- .fillMaxWidth()
- .height(70.dp)
- .padding(vertical = 9.dp)
- .clickable { dateState.show() }
- .border(
- width = 1.dp,
- color = Color.Black
- )
- .padding(12.dp)
- .clip(shape = RoundedCornerShape(8.dp))
- ) {
- Text(
- text = dateOfBirth.ifEmpty { stringResource(R.string.select_dob) },
- style = MaterialTheme.typography.bodyLarge
- )
- }
- Button(
- onClick = {
- submitData(
- firstName,
- lastName,
- address1,
- address2,
- mobileNumber,
- dateOfBirth
- )},
- modifier = Modifier
- .align(Alignment.CenterHorizontally)
- .padding(vertical = 7.dp),
- ) {
- Text(text = stringResource(R.string.submit))
- }
- }
-}
-
-@Preview(showBackground = true)
-@Composable
-fun Kyc1FormPreview(){
- MifosTheme {
- val context = LocalContext.current
- KYCLevel1Screen(context,uiState=KYCLevel1UiState.Empty,submitData = { _, _, _, _, _, _ ->},navigateBack = {})
- }
-}
-
-@Preview(showBackground = true)
-@Composable
-fun Kyc1PreviewWithError(){
- MifosTheme {
- val context = LocalContext.current
- KYCLevel1Screen(context,uiState=KYCLevel1UiState.Error,submitData = { _, _, _, _, _, _ ->},navigateBack = {})
- }
-}
-
-@Preview(showBackground = true)
-@Composable
-fun Kyc1FormPreviewWithSuccess(){
- MifosTheme {
- val context = LocalContext.current
- KYCLevel1Screen(context,uiState=KYCLevel1UiState.Success,submitData = { _, _, _, _, _, _ ->},navigateBack = {})
- }
-}
\ No newline at end of file
diff --git a/mifospay/src/main/res/values/strings.xml b/mifospay/src/main/res/values/strings.xml
index f86ec4cf..ed048c0e 100644
--- a/mifospay/src/main/res/values/strings.xml
+++ b/mifospay/src/main/res/values/strings.xml
@@ -303,10 +303,6 @@
Deleted Successfully
Couldn\'t fetch KYC details. Please try again.
Loading
- dd-MM-yyyy
- Select Date of Birth
- Error adding KYC Level 1 details.
- KYC Level 1 details added.