From bed0d0318c756e4a4c3b2764e08784dd3031cbf2 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Mon, 27 Sep 2021 16:57:41 +0530 Subject: [PATCH 01/53] Initial commit --- .../getloan/kyc/adapter/KycItemsAdapter.kt | 38 ++++++++++- .../getloan/kyc/fragments/KycFragment.kt | 63 +++++++++++++++++-- .../getloan/kyc/listeners/KycItemsListener.kt | 1 + .../getloan/kyc/repositories/KycRepository.kt | 11 +++- .../getloan/kyc/viewmodels/KycVM.kt | 19 ++++++ .../res/layout/item_fathers_name_view.xml | 31 +++++++++ app/src/main/res/raw/mock.json | 6 ++ 7 files changed, 160 insertions(+), 9 deletions(-) create mode 100644 app/src/main/res/layout/item_fathers_name_view.xml diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt index 727a16c72a..2532783e22 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt @@ -66,6 +66,15 @@ class KycItemsAdapter( ) ) } + KycItemType.TEXTFIELD.ordinal -> { + FathersNameViewHolder( + ItemFathersNameViewBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } KycItemType.PAN.ordinal -> { PanKycOptionsViewHolder( ItemPanKycViewBinding.inflate( @@ -111,6 +120,9 @@ class KycItemsAdapter( is AddressKycOptionsViewHolder -> { setupAddressView(holder.binding, position) } + is FathersNameViewHolder -> { + setupFathersNameView(holder.binding, position) + } is PanKycOptionsViewHolder -> { setupPanView(holder.binding, position) } @@ -125,6 +137,7 @@ class KycItemsAdapter( KycItemType.SELFIE.name -> KycItemType.SELFIE.ordinal KycItemType.AADHAR.name -> KycItemType.AADHAR.ordinal KycItemType.CURRENT_ADDRESS.name -> KycItemType.CURRENT_ADDRESS.ordinal + KycItemType.TEXTFIELD.name -> KycItemType.TEXTFIELD.ordinal KycItemType.PAN.name -> KycItemType.PAN.ordinal KycItemType.VIDEO_KYC.name -> KycItemType.VIDEO_KYC.ordinal else -> -1 @@ -171,6 +184,26 @@ class KycItemsAdapter( } } + private fun setupFathersNameView(binding: ItemFathersNameViewBinding, position: Int) { + val fathersNameKycOption = kycItemList[position] + binding.fathersNameStatusView.setProperties( + (position + 1).toString().plus(DOT), + fathersNameKycOption.title + ?: run { binding.root.resources.getString(R.string.father_s_name) } + ) + if (fathersNameKycOption.status == COMPLETED) { + binding.fathersNameStatusView.updateStatus(StatusIndicatorView.Status.COMPLETE) + binding.fathersNameEt.visibility = View.GONE + } else { + binding.fathersNameEt.hint = fathersNameKycOption.subTitle + ?: run { binding.root.resources.getString(R.string.type_here) } + binding.fathersNameEt.setOnKeyListener { _, _ ,_ -> + kycItemsListener.onFathersNameTap() + false + } + } + } + private fun setupAadharView(binding: ItemAadharKycViewBinding, position: Int) { val aadharKycOption = kycItemList[position] binding.idProofStatusView.setProperties( @@ -342,6 +375,9 @@ class AadharKycOptionsViewHolder(val binding: ItemAadharKycViewBinding) : class AddressKycOptionsViewHolder(val binding: ItemAddressKycViewBinding) : KycOptionsBaseViewHolder(binding.root) +class FathersNameViewHolder(val binding: ItemFathersNameViewBinding) : + KycOptionsBaseViewHolder(binding.root) + class PanKycOptionsViewHolder(val binding: ItemPanKycViewBinding) : KycOptionsBaseViewHolder(binding.root) @@ -349,5 +385,5 @@ class VideoKycOptionsViewHolder(val binding: ItemVideoKycViewBinding) : KycOptionsBaseViewHolder(binding.root) enum class KycItemType { - SELFIE, AADHAR, CURRENT_ADDRESS, PAN, VIDEO_KYC + SELFIE, AADHAR, CURRENT_ADDRESS, PAN, VIDEO_KYC, TEXTFIELD } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index 60888788e4..f6fa604aad 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -14,6 +14,7 @@ import android.view.ViewGroup import android.widget.Toast import android.widget.Toast.LENGTH_SHORT import androidx.core.content.PermissionChecker.PERMISSION_GRANTED +import androidx.core.widget.doAfterTextChanged import androidx.lifecycle.ViewModelProvider import co.hyperverge.hypersnapsdk.activities.HVDocsActivity import co.hyperverge.hypersnapsdk.listeners.DocCaptureCompletionHandler @@ -24,6 +25,7 @@ import com.naviapp.analytics.neoeyed.viewmodel.NeoEyedVM import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.ApiPollScheduler import com.naviapp.common.activity.NaviWebViewActivity +import com.naviapp.common.customview.FormEditText import com.naviapp.common.decorator.TopMarginItemDecoration import com.naviapp.common.fragment.BaseFragment import com.naviapp.common.listeners.LocationUpdateListener @@ -57,6 +59,7 @@ import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.common.view.KycPanView import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView import com.naviapp.personalloan.getloan.kyc.activities.SelfieCaptureActivity +import com.naviapp.personalloan.getloan.kyc.adapter.FathersNameViewHolder import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter import com.naviapp.personalloan.getloan.kyc.listeners.AadhaarVerificationListener import com.naviapp.personalloan.getloan.kyc.listeners.KycItemsListener @@ -294,19 +297,28 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } else { (binding.kycRecyclerView.adapter as? KycItemsAdapter)?.updateData(it) } - } - if (kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { + + var isFathersNameFieldPresent = false + + kycDetailsResponse.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == TEXTFIELD) { + isFathersNameFieldPresent = true + } + } + if(!isFathersNameFieldPresent && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()){ binding.footerView.enableNextButton(true) - } else { - binding.footerView.enableNextButton(false) } handleVideoKycDeeplink(kycDetailsResponse.kycDetails?.kycItemList) } } private fun handleVideoKycDeeplink(kycItemList: List?) { - if (arguments?.getString(Constants.SUB_REDIRECT) == KycAaadharActionType.VIDEO_KYC.name && viewModel.isKycItemNotCompleted(KycAaadharActionType.VIDEO_KYC.name, kycItemList)) { + if (arguments?.getString(Constants.SUB_REDIRECT) == KycAaadharActionType.VIDEO_KYC.name && viewModel.isKycItemNotCompleted( + KycAaadharActionType.VIDEO_KYC.name, + kycItemList + ) + ) { arguments?.remove(Constants.SUB_REDIRECT) videoKycInit() } @@ -967,6 +979,25 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } ?: onPANDocumentCaptureError() } + private fun enableNextButton(showError: Boolean, fathersNameEt: FormEditText) { + if (shouldEnableNextButton(showError, fathersNameEt)) { + binding.footerView.enableNextButton(true) + } else { + binding.footerView.enableNextButton(false) + } + } + + private fun shouldEnableNextButton(showError: Boolean, fathersNameEt: FormEditText): Boolean { + var enable = true + if (fathersNameEt.text.toString().length < 5) { + enable = false + if (showError) { + fathersNameEt.setError(getString(R.string.min_character_length_5)) + } + } + return enable + } + override fun onPause() { super.onPause() permissionDeniedFragment?.dismiss() @@ -985,7 +1016,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, var moveToAddressPage = true viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == "CURRENT_ADDRESS" && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { + if (kycItem.type == CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { viewModel.fetchKycStatus() moveToAddressPage = false } @@ -1014,6 +1045,8 @@ class KycFragment : BaseFragment(), FooterInteractionListener, private const val CORRESPONDENCE = "CORRESPONDENCE" private const val HYPERVERGE = "HYPERVERGE" private const val PROVIDER_MOCK = "MOCK" + private const val TEXTFIELD = "TEXTFIELD" + private const val CURRENT_ADDRESS = "CURRENT_ADDRESS" private const val VIDEO_KYC_WEB_VIEW_REQUEST_CODE = 11 } @@ -1100,4 +1133,22 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onVideoKycItemTap() { videoKycInit() } + + override fun onFathersNameTap() { + val viewHolder = getFathersNameViewHolder() + viewHolder.binding.fathersNameEt.doAfterTextChanged { + enableNextButton(false, viewHolder.binding.fathersNameEt) + } + } + + private fun getFathersNameViewHolder(): FathersNameViewHolder { + var position = 0 + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + position += 1 + if (kycItem.type == TEXTFIELD) { + position -= 1 + } + } + return binding.kycRecyclerView.findViewHolderForAdapterPosition(position) as FathersNameViewHolder + } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt index 5a94357f25..dbc53acf74 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt @@ -8,4 +8,5 @@ interface KycItemsListener { fun onAadhaarOtherOptionTap(kycAaadharActionType: KycAaadharActionType) fun onPanItemTap() fun onVideoKycItemTap() + fun onFathersNameTap() } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt index 9f182a657f..14450506bd 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt @@ -1,5 +1,6 @@ package com.naviapp.personalloan.getloan.kyc.repositories +import com.google.gson.reflect.TypeToken import com.naviapp.models.request.KycRequest import com.naviapp.models.request.SaveCorrespondenceAddressRequest import com.naviapp.models.request.SelfieSetting @@ -7,6 +8,7 @@ import com.naviapp.models.response.* import com.naviapp.network.models.RepoResult import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData +import com.naviapp.utils.mockApiResponse import com.naviapp.utils.retrofitService import okhttp3.MultipartBody import okhttp3.RequestBody @@ -31,8 +33,13 @@ class KycRepository : ResponseCallback() { suspend fun requestAadhaarDetails() = apiResponseCallback(retrofitService().requestAadhaarDetails()) - suspend fun fetchKycDetails() = - apiResponseCallback(retrofitService().fetchKycDetails()) +// suspend fun fetchKycDetails() = +// apiResponseCallback(retrofitService().fetchKycDetails()) + + suspend fun fetchKycDetails(): RepoResult { + val type = object : TypeToken() {}.type + return mockApiResponse(type, "currentAddressResponse") + } suspend fun fetchKycStatus() = apiResponseCallback(retrofitService().fetchKycStatus()) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index 238cf67bfe..8cd56a02e6 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -121,6 +121,10 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() val videoKycAsyncResponse: LiveData get() = _videoKycAsyncResponse + private val _fathersNameSubmitResponse = MutableLiveData() + val fathersNameSubmitResponse: LiveData + get() = _fathersNameSubmitResponse + fun submitSelfie(bytes: ByteArray, requestData: SelfieUploadRequestData? = null) { var requestBody: RequestBody? = null convertObjectToJsonString(requestData)?.let { @@ -160,6 +164,21 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() } } + fun updateKycDetails(kycRequest: KycRequest) { + coroutineScope.launch { + val response = repository.updateKycDetails(kycRequest) + if (response.error == null && response.errors?.isEmpty().orTrue()) { + _fathersNameSubmitResponse.value = response.data + } else { + setErrorData( + response.errors, + response.error, + ApiErrorTagType.SUBMIT_KYC_API_ERROR + ) + } + } + } + fun checkApiPollStatus(requestId: String, type: String) { coroutineScope.launch { val response = repository.fetchAsyncRequestData(requestId) diff --git a/app/src/main/res/layout/item_fathers_name_view.xml b/app/src/main/res/layout/item_fathers_name_view.xml new file mode 100644 index 0000000000..b6f305c711 --- /dev/null +++ b/app/src/main/res/layout/item_fathers_name_view.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index 67896dd5b9..60bd732030 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -3255,6 +3255,12 @@ "uri": "https://s3.ap-south-1.amazonaws.com/navi-d5a6c37adb7e06d06401aba47fe07bf3/prod/b6879988-0022-4dd7-94e4-6d80ee735c7f?X-Amz-Security-Token\u003dFwoGZXIvYXdzEBcaDEbeLF6v9%2BBCTd9v9SLKAXnruh6Vz4ubOX%2BQ6BRz6ytEoW6lcFj%2BRsEiMIo1H74UnHxlbJ8Mq0nFAud9djqEK4qy07vZBWnhRfMJZpYWyRBgeVNmfBW6pg7AQKATZXLxi2P9wzWNa67G4uLKBsjPurVrkegpLfy0SdWWaRSPQXFaWf50i6wgvAei18leryu5pkssjb%2FDFMV6mDgzdHzz3c%2BCMi%2Bzzf60QPPJ72S1rMFqhMIVkt2rz8620s2hQfLJjSxBXeswACm0zGJtdWcHrEX1In675oD6UhAotZ%2BXiQYyLShluwKRXHpvGKeqoRieOI5zPBZMM3RjaLeAIW%2BU9b0CRzwoweilmnwyXoySaA%3D%3D\u0026X-Amz-Algorithm\u003dAWS4-HMAC-SHA256\u0026X-Amz-Date\u003d20210825T054733Z\u0026X-Amz-SignedHeaders\u003dhost\u0026X-Amz-Expires\u003d36000\u0026X-Amz-Credential\u003dASIAYKBIIH2NLZHHQ7WK%2F20210825%2Fap-south-1%2Fs3%2Faws4_request\u0026X-Amz-Signature\u003d9254a117ec5ff3e020c9ac1d6c9b052f769c54a05bddd0de5b5520109f525a1c", "showOtpOption": false, "isEditable": false + }, + { + "type": "TEXTFIELD", + "title": "Father's Name", + "status": "PENDING", + "subTitle": "Type here" } ], "kycDetailsComplete": true From 0e36dbb4359aeedc19844b4d092ef329e12e4462 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Mon, 27 Sep 2021 19:35:44 +0530 Subject: [PATCH 02/53] Fathers name UI --- .../com/naviapp/models/request/KycRequest.kt | 2 +- .../getloan/kyc/fragments/KycFragment.kt | 78 ++++++++++++++----- .../getloan/kyc/repositories/KycRepository.kt | 11 +-- .../getloan/kyc/viewmodels/KycVM.kt | 1 - 4 files changed, 62 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/naviapp/models/request/KycRequest.kt b/app/src/main/java/com/naviapp/models/request/KycRequest.kt index a3c415764b..e2498936c8 100644 --- a/app/src/main/java/com/naviapp/models/request/KycRequest.kt +++ b/app/src/main/java/com/naviapp/models/request/KycRequest.kt @@ -3,7 +3,7 @@ package com.naviapp.models.request import com.google.gson.annotations.SerializedName data class KycRequest( - @SerializedName("address") val address: Address?, + @SerializedName("address") val address: Address? = null, @SerializedName("parentDetails") val parentDetails: ParentDetails? = null ) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index f6fa604aad..242f6c2731 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -46,6 +46,8 @@ import com.naviapp.models.CtaData import com.naviapp.models.FeedbackPageType import com.naviapp.models.RedirectPageStatus import com.naviapp.models.UiStatusValue +import com.naviapp.models.request.KycRequest +import com.naviapp.models.request.ParentDetails import com.naviapp.models.request.SelfieSetting import com.naviapp.models.request.SelfieUploadRequestData import com.naviapp.models.response.KycAaadharActionType @@ -170,6 +172,27 @@ class KycFragment : BaseFragment(), FooterInteractionListener, observeSupportedPANOvdsUploadAsyncResponse() observeVideoKycData() observeVideoKycUploadAsyncResponse() + observeFathersNameSubmitResponse() + } + + private fun observeFathersNameSubmitResponse() { + viewModel.fathersNameSubmitResponse.observeNullable(this) { _ -> + var moveToAddressPage = true + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { + viewModel.fetchKycStatus() + moveToAddressPage = false + } + } + + if (moveToAddressPage) { + viewModel.kycDetailsLiveData.value?.footer?.nextCta?.url?.let { + listener?.navigateTo( + it + ) + } + } + } } private fun observeVideoKycData() { @@ -299,20 +322,23 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } } - var isFathersNameFieldPresent = false - - kycDetailsResponse.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == TEXTFIELD) { - isFathersNameFieldPresent = true - } - } - if(!isFathersNameFieldPresent && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()){ + if (!isFathersNameFieldPresent() && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { binding.footerView.enableNextButton(true) } handleVideoKycDeeplink(kycDetailsResponse.kycDetails?.kycItemList) } } + private fun isFathersNameFieldPresent(): Boolean { + var isFathersNameFieldPresent = false + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == TEXTFIELD) { + isFathersNameFieldPresent = true + } + } + return isFathersNameFieldPresent + } + private fun handleVideoKycDeeplink(kycItemList: List?) { if (arguments?.getString(Constants.SUB_REDIRECT) == KycAaadharActionType.VIDEO_KYC.name && viewModel.isKycItemNotCompleted( KycAaadharActionType.VIDEO_KYC.name, @@ -1015,18 +1041,27 @@ class KycFragment : BaseFragment(), FooterInteractionListener, locationUpdateListener?.updateLocation(PL_KYC_LOCATION) var moveToAddressPage = true - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { - viewModel.fetchKycStatus() - moveToAddressPage = false - } - } - - if (moveToAddressPage) { - ctaData?.url?.let { - listener?.navigateTo( - it + if (isFathersNameFieldPresent()) { + viewModel.updateKycDetails( + KycRequest( + null, + ParentDetails(fatherName = getFathersName()) ) + ) + } else { + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { + viewModel.fetchKycStatus() + moveToAddressPage = false + } + } + + if (moveToAddressPage) { + ctaData?.url?.let { + listener?.navigateTo( + it + ) + } } } } @@ -1151,4 +1186,9 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } return binding.kycRecyclerView.findViewHolderForAdapterPosition(position) as FathersNameViewHolder } + + private fun getFathersName(): String { + val viewHolder = getFathersNameViewHolder() + return viewHolder.binding.fathersNameEt.text.toString() + } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt index 14450506bd..9f182a657f 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycRepository.kt @@ -1,6 +1,5 @@ package com.naviapp.personalloan.getloan.kyc.repositories -import com.google.gson.reflect.TypeToken import com.naviapp.models.request.KycRequest import com.naviapp.models.request.SaveCorrespondenceAddressRequest import com.naviapp.models.request.SelfieSetting @@ -8,7 +7,6 @@ import com.naviapp.models.response.* import com.naviapp.network.models.RepoResult import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData -import com.naviapp.utils.mockApiResponse import com.naviapp.utils.retrofitService import okhttp3.MultipartBody import okhttp3.RequestBody @@ -33,13 +31,8 @@ class KycRepository : ResponseCallback() { suspend fun requestAadhaarDetails() = apiResponseCallback(retrofitService().requestAadhaarDetails()) -// suspend fun fetchKycDetails() = -// apiResponseCallback(retrofitService().fetchKycDetails()) - - suspend fun fetchKycDetails(): RepoResult { - val type = object : TypeToken() {}.type - return mockApiResponse(type, "currentAddressResponse") - } + suspend fun fetchKycDetails() = + apiResponseCallback(retrofitService().fetchKycDetails()) suspend fun fetchKycStatus() = apiResponseCallback(retrofitService().fetchKycStatus()) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index 8cd56a02e6..d751419b47 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -21,7 +21,6 @@ import com.naviapp.network.models.GenericErrorResponse import com.naviapp.payment.models.ProviderType import com.naviapp.personalloan.getloan.common.view.KycPanView import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView -import com.naviapp.personalloan.getloan.kyc.adapter.KycItemType import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter import com.naviapp.personalloan.getloan.kyc.models.AadhaarDetailsResponse import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData From 25fccd3b6beb2d9af33946d30637f6dee076c833 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 28 Sep 2021 11:31:32 +0530 Subject: [PATCH 03/53] minor change --- .../models/response/KycDetailsResponse.kt | 1 + .../getloan/kyc/fragments/KycFragment.kt | 20 +++---------------- app/src/main/res/raw/mock.json | 1 + 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt index 71365ee15b..033ba59004 100644 --- a/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt @@ -22,6 +22,7 @@ data class KycItem( @SerializedName("status") val status: String?, @SerializedName("currentAddress") val currentAddress: CurrentAddress?, @SerializedName("uri") val uri: String?, + @SerializedName("json_key") val json_key: String? = null, @SerializedName("showOtpOption") val showOtpOption: Boolean?, @SerializedName("isEditable") val isEditable: Boolean? = null, @SerializedName("additionalData") val additionalData: KycItemAdditionalData? = null diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index 242f6c2731..d957e50f59 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -176,22 +176,8 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } private fun observeFathersNameSubmitResponse() { - viewModel.fathersNameSubmitResponse.observeNullable(this) { _ -> - var moveToAddressPage = true - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { - viewModel.fetchKycStatus() - moveToAddressPage = false - } - } - - if (moveToAddressPage) { - viewModel.kycDetailsLiveData.value?.footer?.nextCta?.url?.let { - listener?.navigateTo( - it - ) - } - } + viewModel.fathersNameSubmitResponse.observeNonNull(this) { + onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) } } @@ -1041,7 +1027,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, locationUpdateListener?.updateLocation(PL_KYC_LOCATION) var moveToAddressPage = true - if (isFathersNameFieldPresent()) { + if (isFathersNameFieldPresent() && viewModel.fathersNameSubmitResponse.value == null) { viewModel.updateKycDetails( KycRequest( null, diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index 60bd732030..44df3f022e 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -3259,6 +3259,7 @@ { "type": "TEXTFIELD", "title": "Father's Name", + "json_key": "fatherName", "status": "PENDING", "subTitle": "Type here" } From c471d456f4b095bb75945212b9223b34a0936689 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 28 Sep 2021 22:10:04 +0530 Subject: [PATCH 04/53] code refactor --- .../com/naviapp/models/request/KycRequest.kt | 7 +- .../models/response/KycDetailsResponse.kt | 2 +- .../getloan/kyc/adapter/KycItemsAdapter.kt | 31 ++--- .../getloan/kyc/fragments/KycFragment.kt | 116 ++++++++++-------- ...name_view.xml => item_text_field_view.xml} | 0 app/src/main/res/raw/mock.json | 9 +- 6 files changed, 83 insertions(+), 82 deletions(-) rename app/src/main/res/layout/{item_fathers_name_view.xml => item_text_field_view.xml} (100%) diff --git a/app/src/main/java/com/naviapp/models/request/KycRequest.kt b/app/src/main/java/com/naviapp/models/request/KycRequest.kt index e2498936c8..3c501b8a23 100644 --- a/app/src/main/java/com/naviapp/models/request/KycRequest.kt +++ b/app/src/main/java/com/naviapp/models/request/KycRequest.kt @@ -4,12 +4,7 @@ import com.google.gson.annotations.SerializedName data class KycRequest( @SerializedName("address") val address: Address? = null, - @SerializedName("parentDetails") val parentDetails: ParentDetails? = null -) - -data class ParentDetails( - @SerializedName("fatherName") val fatherName: String? = null, - @SerializedName("motherName") val motherName: String? = null + @SerializedName("parentDetails") val textField: HashMap? = null ) data class Address( diff --git a/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt index 033ba59004..219ca02d3b 100644 --- a/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt @@ -22,7 +22,7 @@ data class KycItem( @SerializedName("status") val status: String?, @SerializedName("currentAddress") val currentAddress: CurrentAddress?, @SerializedName("uri") val uri: String?, - @SerializedName("json_key") val json_key: String? = null, + @SerializedName("jsonKey") val jsonKey: String? = null, @SerializedName("showOtpOption") val showOtpOption: Boolean?, @SerializedName("isEditable") val isEditable: Boolean? = null, @SerializedName("additionalData") val additionalData: KycItemAdditionalData? = null diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt index 2532783e22..f3ed739411 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt @@ -67,8 +67,8 @@ class KycItemsAdapter( ) } KycItemType.TEXTFIELD.ordinal -> { - FathersNameViewHolder( - ItemFathersNameViewBinding.inflate( + TextFieldViewHolder( + ItemTextFieldViewBinding.inflate( LayoutInflater.from(parent.context), parent, false @@ -120,8 +120,8 @@ class KycItemsAdapter( is AddressKycOptionsViewHolder -> { setupAddressView(holder.binding, position) } - is FathersNameViewHolder -> { - setupFathersNameView(holder.binding, position) + is TextFieldViewHolder -> { + setupTextFieldView(holder.binding, position) } is PanKycOptionsViewHolder -> { setupPanView(holder.binding, position) @@ -184,23 +184,18 @@ class KycItemsAdapter( } } - private fun setupFathersNameView(binding: ItemFathersNameViewBinding, position: Int) { - val fathersNameKycOption = kycItemList[position] + private fun setupTextFieldView(binding: ItemTextFieldViewBinding, position: Int) { + val testFieldKycOption = kycItemList[position] binding.fathersNameStatusView.setProperties( (position + 1).toString().plus(DOT), - fathersNameKycOption.title + testFieldKycOption.title ?: run { binding.root.resources.getString(R.string.father_s_name) } ) - if (fathersNameKycOption.status == COMPLETED) { - binding.fathersNameStatusView.updateStatus(StatusIndicatorView.Status.COMPLETE) - binding.fathersNameEt.visibility = View.GONE - } else { - binding.fathersNameEt.hint = fathersNameKycOption.subTitle - ?: run { binding.root.resources.getString(R.string.type_here) } - binding.fathersNameEt.setOnKeyListener { _, _ ,_ -> - kycItemsListener.onFathersNameTap() - false - } + binding.fathersNameEt.hint = testFieldKycOption.subTitle + ?: run { binding.root.resources.getString(R.string.type_here) } + binding.fathersNameEt.setOnKeyListener { _, _, _ -> + kycItemsListener.onFathersNameTap() + false } } @@ -375,7 +370,7 @@ class AadharKycOptionsViewHolder(val binding: ItemAadharKycViewBinding) : class AddressKycOptionsViewHolder(val binding: ItemAddressKycViewBinding) : KycOptionsBaseViewHolder(binding.root) -class FathersNameViewHolder(val binding: ItemFathersNameViewBinding) : +class TextFieldViewHolder(val binding: ItemTextFieldViewBinding) : KycOptionsBaseViewHolder(binding.root) class PanKycOptionsViewHolder(val binding: ItemPanKycViewBinding) : diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index d957e50f59..f3067c1886 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -47,7 +47,6 @@ import com.naviapp.models.FeedbackPageType import com.naviapp.models.RedirectPageStatus import com.naviapp.models.UiStatusValue import com.naviapp.models.request.KycRequest -import com.naviapp.models.request.ParentDetails import com.naviapp.models.request.SelfieSetting import com.naviapp.models.request.SelfieUploadRequestData import com.naviapp.models.response.KycAaadharActionType @@ -61,7 +60,7 @@ import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.common.view.KycPanView import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView import com.naviapp.personalloan.getloan.kyc.activities.SelfieCaptureActivity -import com.naviapp.personalloan.getloan.kyc.adapter.FathersNameViewHolder +import com.naviapp.personalloan.getloan.kyc.adapter.TextFieldViewHolder import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter import com.naviapp.personalloan.getloan.kyc.listeners.AadhaarVerificationListener import com.naviapp.personalloan.getloan.kyc.listeners.KycItemsListener @@ -77,6 +76,7 @@ import java.io.ByteArrayOutputStream import java.io.File import java.io.FileInputStream import java.util.* +import kotlin.collections.HashMap class KycFragment : BaseFragment(), FooterInteractionListener, KycItemsListener { @@ -315,16 +315,6 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } } - private fun isFathersNameFieldPresent(): Boolean { - var isFathersNameFieldPresent = false - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == TEXTFIELD) { - isFathersNameFieldPresent = true - } - } - return isFathersNameFieldPresent - } - private fun handleVideoKycDeeplink(kycItemList: List?) { if (arguments?.getString(Constants.SUB_REDIRECT) == KycAaadharActionType.VIDEO_KYC.name && viewModel.isKycItemNotCompleted( KycAaadharActionType.VIDEO_KYC.name, @@ -991,25 +981,65 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } ?: onPANDocumentCaptureError() } - private fun enableNextButton(showError: Boolean, fathersNameEt: FormEditText) { - if (shouldEnableNextButton(showError, fathersNameEt)) { + private fun isFathersNameFieldPresent(): Boolean { + var isFathersNameFieldPresent = false + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == TEXTFIELD) { + isFathersNameFieldPresent = true + } + } + return isFathersNameFieldPresent + } + + private fun isCurrentAddressFieldPresent(): Boolean { + var isCurrentAddressFieldPresent = false + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == CURRENT_ADDRESS) { + isCurrentAddressFieldPresent = true + } + } + return isCurrentAddressFieldPresent + } + + private fun getJsonKey(): String { + if (isFathersNameFieldPresent()) { + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == TEXTFIELD) { + return kycItem.jsonKey.toString() + } + } + } + return "" + } + + private fun getFathersNameViewHolder(): TextFieldViewHolder? { + var position = -1 + viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> + position += 1 + if (kycItem.type == TEXTFIELD) { + return binding.kycRecyclerView.findViewHolderForAdapterPosition(position) as TextFieldViewHolder + } + } + return null + } + + private fun getFathersName(): String { + val viewHolder = getFathersNameViewHolder() + viewHolder?.let { + return viewHolder.binding.fathersNameEt.text.toString() + } ?: run { + return "" + } + } + + private fun enableNextButton(fathersNameEt: FormEditText) { + if (fathersNameEt.text.toString().trim().isNotEmpty()) { binding.footerView.enableNextButton(true) } else { binding.footerView.enableNextButton(false) } } - private fun shouldEnableNextButton(showError: Boolean, fathersNameEt: FormEditText): Boolean { - var enable = true - if (fathersNameEt.text.toString().length < 5) { - enable = false - if (showError) { - fathersNameEt.setError(getString(R.string.min_character_length_5)) - } - } - return enable - } - override fun onPause() { super.onPause() permissionDeniedFragment?.dismiss() @@ -1025,24 +1055,20 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - var moveToAddressPage = true if (isFathersNameFieldPresent() && viewModel.fathersNameSubmitResponse.value == null) { + val hashMap = HashMap() + hashMap[getJsonKey()] = getFathersName() viewModel.updateKycDetails( KycRequest( null, - ParentDetails(fatherName = getFathersName()) + hashMap ) ) } else { - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { - viewModel.fetchKycStatus() - moveToAddressPage = false - } - } - - if (moveToAddressPage) { + if (isCurrentAddressFieldPresent()) { + viewModel.fetchKycStatus() + } else { ctaData?.url?.let { listener?.navigateTo( it @@ -1157,24 +1183,10 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFathersNameTap() { val viewHolder = getFathersNameViewHolder() - viewHolder.binding.fathersNameEt.doAfterTextChanged { - enableNextButton(false, viewHolder.binding.fathersNameEt) - } - } - - private fun getFathersNameViewHolder(): FathersNameViewHolder { - var position = 0 - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - position += 1 - if (kycItem.type == TEXTFIELD) { - position -= 1 + viewHolder?.let { + viewHolder.binding.fathersNameEt.doAfterTextChanged { + enableNextButton(viewHolder.binding.fathersNameEt) } } - return binding.kycRecyclerView.findViewHolderForAdapterPosition(position) as FathersNameViewHolder - } - - private fun getFathersName(): String { - val viewHolder = getFathersNameViewHolder() - return viewHolder.binding.fathersNameEt.text.toString() } } \ No newline at end of file diff --git a/app/src/main/res/layout/item_fathers_name_view.xml b/app/src/main/res/layout/item_text_field_view.xml similarity index 100% rename from app/src/main/res/layout/item_fathers_name_view.xml rename to app/src/main/res/layout/item_text_field_view.xml diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index 44df3f022e..92f610eb59 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -3257,11 +3257,10 @@ "isEditable": false }, { - "type": "TEXTFIELD", - "title": "Father's Name", - "json_key": "fatherName", - "status": "PENDING", - "subTitle": "Type here" + "type" : "TEXTFIELD", + "subtitle" : "Type here", + "title" : "Father's Name", + "jsonKey" : "fathersName" } ], "kycDetailsComplete": true From d3e2898cf4422e6bd3bb8af68b94c8835f5e0b2d Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Thu, 30 Sep 2021 15:08:51 +0530 Subject: [PATCH 05/53] Change listener/Bug fix --- .../getloan/kyc/adapter/KycItemsAdapter.kt | 4 ++-- .../getloan/kyc/fragments/KycFragment.kt | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt index f3ed739411..8396bff139 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt @@ -193,9 +193,9 @@ class KycItemsAdapter( ) binding.fathersNameEt.hint = testFieldKycOption.subTitle ?: run { binding.root.resources.getString(R.string.type_here) } - binding.fathersNameEt.setOnKeyListener { _, _, _ -> + + binding.fathersNameEt.setOnFocusChangeListener { _, _ -> kycItemsListener.onFathersNameTap() - false } } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index f3067c1886..86b85e3d5c 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -25,7 +25,6 @@ import com.naviapp.analytics.neoeyed.viewmodel.NeoEyedVM import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.ApiPollScheduler import com.naviapp.common.activity.NaviWebViewActivity -import com.naviapp.common.customview.FormEditText import com.naviapp.common.decorator.TopMarginItemDecoration import com.naviapp.common.fragment.BaseFragment import com.naviapp.common.listeners.LocationUpdateListener @@ -1009,7 +1008,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } } } - return "" + return Constants.EMPTY } private fun getFathersNameViewHolder(): TextFieldViewHolder? { @@ -1028,12 +1027,12 @@ class KycFragment : BaseFragment(), FooterInteractionListener, viewHolder?.let { return viewHolder.binding.fathersNameEt.text.toString() } ?: run { - return "" + return Constants.EMPTY } } - private fun enableNextButton(fathersNameEt: FormEditText) { - if (fathersNameEt.text.toString().trim().isNotEmpty()) { + private fun enableNextButton(s: CharSequence?) { + if (s?.trim()?.isNotEmpty() == true) { binding.footerView.enableNextButton(true) } else { binding.footerView.enableNextButton(false) @@ -1089,7 +1088,6 @@ class KycFragment : BaseFragment(), FooterInteractionListener, const val VIDEO_KYC_REQUEST_CODE = 103 const val AADHAR_OTP_REQUEST_CODE = 104 const val COMPLETED = "COMPLETED" - private const val CORRESPONDENCE = "CORRESPONDENCE" private const val HYPERVERGE = "HYPERVERGE" private const val PROVIDER_MOCK = "MOCK" private const val TEXTFIELD = "TEXTFIELD" @@ -1185,7 +1183,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, val viewHolder = getFathersNameViewHolder() viewHolder?.let { viewHolder.binding.fathersNameEt.doAfterTextChanged { - enableNextButton(viewHolder.binding.fathersNameEt) + enableNextButton(it) } } } From ad9e2b6552cdc58897a3468ad0f28eb6c31bb27b Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Sat, 2 Oct 2021 15:18:15 +0530 Subject: [PATCH 06/53] Code refactor --- .../getloan/kyc/adapter/KycItemsAdapter.kt | 8 +-- .../getloan/kyc/fragments/KycFragment.kt | 71 ++++++------------- .../getloan/kyc/listeners/KycItemsListener.kt | 1 - .../getloan/kyc/viewmodels/KycVM.kt | 18 +++-- .../main/res/layout/item_text_field_view.xml | 2 +- 5 files changed, 40 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt index 8396bff139..71f29b13c2 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt @@ -3,6 +3,7 @@ package com.naviapp.personalloan.getloan.kyc.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.widget.doAfterTextChanged import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.naviapp.R @@ -191,11 +192,10 @@ class KycItemsAdapter( testFieldKycOption.title ?: run { binding.root.resources.getString(R.string.father_s_name) } ) - binding.fathersNameEt.hint = testFieldKycOption.subTitle + binding.textFieldEt.hint = testFieldKycOption.subTitle ?: run { binding.root.resources.getString(R.string.type_here) } - - binding.fathersNameEt.setOnFocusChangeListener { _, _ -> - kycItemsListener.onFathersNameTap() + binding.textFieldEt.doAfterTextChanged { + viewModel.setTextFieldData(it?.trim()?.toString()) } } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index df5f97c03c..da1bc25889 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -14,7 +14,6 @@ import android.view.ViewGroup import android.widget.Toast import android.widget.Toast.LENGTH_SHORT import androidx.core.content.PermissionChecker.PERMISSION_GRANTED -import androidx.core.widget.doAfterTextChanged import androidx.lifecycle.ViewModelProvider import co.hyperverge.hypersnapsdk.activities.HVDocsActivity import co.hyperverge.hypersnapsdk.listeners.DocCaptureCompletionHandler @@ -60,7 +59,6 @@ import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.common.view.KycPanView import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView import com.naviapp.personalloan.getloan.kyc.activities.SelfieCaptureActivity -import com.naviapp.personalloan.getloan.kyc.adapter.TextFieldViewHolder import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter import com.naviapp.personalloan.getloan.kyc.listeners.AadhaarVerificationListener import com.naviapp.personalloan.getloan.kyc.listeners.KycItemsListener @@ -175,11 +173,18 @@ class KycFragment : BaseFragment(), FooterInteractionListener, observeSupportedPANOvdsUploadAsyncResponse() observeVideoKycData() observeVideoKycUploadAsyncResponse() - observeFathersNameSubmitResponse() + observeTextFieldData() + observeTextFieldSubmitResponse() } - private fun observeFathersNameSubmitResponse() { - viewModel.fathersNameSubmitResponse.observeNonNull(this) { + private fun observeTextFieldData() { + viewModel.textFieldData.observeNonNull(this) { + enableNextButton(it) + } + } + + private fun observeTextFieldSubmitResponse() { + viewModel.textFieldSubmitResponse.observeNonNull(this) { onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) } } @@ -311,7 +316,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } } - if (!isFathersNameFieldPresent() && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { + if (!isTextFieldPresent() && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { binding.footerView.enableNextButton(true) } handleVideoKycDeeplink(kycDetailsResponse.kycDetails?.kycItemList) @@ -984,14 +989,14 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } ?: onPANDocumentCaptureError() } - private fun isFathersNameFieldPresent(): Boolean { - var isFathersNameFieldPresent = false + private fun isTextFieldPresent(): Boolean { + var isTextFieldPresent = false viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> if (kycItem.type == TEXTFIELD) { - isFathersNameFieldPresent = true + isTextFieldPresent = true } } - return isFathersNameFieldPresent + return isTextFieldPresent } private fun isCurrentAddressFieldPresent(): Boolean { @@ -1005,7 +1010,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } private fun getJsonKey(): String { - if (isFathersNameFieldPresent()) { + if (isTextFieldPresent()) { viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> if (kycItem.type == TEXTFIELD) { return kycItem.jsonKey.toString() @@ -1015,28 +1020,8 @@ class KycFragment : BaseFragment(), FooterInteractionListener, return Constants.EMPTY } - private fun getFathersNameViewHolder(): TextFieldViewHolder? { - var position = -1 - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - position += 1 - if (kycItem.type == TEXTFIELD) { - return binding.kycRecyclerView.findViewHolderForAdapterPosition(position) as TextFieldViewHolder - } - } - return null - } - - private fun getFathersName(): String { - val viewHolder = getFathersNameViewHolder() - viewHolder?.let { - return viewHolder.binding.fathersNameEt.text.toString() - } ?: run { - return Constants.EMPTY - } - } - - private fun enableNextButton(s: CharSequence?) { - if (s?.trim()?.isNotEmpty() == true) { + private fun enableNextButton(s: String) { + if (s.isNotEmpty()) { binding.footerView.enableNextButton(true) } else { binding.footerView.enableNextButton(false) @@ -1059,15 +1044,10 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - if (isFathersNameFieldPresent() && viewModel.fathersNameSubmitResponse.value == null) { + if (isTextFieldPresent() && viewModel.textFieldSubmitResponse.value == null) { val hashMap = HashMap() - hashMap[getJsonKey()] = getFathersName() - viewModel.updateKycDetails( - KycRequest( - null, - hashMap - ) - ) + hashMap[getJsonKey()] = viewModel.textFieldData.value.toString() + viewModel.updateKycDetails(KycRequest(null, hashMap)) } else { if (isCurrentAddressFieldPresent()) { viewModel.fetchKycStatus() @@ -1183,15 +1163,6 @@ class KycFragment : BaseFragment(), FooterInteractionListener, videoKycInit() } - override fun onFathersNameTap() { - val viewHolder = getFathersNameViewHolder() - viewHolder?.let { - viewHolder.binding.fathersNameEt.doAfterTextChanged { - enableNextButton(it) - } - } - } - private fun checkForAppUpdate() { updateApp(screenName = Constants.KYC) { updateAppDetails, startUpdatingApp -> updateInAppDialog = UpdateInAppDialog(updateAppDetails, requireContext()) { diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt index dbc53acf74..5a94357f25 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/listeners/KycItemsListener.kt @@ -8,5 +8,4 @@ interface KycItemsListener { fun onAadhaarOtherOptionTap(kycAaadharActionType: KycAaadharActionType) fun onPanItemTap() fun onVideoKycItemTap() - fun onFathersNameTap() } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index d751419b47..d67114c8cb 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -120,9 +120,13 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() val videoKycAsyncResponse: LiveData get() = _videoKycAsyncResponse - private val _fathersNameSubmitResponse = MutableLiveData() - val fathersNameSubmitResponse: LiveData - get() = _fathersNameSubmitResponse + private val _textFieldData = MutableLiveData() + val textFieldData: LiveData + get() = _textFieldData + + private val _textFieldSubmitResponse = MutableLiveData() + val textFieldSubmitResponse: LiveData + get() = _textFieldSubmitResponse fun submitSelfie(bytes: ByteArray, requestData: SelfieUploadRequestData? = null) { var requestBody: RequestBody? = null @@ -167,7 +171,7 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() coroutineScope.launch { val response = repository.updateKycDetails(kycRequest) if (response.error == null && response.errors?.isEmpty().orTrue()) { - _fathersNameSubmitResponse.value = response.data + _textFieldSubmitResponse.value = response.data } else { setErrorData( response.errors, @@ -361,6 +365,12 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() _panAadharOvdStatus.value = status } + fun setTextFieldData(name: String?) { + name?.let { + _textFieldData.value = name + } + } + fun isKycItemNotCompleted(type: String, kycItemList: List?): Boolean { kycItemList?.forEach { kycItem -> if (kycItem.type == type && kycItem.status != KycItemsAdapter.COMPLETED) { diff --git a/app/src/main/res/layout/item_text_field_view.xml b/app/src/main/res/layout/item_text_field_view.xml index b6f305c711..a1307e94f7 100644 --- a/app/src/main/res/layout/item_text_field_view.xml +++ b/app/src/main/res/layout/item_text_field_view.xml @@ -17,7 +17,7 @@ app:layout_constraintTop_toTopOf="parent" /> Date: Thu, 7 Oct 2021 15:42:01 +0530 Subject: [PATCH 07/53] Add polling for fathers name submit --- .../getloan/kyc/fragments/KycFragment.kt | 21 +++++++++++++++---- .../getloan/kyc/viewmodels/KycVM.kt | 8 +++---- app/src/main/res/raw/mock.json | 4 ++-- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index da1bc25889..e7a5aa6e72 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -70,6 +70,7 @@ import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM import com.naviapp.personalloan.getloan.kyc.viewmodels.KycVM import com.naviapp.utils.* import com.naviapp.utils.Constants.PL_KYC_LOCATION +import kotlinx.android.synthetic.main.transaction_history_fragment.* import java.io.ByteArrayOutputStream import java.io.File import java.io.FileInputStream @@ -95,6 +96,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, private var aadhaarVerificationListener: AadhaarVerificationListener? = null private var headerInteractionListener: HeaderInteractionListener? = null private var locationUpdateListener: LocationUpdateListener? = null + private var fathersNameSubmitSuccess = false private lateinit var updateInAppDialog: UpdateInAppDialog @@ -184,8 +186,16 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } private fun observeTextFieldSubmitResponse() { - viewModel.textFieldSubmitResponse.observeNonNull(this) { - onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) + viewModel.textFieldSubmitAsyncResponse.observeNonNull(this) { data -> + data.requestId?.let { requestId -> + firebaseRequestId = requestId + firebaseInit( + requestId, + UPDATE_KYC_DETAILS, + data.notificationPath.orEmpty() + ) + apiPollInit(requestId, UPDATE_KYC_DETAILS) + } } } @@ -685,7 +695,9 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } UPDATE_KYC_DETAILS -> { if (TextUtils.equals(status, SUCCESS)) { - viewModel.fetchKycDetails() + fathersNameSubmitSuccess = true + hideLoader() + onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) } } OVD_UPLOAD -> { @@ -1044,10 +1056,11 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - if (isTextFieldPresent() && viewModel.textFieldSubmitResponse.value == null) { + if (isTextFieldPresent() && !fathersNameSubmitSuccess) { val hashMap = HashMap() hashMap[getJsonKey()] = viewModel.textFieldData.value.toString() viewModel.updateKycDetails(KycRequest(null, hashMap)) + showLoader() } else { if (isCurrentAddressFieldPresent()) { viewModel.fetchKycStatus() diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index d67114c8cb..73624a1cda 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -124,9 +124,9 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() val textFieldData: LiveData get() = _textFieldData - private val _textFieldSubmitResponse = MutableLiveData() - val textFieldSubmitResponse: LiveData - get() = _textFieldSubmitResponse + private val _textFieldSubmitAsyncResponse = MutableLiveData() + val textFieldSubmitAsyncResponse: LiveData + get() = _textFieldSubmitAsyncResponse fun submitSelfie(bytes: ByteArray, requestData: SelfieUploadRequestData? = null) { var requestBody: RequestBody? = null @@ -171,7 +171,7 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() coroutineScope.launch { val response = repository.updateKycDetails(kycRequest) if (response.error == null && response.errors?.isEmpty().orTrue()) { - _textFieldSubmitResponse.value = response.data + _textFieldSubmitAsyncResponse.value = response.data } else { setErrorData( response.errors, diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index 5d2bfb8c69..6420006d9f 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -3299,7 +3299,7 @@ "type" : "TEXTFIELD", "subtitle" : "Type here", "title" : "Father's Name", - "jsonKey" : "fathersName" + "jsonKey" : "fatherName" } ], "kycDetailsComplete": true @@ -3600,4 +3600,4 @@ } } } -} \ No newline at end of file +} From 4dbb4546ef4d4e9118a30d1f1fe60167674ec2e0 Mon Sep 17 00:00:00 2001 From: adarshs Date: Tue, 12 Oct 2021 12:58:24 +0530 Subject: [PATCH 08/53] neoEyed sdk update from 3.3.0 to 3.3.1 --- .gitignore | 2 +- app/build.gradle | 2 +- app/libs/neoeyed-sdk-release-3.3.0.aar | Bin 41667 -> 0 bytes app/libs/neoeyed-sdk-release-3.3.1.aar | Bin 0 -> 41709 bytes neoeyed-sdk-release-3.3.0/build.gradle | 2 -- .../neoeyed-sdk-release-3.3.0.aar | Bin 41667 -> 0 bytes neoeyed-sdk-release-3.3.1/build.gradle | 2 ++ .../neoeyed-sdk-release-3.3.1.aar | Bin 0 -> 41709 bytes settings.gradle | 2 +- 9 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 app/libs/neoeyed-sdk-release-3.3.0.aar create mode 100644 app/libs/neoeyed-sdk-release-3.3.1.aar delete mode 100644 neoeyed-sdk-release-3.3.0/build.gradle delete mode 100644 neoeyed-sdk-release-3.3.0/neoeyed-sdk-release-3.3.0.aar create mode 100644 neoeyed-sdk-release-3.3.1/build.gradle create mode 100644 neoeyed-sdk-release-3.3.1/neoeyed-sdk-release-3.3.1.aar diff --git a/.gitignore b/.gitignore index 03b025c175..581c4f22ef 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,6 @@ vcs.xml digio-kyc-1.0.13/build digio-esign-v2.8.0/build truecallersdk-2.6.1-releasePartner/build -neoeyed-sdk-release-3.3.0/build/ +neoeyed-sdk-release-3.3.1/build/ finoramic-android-sdk/build finoramic-androidx-sdk/build/ diff --git a/app/build.gradle b/app/build.gradle index 7c0961b2ec..585eda455c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -386,7 +386,7 @@ dependencies { implementation 'com.android.support:support-annotations:28.0.0' - implementation project(":neoeyed-sdk-release-3.3.0") + implementation project(":neoeyed-sdk-release-3.3.1") implementation 'com.google.dagger:hilt-android:2.38.1' kapt 'com.google.dagger:hilt-compiler:2.38.1' diff --git a/app/libs/neoeyed-sdk-release-3.3.0.aar b/app/libs/neoeyed-sdk-release-3.3.0.aar deleted file mode 100644 index 414b3c7a86ad966f5000b7746ceebd59f15743bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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 diff --git a/app/libs/neoeyed-sdk-release-3.3.1.aar b/app/libs/neoeyed-sdk-release-3.3.1.aar new file mode 100644 index 0000000000000000000000000000000000000000..39ec2ec568dfdbd974894d1a25f3fd62638699a3 GIT binary patch literal 41709 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build.gradle b/neoeyed-sdk-release-3.3.0/build.gradle deleted file mode 100644 index 9027cec9ec..0000000000 --- a/neoeyed-sdk-release-3.3.0/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -configurations.maybeCreate("default") -artifacts.add("default", file('neoeyed-sdk-release-3.3.0.aar')) \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.0/neoeyed-sdk-release-3.3.0.aar b/neoeyed-sdk-release-3.3.0/neoeyed-sdk-release-3.3.0.aar deleted file mode 100644 index 414b3c7a86ad966f5000b7746ceebd59f15743bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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 diff --git a/neoeyed-sdk-release-3.3.1/build.gradle b/neoeyed-sdk-release-3.3.1/build.gradle new file mode 100644 index 0000000000..cf7115a05a --- /dev/null +++ b/neoeyed-sdk-release-3.3.1/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file('neoeyed-sdk-release-3.3.1.aar')) \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.1/neoeyed-sdk-release-3.3.1.aar b/neoeyed-sdk-release-3.3.1/neoeyed-sdk-release-3.3.1.aar new file mode 100644 index 0000000000000000000000000000000000000000..39ec2ec568dfdbd974894d1a25f3fd62638699a3 GIT binary patch literal 41709 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 literal 0 HcmV?d00001 diff --git a/settings.gradle b/settings.gradle index a9abaa33b2..a4067d8a0b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ include ':app', ':digio-esign-v2.8.0', ':digio-kyc-1.0.13', ':pulse' -include ':neoeyed-sdk-release-3.3.0' +include ':neoeyed-sdk-release-3.3.1' include ':finoramic-androidx-sdk' rootProject.name='android-customer-app' From 01e54da32adc13256407234351c0c5c418e37680 Mon Sep 17 00:00:00 2001 From: shankar-yadav Date: Thu, 14 Oct 2021 16:56:43 +0530 Subject: [PATCH 09/53] OTP before Disbursements : Max OTP reached UI --- .../com/naviapp/common/fragment/OtpBottomSheet.kt | 10 +++++++--- .../naviapp/common/viewmodel/OtpSharedViewModel.kt | 12 ++++++++---- .../com/naviapp/common/viewmodel/OtpViewModel.kt | 4 ++++ .../getloan/summary/fragments/SummaryFragment.kt | 5 +++++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt b/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt index c51355f6ae..d4ed0e3038 100644 --- a/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt +++ b/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt @@ -156,10 +156,8 @@ class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { } ApiErrorTagType.MAX_OTP_ATTEMPTS -> { analyticsEventTracker.onOtpMaxAttempts() - binding.errorMsgOtpTv.text = resources.getString(R.string.otp_max_attempt) binding.verifyOtpBtn.setState(false) - binding.resendOtpTv.visibility = View.INVISIBLE - binding.countdownTimerTv.visibility = View.INVISIBLE + safelyDismissDialog() } ApiErrorTagType.SOMETHING_WENT_WRONG -> { binding.errorMsgOtpTv.text = resources.getString(R.string.something_went_wrong) @@ -279,6 +277,12 @@ class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { }.start() } + override fun onDestroy() { + super.onDestroy() + viewModel.resetData() + otpSharedViewModel?.resetData() + } + override val screenName: String get() = arguments?.getString(KEY_SCREEN_NAME) ?: NaviAnalytics.OTP_BOTTOM_SHEET diff --git a/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt b/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt index 37f686d92e..98069d104c 100644 --- a/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt +++ b/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt @@ -44,8 +44,10 @@ class OtpSharedViewModel(private val repository: OtpRepository = OtpRepository() ApiConstants.API_WRONG_OTP -> _errorVerifyOtp.value = ApiErrorTagType.OTP_WRONG ApiConstants.API_EXPIRED_OTP -> _errorVerifyOtp.value = ApiErrorTagType.OTP_EXPIRED - ApiConstants.API_TOO_MANY_REQUESTS -> _errorVerifyOtp.value = - ApiErrorTagType.MAX_OTP_ATTEMPTS + ApiConstants.API_TOO_MANY_REQUESTS -> { + _errorVerifyOtp.value = ApiErrorTagType.MAX_OTP_ATTEMPTS + setErrorData(response.errors, response.error) + } else -> { _errorVerifyOtp.value = ApiErrorTagType.SOMETHING_WENT_WRONG setErrorData(response.errors, response.error) @@ -64,8 +66,10 @@ class OtpSharedViewModel(private val repository: OtpRepository = OtpRepository() ApiConstants.API_WRONG_OTP -> _errorVerifyOtp.value = ApiErrorTagType.OTP_WRONG ApiConstants.API_EXPIRED_OTP -> _errorVerifyOtp.value = ApiErrorTagType.OTP_EXPIRED - ApiConstants.API_TOO_MANY_REQUESTS -> _errorVerifyOtp.value = - ApiErrorTagType.MAX_OTP_ATTEMPTS + ApiConstants.API_TOO_MANY_REQUESTS -> { + _errorVerifyOtp.value = ApiErrorTagType.MAX_OTP_ATTEMPTS + setErrorData(response.errors, response.error) + } else -> { _errorVerifyOtp.value = ApiErrorTagType.SOMETHING_WENT_WRONG setErrorData(response.errors, response.error) diff --git a/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt b/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt index 71af6f99ba..130d33ae68 100644 --- a/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt +++ b/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt @@ -34,4 +34,8 @@ class OtpViewModel(private val repository: OtpRepository = OtpRepository()) : Ba } } } + + fun resetData() { + _sendOtpResponse.value = null + } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt index 7cb2fc9910..b857d77e9c 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt @@ -419,4 +419,9 @@ class SummaryFragment : BaseFragment(), View.OnClickListener, CtaListener, } } } + + override fun onDestroy() { + super.onDestroy() + otpSharedViewModel?.resetData() + } } From ab4cf6726b95d19707f3ac9082db2f65ba33f7bb Mon Sep 17 00:00:00 2001 From: satish_p Date: Fri, 15 Oct 2021 12:51:10 +0530 Subject: [PATCH 10/53] release 2.0.4 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4a549b9fb1..a3180e118b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ kapt { correctErrorTypes true } -def VERSION_NAME = "2.0.3" +def VERSION_NAME = "2.0.4" android { compileSdkVersion 29 @@ -42,7 +42,7 @@ android { applicationId "com.naviapp" minSdkVersion 21 targetSdkVersion 29 - versionCode 79 + versionCode 80 versionName VERSION_NAME multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 833b21f7a4efee6b54a1012a0dfb7a02884f4b63 Mon Sep 17 00:00:00 2001 From: shankar yadav Date: Fri, 15 Oct 2021 13:05:36 +0530 Subject: [PATCH 11/53] Fix AMC success event (#1656) --- .../ui/kyc/activities/KycWebViewActivity.kt | 4 ++++ .../ui/kyc/fragments/AadhaarEsignFragment.kt | 3 +++ .../ui/kyc/fragments/BankVerificationFragment.kt | 7 +++++-- .../investorapp/ui/kyc/fragments/NomineeFragment.kt | 10 +++++++--- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/activities/KycWebViewActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/activities/KycWebViewActivity.kt index af94608aff..febb6ee0e7 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/activities/KycWebViewActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/activities/KycWebViewActivity.kt @@ -13,6 +13,7 @@ import android.webkit.* import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider +import com.navi.amc.investorapp.constants.Constant.IS_FROM_NON_KYC import androidx.lifecycle.lifecycleScope import com.navi.amc.investorapp.R import com.navi.amc.investorapp.constants.Constant @@ -23,6 +24,7 @@ import com.navi.amc.investorapp.extension.showSnackBar import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter import com.navi.amc.investorapp.ui.activity.WebViewViewModel +import com.navi.amc.investorapp.util.orFalse import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -103,11 +105,13 @@ class KycWebViewActivity : AppCompatActivity() { handler.removeCallbacks(runnable) gotoFinish(Intent(this, KycActivity::class.java).apply { putExtra(Constant.STATUS, Constant.ADD_NOMINEE) + putExtra(IS_FROM_NON_KYC, intent.getBooleanExtra(IS_FROM_NON_KYC, false).orFalse()) }) } else if (its.status == "failed") { handler.removeCallbacks(runnable) gotoFinish(Intent(this, KycActivity::class.java).apply { putExtra(Constant.STATUS, Constant.AADHAAR_ESIGN) + putExtra(IS_FROM_NON_KYC, intent.getBooleanExtra(IS_FROM_NON_KYC, false).orFalse()) }) } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/AadhaarEsignFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/AadhaarEsignFragment.kt index 4d25c9a16a..4618944355 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/AadhaarEsignFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/AadhaarEsignFragment.kt @@ -7,6 +7,7 @@ import android.view.View import com.navi.amc.investorapp.R import com.navi.amc.investorapp.base.BaseFragment import com.navi.amc.investorapp.constants.AnalyticsConstant +import com.navi.amc.investorapp.constants.Constant.IS_FROM_NON_KYC import com.navi.amc.investorapp.constants.EXTRA_KYC import com.navi.amc.investorapp.constants.EXTRA_URL import com.navi.amc.investorapp.databinding.FragmentAadhaarEsignBinding @@ -18,6 +19,7 @@ import com.navi.amc.investorapp.ui.kyc.listeners.FragmentInterchangeListener import com.navi.amc.investorapp.ui.kyc.listeners.HeaderInteractionListener import com.navi.amc.investorapp.ui.kyc.viewmodel.AadhaarEsignVM import com.navi.amc.investorapp.util.IconUtils +import com.navi.amc.investorapp.util.orFalse class AadhaarEsignFragment : BaseFragment(), View.OnClickListener { @@ -85,6 +87,7 @@ class AadhaarEsignFragment : ).apply { putExtra(EXTRA_KYC, true) putExtra(EXTRA_URL, viewModel.fetchResponse.value?.url) + putExtra(IS_FROM_NON_KYC, arguments?.getBoolean(IS_FROM_NON_KYC).orFalse()) }) } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt index 65c15320d1..fb4740776b 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt @@ -106,10 +106,13 @@ class BankVerificationFragment : if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC).orFalse()) { fragmentInterchangeListener?.navigateToNextScreen( Constant.ADD_NOMINEE, - arguments ?: Bundle.EMPTY + arguments ?: Bundle() ) } else { - fragmentInterchangeListener?.navigateToNextScreen(Constant.AADHAAR_ESIGN) + fragmentInterchangeListener?.navigateToNextScreen( + Constant.AADHAAR_ESIGN, + arguments ?: Bundle() + ) } } else if (it.status == "FAILED") { binding.iconIv.visibility = View.VISIBLE diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/NomineeFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/NomineeFragment.kt index cdfbf012bd..511dbf6ea3 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/NomineeFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/NomineeFragment.kt @@ -108,7 +108,8 @@ class NomineeFragment : viewModel.response.observe(viewLifecycleOwner, { if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC).orFalse()) { fragmentInterchangeListener?.navigateToNextScreen( - Constant.CONGRATULATION) + Constant.CONGRATULATION, arguments ?: Bundle() + ) } else { viewModel.fetchKycStatus(sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString()) } @@ -116,7 +117,8 @@ class NomineeFragment : viewModel.kycStatus.observe(viewLifecycleOwner, { if (it.status == "KYC_SUBMITTED") { fragmentInterchangeListener?.navigateToNextScreen( - Constant.CONGRATULATION, arguments ?: Bundle()) + Constant.CONGRATULATION, arguments ?: Bundle() + ) } else { binding.root.showSnackBar("Please check it again") } @@ -243,5 +245,7 @@ class NomineeFragment : } override val screenName: String - get() = if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC).orFalse()) AnalyticsConstant.NomineeNonKyc else AnalyticsConstant.NomineeKyc + get() = if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC) + .orFalse() + ) AnalyticsConstant.NomineeNonKyc else AnalyticsConstant.NomineeKyc } \ No newline at end of file From 7e7e8b0d9428454a4a361ef0ce8da208cf827298 Mon Sep 17 00:00:00 2001 From: shankar-yadav Date: Mon, 18 Oct 2021 21:00:51 +0530 Subject: [PATCH 12/53] fix multiple bottom sheet issue --- .../main/java/com/naviapp/common/fragment/OtpBottomSheet.kt | 6 ++++-- .../java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt | 1 + .../main/java/com/naviapp/common/viewmodel/OtpViewModel.kt | 1 + .../getloan/summary/fragments/SummaryFragment.kt | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt b/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt index d4ed0e3038..9dd7c7da6b 100644 --- a/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt +++ b/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt @@ -9,6 +9,7 @@ import android.view.WindowManager import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import com.google.android.gms.auth.api.phone.SmsRetriever +import com.navi.common.sharedpref.PreferenceManager import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.customview.BaseBottomSheet @@ -21,7 +22,6 @@ import com.naviapp.models.request.SendOtpForDisbursementRequest import com.naviapp.network.ApiErrorTagType import com.naviapp.receiver.OtpReceiveListener import com.naviapp.receiver.SmsAutoReadReceiver -import com.navi.common.sharedpref.PreferenceManager import com.naviapp.utils.* class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { @@ -56,7 +56,9 @@ class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { private fun initError() { initError(viewModel) otpSharedViewModel?.let { - initError(it) + if (!it.errorResponse.hasActiveObservers()) { + initError(it) + } } } diff --git a/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt b/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt index 98069d104c..0e4ed3970d 100644 --- a/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt +++ b/app/src/main/java/com/naviapp/common/viewmodel/OtpSharedViewModel.kt @@ -83,5 +83,6 @@ class OtpSharedViewModel(private val repository: OtpRepository = OtpRepository() _apiTimeout.value = null _errorVerifyOtp.value = null _verifyOtpResponse.value = null + errorResponse.value = null } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt b/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt index 130d33ae68..65315934d5 100644 --- a/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt +++ b/app/src/main/java/com/naviapp/common/viewmodel/OtpViewModel.kt @@ -37,5 +37,6 @@ class OtpViewModel(private val repository: OtpRepository = OtpRepository()) : Ba fun resetData() { _sendOtpResponse.value = null + errorResponse.value = null } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt index b857d77e9c..9b15138953 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/summary/fragments/SummaryFragment.kt @@ -380,6 +380,7 @@ class SummaryFragment : BaseFragment(), View.OnClickListener, CtaListener, private fun sendOtp() { eventTracker.onSendOtp() + otpSharedViewModel?.resetData() showLoader() viewModel.sendOtp( SendOtpForDisbursementRequest( From d3dcfda8928c195cbed0e9184de788dfde654831 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 19 Oct 2021 15:32:21 +0530 Subject: [PATCH 13/53] Code refactor --- .../com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index 73624a1cda..0800c24698 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -170,7 +170,7 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() fun updateKycDetails(kycRequest: KycRequest) { coroutineScope.launch { val response = repository.updateKycDetails(kycRequest) - if (response.error == null && response.errors?.isEmpty().orTrue()) { + if (response.error == null && response.errors.isNullOrEmpty()) { _textFieldSubmitAsyncResponse.value = response.data } else { setErrorData( From 4ff293b3b28b8b8fd62a0a07272ee9b000e5e9da Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 19 Oct 2021 15:43:39 +0530 Subject: [PATCH 14/53] Refactor code --- .../getloan/kyc/fragments/KycFragment.kt | 43 +++---------------- .../getloan/kyc/viewmodels/KycVM.kt | 32 ++++++++++++++ 2 files changed, 38 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index 9fb6a91783..83d4e7de0a 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -325,7 +325,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } } - if (!isTextFieldPresent() && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { + if (!viewModel.isTextFieldPresent() && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { binding.footerView.enableNextButton(true) } handleVideoKycDeeplink(kycDetailsResponse.kycDetails?.kycItemList) @@ -1013,37 +1013,6 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } ?: onPANDocumentCaptureError() } - private fun isTextFieldPresent(): Boolean { - var isTextFieldPresent = false - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == TEXTFIELD) { - isTextFieldPresent = true - } - } - return isTextFieldPresent - } - - private fun isCurrentAddressFieldPresent(): Boolean { - var isCurrentAddressFieldPresent = false - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == CURRENT_ADDRESS) { - isCurrentAddressFieldPresent = true - } - } - return isCurrentAddressFieldPresent - } - - private fun getJsonKey(): String { - if (isTextFieldPresent()) { - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == TEXTFIELD) { - return kycItem.jsonKey.toString() - } - } - } - return Constants.EMPTY - } - private fun enableNextButton(s: String) { if (s.isNotEmpty()) { binding.footerView.enableNextButton(true) @@ -1068,13 +1037,13 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - if (isTextFieldPresent() && !fathersNameSubmitSuccess) { + if (viewModel.isTextFieldPresent() && !fathersNameSubmitSuccess) { val hashMap = HashMap() - hashMap[getJsonKey()] = viewModel.textFieldData.value.toString() + hashMap[viewModel.getJsonKey()] = viewModel.textFieldData.value.toString() viewModel.updateKycDetails(KycRequest(null, hashMap)) showLoader() } else { - if (isCurrentAddressFieldPresent()) { + if (viewModel.isCurrentAddressFieldPresent()) { viewModel.fetchKycStatus() } else { ctaData?.url?.let { @@ -1097,10 +1066,10 @@ class KycFragment : BaseFragment(), FooterInteractionListener, const val VIDEO_KYC_REQUEST_CODE = 103 const val AADHAR_OTP_REQUEST_CODE = 104 const val COMPLETED = "COMPLETED" + const val TEXTFIELD = "TEXTFIELD" + const val CURRENT_ADDRESS = "CURRENT_ADDRESS" private const val HYPERVERGE = "HYPERVERGE" private const val PROVIDER_MOCK = "MOCK" - private const val TEXTFIELD = "TEXTFIELD" - private const val CURRENT_ADDRESS = "CURRENT_ADDRESS" private const val VIDEO_KYC_WEB_VIEW_REQUEST_CODE = 11 } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index 0800c24698..06dec77582 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -22,6 +22,7 @@ import com.naviapp.payment.models.ProviderType import com.naviapp.personalloan.getloan.common.view.KycPanView import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter +import com.naviapp.personalloan.getloan.kyc.fragments.KycFragment import com.naviapp.personalloan.getloan.kyc.models.AadhaarDetailsResponse import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData import com.naviapp.personalloan.getloan.kyc.models.KycInReviewResponse @@ -380,6 +381,37 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() return false } + fun getJsonKey(): String { + if (isTextFieldPresent()) { + _kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == KycFragment.TEXTFIELD) { + return kycItem.jsonKey.toString() + } + } + } + return Constants.EMPTY + } + + fun isCurrentAddressFieldPresent(): Boolean { + var isCurrentAddressFieldPresent = false + _kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == KycFragment.CURRENT_ADDRESS) { + isCurrentAddressFieldPresent = true + } + } + return isCurrentAddressFieldPresent + } + + fun isTextFieldPresent(): Boolean { + var isTextFieldPresent = false + _kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == KycFragment.TEXTFIELD) { + isTextFieldPresent = true + } + } + return isTextFieldPresent + } + companion object { private const val KYC = "kyc" private const val KYC_FILE_NAME = "kyc.jpg" From e98f72923ba73589a5c15d4b8267527f61b24a4c Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 19 Oct 2021 16:05:47 +0530 Subject: [PATCH 15/53] Minor change --- .../getloan/kyc/fragments/KycFragment.kt | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index 1ac2f60918..3edb158751 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -1044,23 +1044,19 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == Constants.CURRENT_ADDRESS && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { - if (viewModel.isTextFieldPresent() && !fathersNameSubmitSuccess) { - val hashMap = HashMap() - hashMap[viewModel.getJsonKey()] = viewModel.textFieldData.value.toString() - viewModel.updateKycDetails(KycRequest(null, hashMap)) - showLoader() - } else { - if (viewModel.isCurrentAddressFieldPresent()) { - viewModel.fetchKycStatus() - } else { - ctaData?.url?.let { - listener?.navigateTo( - it - ) - } - } + if (viewModel.isTextFieldPresent() && !fathersNameSubmitSuccess) { + val hashMap = HashMap() + hashMap[viewModel.getJsonKey()] = viewModel.textFieldData.value.toString() + viewModel.updateKycDetails(KycRequest(null, hashMap)) + showLoader() + } else { + if (viewModel.isCurrentAddressFieldPresent()) { + viewModel.fetchKycStatus() + } else { + ctaData?.url?.let { + listener?.navigateTo( + it + ) } } } From 70094e51912cb568ffd81a622bf5e4ba0128f71a Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 19 Oct 2021 17:45:33 +0530 Subject: [PATCH 16/53] Remove fathersNameSubmitSuccess flag --- .../getloan/kyc/fragments/KycFragment.kt | 13 +++++++++---- .../personalloan/getloan/kyc/viewmodels/KycVM.kt | 8 ++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index 3edb158751..a823cea9f7 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -95,7 +95,6 @@ class KycFragment : BaseFragment(), FooterInteractionListener, private var permissionDeniedFragment: PermissionDeniedFragment? = null private var aadhaarVerificationListener: AadhaarVerificationListener? = null private var locationUpdateListener: LocationUpdateListener? = null - private var fathersNameSubmitSuccess = false private lateinit var updateInAppDialog: UpdateInAppDialog @@ -178,6 +177,12 @@ class KycFragment : BaseFragment(), FooterInteractionListener, observeTextFieldSubmitResponse() } + private fun observeFathersNameSubmitSuccess() { + viewModel.fathersNameSubmitSuccess.observeNonNull(this) { + onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) + } + } + private fun observeTextFieldData() { viewModel.textFieldData.observeNonNull(this) { enableNextButton(it) @@ -694,9 +699,9 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } UPDATE_KYC_DETAILS -> { if (TextUtils.equals(status, SUCCESS)) { - fathersNameSubmitSuccess = true + viewModel.setFathersNameSubmitSuccess(true) hideLoader() - onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) + observeFathersNameSubmitSuccess() } } OVD_UPLOAD -> { @@ -1044,7 +1049,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - if (viewModel.isTextFieldPresent() && !fathersNameSubmitSuccess) { + if (viewModel.isTextFieldPresent() && viewModel.fathersNameSubmitSuccess.value != true) { val hashMap = HashMap() hashMap[viewModel.getJsonKey()] = viewModel.textFieldData.value.toString() viewModel.updateKycDetails(KycRequest(null, hashMap)) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index 06dec77582..0a1d5d45ce 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -129,6 +129,10 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() val textFieldSubmitAsyncResponse: LiveData get() = _textFieldSubmitAsyncResponse + private val _fathersNameSubmitSuccess = MutableLiveData() + val fathersNameSubmitSuccess: LiveData + get() = _fathersNameSubmitSuccess + fun submitSelfie(bytes: ByteArray, requestData: SelfieUploadRequestData? = null) { var requestBody: RequestBody? = null convertObjectToJsonString(requestData)?.let { @@ -412,6 +416,10 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() return isTextFieldPresent } + fun setFathersNameSubmitSuccess(fathersNameSubmitSuccess: Boolean) { + _fathersNameSubmitSuccess.value = fathersNameSubmitSuccess + } + companion object { private const val KYC = "kyc" private const val KYC_FILE_NAME = "kyc.jpg" From d5fe941a499c3393c75d2fe396a04a2f58181d7b Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Tue, 19 Oct 2021 17:49:27 +0530 Subject: [PATCH 17/53] Code refactor --- .../naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index a823cea9f7..575aec8a0d 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -1025,8 +1025,8 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } ?: onPANDocumentCaptureError() } - private fun enableNextButton(s: String) { - if (s.isNotEmpty()) { + private fun enableNextButton(textField: String) { + if (textField.isNotEmpty()) { binding.footerView.enableNextButton(true) } else { binding.footerView.enableNextButton(false) From 7aa8312237496ee52b0d86747891edecc21e870e Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Wed, 20 Oct 2021 14:06:47 +0530 Subject: [PATCH 18/53] AMC - UI fixes --- navi-amc/src/main/AndroidManifest.xml | 32 +-- .../com/navi/amc/investorapp/response/Fund.kt | 18 +- .../response/ResponseKycDocuments.kt | 33 +++ .../investorapp/retrofit/ApiErrorHandler.kt | 2 + .../navi/amc/investorapp/retrofit/ApiUtils.kt | 32 ++- .../investorapp/retrofit/ServicesInterface.kt | 5 +- .../sharedpreference/SharedPreferencesKeys.kt | 7 +- .../investorapp/ui/home/HomeScreenFragment.kt | 98 +++++---- .../investorapp/ui/investment/MySipAdapter.kt | 4 +- .../ui/investment/SellMyFundActivity.kt | 47 ++-- .../ui/kyc/fragments/BankDetailsFragment.kt | 28 ++- .../ui/kyc/viewmodel/BankDetailsVM.kt | 19 +- .../ui/mutual_fund/MutualFundActivity.kt | 68 +++++- .../OtpVerificationActivity.kt | 40 +++- .../OtpVerificationViewModel.kt | 5 +- .../ui/panCard/VerifyPanCardActivity.kt | 53 ++++- .../ui/setup_account/KycDocumentsActivity.kt | 89 ++++++++ .../setup_account/MyDocumentsListAdapter.kt | 42 ++++ .../setup_account/SetupYouAcountViewModel.kt | 10 +- .../ui/setup_account/SetupYourActivity.kt | 18 -- .../amc/investorapp/ui/sip/SipActivity.kt | 10 +- .../amc/investorapp/ui/sip/SipViewModel.kt | 4 +- .../navi/amc/investorapp/util/IconUtils.kt | 2 + .../main/res/drawable/bg_rectangle_f5f5f5.xml | 14 ++ .../main/res/drawable/ic_kyc_documents.xml | 19 ++ .../src/main/res/drawable/yellow_line_png.png | Bin 0 -> 1059 bytes .../res/layout/activity_kyc_documents.xml | 123 +++++++++++ .../res/layout/activity_otp_verification.xml | 4 +- .../res/layout/activity_payment_sucess.xml | 24 ++- .../res/layout/activity_redemption_order.xml | 4 +- .../main/res/layout/activity_sell_my_fund.xml | 4 +- .../main/res/layout/activity_setupyour.xml | 15 +- navi-amc/src/main/res/layout/activity_sip.xml | 15 +- .../main/res/layout/activity_sippayment.xml | 13 +- .../res/layout/activity_verify_pan_card.xml | 7 +- .../main/res/layout/fragment_home_screen.xml | 7 +- .../src/main/res/layout/layout_holdings.xml | 32 +-- .../res/layout/layout_kyc_documents_list.xml | 57 +++++ .../main/res/layout/mflisting_rec_design.xml | 166 +++++++------- .../main/res/layout/mutualfund_activity.xml | 203 ++++++++++++++++-- .../main/res/layout/view_progress_header.xml | 7 +- 41 files changed, 1052 insertions(+), 328 deletions(-) create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt create mode 100644 navi-amc/src/main/res/drawable/bg_rectangle_f5f5f5.xml create mode 100644 navi-amc/src/main/res/drawable/ic_kyc_documents.xml create mode 100644 navi-amc/src/main/res/drawable/yellow_line_png.png create mode 100644 navi-amc/src/main/res/layout/activity_kyc_documents.xml create mode 100644 navi-amc/src/main/res/layout/layout_kyc_documents_list.xml diff --git a/navi-amc/src/main/AndroidManifest.xml b/navi-amc/src/main/AndroidManifest.xml index 306660605c..0b0974b6cc 100644 --- a/navi-amc/src/main/AndroidManifest.xml +++ b/navi-amc/src/main/AndroidManifest.xml @@ -15,6 +15,9 @@ android:hardwareAccelerated="true" android:largeHeap="true" android:supportsRtl="true"> + @@ -134,35 +137,6 @@ - \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt index 334bd371d6..b09523f25e 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt @@ -73,5 +73,19 @@ data class Fund( val ter: Double? = null, @SerializedName("type") - val type: String? = null -) \ No newline at end of file + val type: String? = null, + + @SerializedName("cagr") + var cagr: CAGR? = null, +) { + data class CAGR( + @SerializedName("max") + var max: String? = "", // 03.99% + @SerializedName("1") + var x1: String? = "", // NA + @SerializedName("3") + var x3: String? = "", // NA + @SerializedName("5") + var x5: String? = "" // NA + ) +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt new file mode 100644 index 0000000000..eb5a8812b8 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt @@ -0,0 +1,33 @@ +package com.navi.amc.investorapp.response + + +import androidx.annotation.Keep +import com.google.gson.annotations.SerializedName + +@Keep +data class ResponseKycDocuments( + @SerializedName("cta") + var cta: Cta? = null, + @SerializedName("documents") + var documents: ArrayList? = ArrayList(), + @SerializedName("iconCode") + var iconCode: String? = "", // ICON_DOCUMENT + @SerializedName("title") + var title: String? = "" // Keep the following documents handy +) { + data class Cta( + @SerializedName("title") + var title: String? = "", // Continue + @SerializedName("url") + var url: String? = "" // KYC + ) + + data class Document( + @SerializedName("iconCode") + var iconCode: String? = "", // ICON_PAN + @SerializedName("subTitle") + var subTitle: String? = "", // To upload the image of PAN Card + @SerializedName("title") + var title: String? = ""// PAN Card + ) +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt index ced38c886d..dbb3177cf8 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt @@ -7,6 +7,7 @@ import retrofit2.Converter import retrofit2.HttpException import retrofit2.Response import java.net.SocketTimeoutException +import java.net.UnknownHostException object ApiErrorHandler { @@ -16,6 +17,7 @@ object ApiErrorHandler { exception.printStackTrace() return when (exception) { is HttpException -> handleHttpException(exception) + is UnknownHostException -> "Internet Connection issue, Please check your internet connection" is SocketTimeoutException -> "Socket Timeout Exception" else -> "Something went wrong" } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt index cff7eaeeb1..a7a0575167 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt @@ -224,21 +224,20 @@ object ApiUtils { withContext(Dispatchers.Main) { p1(e) } } } - suspend fun submitBankDetails( accessToken: String, bankDetails: BankDetails, p0: (KycBaseResponse) -> Unit, - p1: (String) -> Unit + p1: (Exception) -> Unit ) { - val response = amcService.submitBankDetails( - accessToken, - bankDetails - ) - if (response.isSuccessful) { - withContext(Dispatchers.Main) { p0(response.body()!!) } - } else { - withContext(Dispatchers.Main) { p1(response.errorBody()?.toString().orEmpty()) } + try { + val response = amcService.submitBankDetails( + accessToken, + bankDetails + ) + withContext(Dispatchers.Main) { p0(response) } + } catch (e: Exception) { + withContext(Dispatchers.Main) { p1(e) } } } @@ -979,6 +978,19 @@ object ApiUtils { } } + suspend fun hitKycDocumentsApi( + p0: (ResponseKycDocuments) -> Unit, + p1: (Exception) -> Unit + ) { + try { + val response = amcService.hitKycDocumentsApi() + withContext(Dispatchers.Main) { p0(response) } + } catch (e: Exception) { + withContext(Dispatchers.Main) { p1(e) } + } + } + + fun logOut(context: Context) { SharedPreferencesWriter.getInstance(context) .clearPreferenceValues() diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt index 68bc684f38..3196992ec2 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt @@ -96,7 +96,7 @@ interface ServicesInterface { suspend fun submitBankDetails( @Header("x-amc-access-token") accessToken: String, @Body bankDetails: BankDetails - ): Response + ): KycBaseResponse @GET("/amc-core/api/investor/v1/bank-details/{ifscCode}") suspend fun submitIFSCData( @@ -376,4 +376,7 @@ interface ServicesInterface { @Body refreshToken: RefreshBeam ): RefreshResponse + @GET("amc-core/api/static/kyc/promptitems.json") + suspend fun hitKycDocumentsApi( + ): ResponseKycDocuments } \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt index 20fc936b86..12e84133ad 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt @@ -35,4 +35,9 @@ object SharedPreferencesKeys { const val GENDER_LABEL = "GENDER" const val FATHER_NAME = "FATHER_NAME" const val MARTIAL_STATUS = "MARITAL_STATUS" - const val RESIDENTIAL_STATUS = "RESIDENTIAL_STATUS"} \ No newline at end of file + const val RESIDENTIAL_STATUS = "RESIDENTIAL_STATUS" + const val ASK_OPTIONS = "ASK_OPTIONS" + const val OPTIONS_MOBILE = "OPTIONS_MOBILE" + const val CURRENT_TIME = "CURRENT_TIME" + const val FIRST_TIME = "FIRST_TIME" +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt index 92282f8fa6..2868dd28a7 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt @@ -31,10 +31,13 @@ import com.navi.amc.investorapp.ui.investment.MyInvestmentActivity import com.navi.amc.investorapp.ui.kyc.activities.KycActivity import com.navi.amc.investorapp.ui.mutual_fund.MFListingActivity import com.navi.amc.investorapp.ui.mutual_fund.MutualFundActivity +import com.navi.amc.investorapp.ui.otpVerification.OtpVerificationActivity import com.navi.amc.investorapp.ui.panCard.VerifyPanCardActivity import com.navi.amc.investorapp.ui.personalDetails.AboradErrorActivity import com.navi.amc.investorapp.ui.profile.MyLumpsumOrdersAdapter +import com.navi.amc.investorapp.ui.setup_account.KycDocumentsActivity import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity +import com.navi.amc.investorapp.util.orFalse import com.navi.amc.investorapp.utils.DateUtils import com.navi.analytics.utils.NaviTrackEvent import com.navi.common.deeplink.DeepLinkManager @@ -43,8 +46,6 @@ import com.navi.common.model.CtaData import com.navi.common.utils.Constants class HomeScreenFragment : BaseFragment() { - - var status: String? = null var isin: String? = null var sipAmount: Double? = null @@ -118,35 +119,56 @@ class HomeScreenFragment : BaseFragment { - requireActivity().goto(KycActivity::class.java) + requireActivity().goto(KycDocumentsActivity::class.java) } - R.id.ivProgressDownArrow -> { pendingOrderCounter++ if (pendingOrderCounter == 1) { @@ -240,19 +260,16 @@ class HomeScreenFragment : BaseFragment with(binding) { - NaviTrackEvent.setUserAttributes( name = its.name, phoneNumber = its.mobile, email = its.email, gender = its.gender ) - sharedPreferences.writeStringValue( SharedPreferencesKeys.ON_BOARDING_STATUS, its.status ) - if (its.status == Constant.ONBOARDED) { binding.isLogin = false @@ -309,19 +326,15 @@ class HomeScreenFragment : BaseFragment redeemAmount.toDouble()) { + } else if (amountTotal.getString().toDouble() > redeemAmount) { root.showSnackBar("Redeemable Amount cannot be more than maximum redeemable amount") return false } @@ -244,33 +246,17 @@ class SellMyFundActivity : BaseActivity { - - } - R.id.stayInvestedBtn -> { - - } } }) viewModel.responseOTP.observe(this, { it.let { its -> + this.transactionId = its.transactionId.toString() with(binding) { hideProgressAtTime() - transactionId = its.transactionId.toString() disableUI() isOtpVerifyPage = true startTimer() -// goto(Intent(this@SellMyFundActivity, SellMyFundOTPActivity::class.java).apply { -// putExtra(EXTRA_FLAG, its.transactionId) -// putExtra(EXTRA_DATA, folioNumber) -// putExtra(EXTRA_ID, isin) -// val amount = amountTotal.getString() -// putExtra(EXTRA_FROM, amount.toDouble()) -// putExtra("FUND_NAME", fundNameSelected) -// putExtra("REDEEM_TIME", redeemTime) -// }) - } } }) @@ -278,7 +264,7 @@ class SellMyFundActivity : BaseActivity with(binding) { - minRedeemAmount = its.minRedeemAmount + minRedeemAmount = its.minRedeemAmount.orZero() minInvestmentText.text = "${getString(R.string.min_redeemable_rupees)} ${its.minRedeemAmount.toString()}" timeRedemption.text = @@ -289,7 +275,7 @@ class SellMyFundActivity : BaseActivity= 4) bankNumber.substring( @@ -302,9 +288,10 @@ class SellMyFundActivity : BaseActivity - transactionId = its.transactionId.toString() + this.transactionId = its.transactionId.toString() binding.root.showSnackBar("Otp resend") startTimer() + clearOtp() } }) @@ -350,6 +337,13 @@ class SellMyFundActivity : BaseActivity { - if (isValidDetails()) { - val accessToken = - sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() - val bankDetails = BankDetails( - ifscCode = binding.ifscEv.text.toString().trim(), - bankName = binding.bankNameEv.text.toString(), - accountNumber = binding.accountNoEv.text.toString().trim(), - ) - viewModel.submitData(accessToken, bankDetails) + if (context?.let { checkInternetSnackBar(it, binding.root) } == true) { + if (isValidDetails()) { + val accessToken = + sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() + val bankDetails = BankDetails( + ifscCode = binding.ifscEv.text.toString().trim(), + bankName = binding.bankNameEv.text.toString(), + accountNumber = binding.accountNoEv.text.toString().trim(), + ) + viewModel.submitData(accessToken, bankDetails) + } } } R.id.bank_name_ev -> { @@ -311,7 +313,9 @@ class BankDetailsFragment : private fun submitIFSCData(ifscCode: String) { val accessToken = sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() - viewModel.submitIFSCData(accessToken, ifscCode) + if (context?.let { checkInternetSnackBar(it, binding.root) } == true) { + viewModel.submitIFSCData(accessToken, ifscCode) + } } private fun sendEvent() { @@ -326,5 +330,7 @@ class BankDetailsFragment : } override val screenName: String - get() = if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC).orFalse()) AnalyticsConstant.NonKycBankDetailsScreen else AnalyticsConstant.KycBankDetailsScreen + get() = if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC) + .orFalse() + ) AnalyticsConstant.NonKycBankDetailsScreen else AnalyticsConstant.KycBankDetailsScreen } \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt index 6e39ff6dab..97dc6fa1a0 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt @@ -12,6 +12,7 @@ import com.navi.amc.investorapp.ui.kyc.model.BankDetails import com.navi.amc.investorapp.ui.kyc.model.KycBaseResponse import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import retrofit2.HttpException class BankDetailsVM : BaseViewModel() { @@ -39,10 +40,15 @@ class BankDetailsVM : BaseViewModel() { ApiUtils.submitBankDetails(accessToken, bankDetails, { _response.value = it hideProgress() - }) { + }, { hideProgress() - showError(ApiErrorHandler.handleErrorException(it)) - } + val message = ApiErrorHandler.handleException(it) + if (message.isNullOrEmpty() || (it as HttpException).code() == 500) { + showError("Something went wrong, please try again") + } else { + showError(message) + } + }) } } @@ -53,9 +59,12 @@ class BankDetailsVM : BaseViewModel() { _ifscResponse.value = it hideProgress() }) { - _ifscResponse.value = BankDetails(bankName = "") hideProgress() - showError("Please enter valid ifsc") + if ((it as HttpException).message().isNullOrEmpty()) { + showError("Please enter valid ifsc") + } else { + hideProgressAndShowError(it) + } } } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt index 0c1afae9e4..35916d897e 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt @@ -16,9 +16,7 @@ import com.navi.amc.investorapp.constants.Constant import com.navi.amc.investorapp.constants.Constant.NAVI_NIFTY_INDEX_ISIN import com.navi.amc.investorapp.constants.EXTRA_ID import com.navi.amc.investorapp.databinding.MutualfundActivityBinding -import com.navi.amc.investorapp.extension.goto -import com.navi.amc.investorapp.extension.showToast -import com.navi.amc.investorapp.extension.statusBarTransparent +import com.navi.amc.investorapp.extension.* import com.navi.amc.investorapp.listener.AMCAdapterClickListener import com.navi.amc.investorapp.navigator.NaviAmcDeeplinkNavigator import com.navi.amc.investorapp.response.Fund @@ -36,6 +34,8 @@ import kotlinx.android.synthetic.main.mutualfund_activity.* class MutualFundActivity : BaseActivity() { + private var cagr: Fund.CAGR? = null + var stampedCount: Int = 0 var investmentCount: Int = 0 var schemaCount: Int = 0 @@ -245,6 +245,35 @@ class MutualFundActivity : BaseActivity { openSchemaLink() } + R.id.firstYear -> { + if (!cagr?.x1.isNullOrEmpty()) { + setCAGRData(cagr?.x1, 1) + } else { + setCAGRData("", 1) + } + } + R.id.thirdYear -> { + if (!cagr?.x3.isNullOrEmpty()) { + setCAGRData(cagr?.x3, 3) + } else { + setCAGRData("", 3) + } + + } + R.id.fifthYear -> { + if (!cagr?.x5.isNullOrEmpty()) { + setCAGRData(cagr?.x5, 5) + } else { + setCAGRData("", 5) + } + } + R.id.maxYear -> { + if (!cagr?.max.isNullOrEmpty()) { + setCAGRData(cagr?.max, 0) + } else { + setCAGRData("", 0) + } + } } }) @@ -260,6 +289,36 @@ class MutualFundActivity : BaseActivity { + firstYear1.visible() + thirdYear1.gone() + fifthYear1.gone() + maxYear1.gone() + } + 3 -> { + thirdYear1.visible() + firstYear1.gone() + fifthYear1.gone() + maxYear1.gone() + } + 5 -> { + fifthYear1.visible() + firstYear1.gone() + thirdYear1.gone() + maxYear1.gone() + } + 0 -> { + maxYear1.visible() + thirdYear1.gone() + firstYear1.gone() + fifthYear1.gone() + } + } + } + private fun openSchemaLink() { if (scheme_info_link != null) { val intent = Intent(Intent.ACTION_VIEW) @@ -294,7 +353,8 @@ class MutualFundActivity : BaseActivity= 4) numb.substring( numb.length - 4 ) else "" @@ -148,7 +156,7 @@ class OtpVerificationActivity : binding.isOtpTimer = false if (isPanMobile) { viewModel.hitReSentOTPPanVerifyApi( - sharedPreferences.getString(SharedPreferencesKeys.MOBILE) + sharedPreferences.getString(SharedPreferencesKeys.OPTIONS_MOBILE) .toString(), true ) @@ -191,7 +199,29 @@ class OtpVerificationActivity : } }) + viewModel.responsePanMobileOTP.observe(this, { + it.let { its -> + sharedPreferences.writeStringValue( + SharedPreferencesKeys.ON_BOARDING_STATUS, + its.investor?.status + ) + var com = sharedPreferences.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT) + com?.investor = its.investor + sharedPreferences.writeObjectValue( + SharedPreferencesKeys.COMMON_RESPONSE_OBJECT, + com!! + ) + sharedPreferences.writeBooleanInt( + SharedPreferencesKeys.ASK_OPTIONS, + false + ) + Log.e("status", "" + its.investor?.status) + + // gotoNewTask(HomeActivity::class.java) + gotoNewTask(SetupYourActivity::class.java) + } + }) viewModel.errorresponse.observe(this, { it.let { its -> @@ -217,7 +247,11 @@ class OtpVerificationActivity : SharedPreferencesKeys.TRANSACTION_ID, its?.transactionId ) - binding.otpRoot.showSnackBar("Otp resend") + binding.otpRoot.showSnackBar( + "Otp sent to " + sharedPreferences.getString( + SharedPreferencesKeys.OPTIONS_MOBILE + ) + ) startTimer() } }) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt index 63134b2a97..28cf527306 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt @@ -41,6 +41,9 @@ class OtpVerificationViewModel : BaseViewModel() { private val _responsePanOTP = MutableLiveData() val responsePanOTP: LiveData = _responsePanOTP + private val _responsePanMobileOTP = MutableLiveData() + val responsePanMobileOTP: LiveData = _responsePanMobileOTP + var isResend: Boolean? = false @@ -106,7 +109,7 @@ class OtpVerificationViewModel : BaseViewModel() { ) viewModelScope.launch(Dispatchers.IO) { ApiUtils.panMobileVerify(userData, accessToken, { - _response.value = it + _responsePanMobileOTP.value = it hideProgress() }, { _errorresponse.value=it diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt index b176ae93e2..e29e6eb58e 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt @@ -1,5 +1,6 @@ package com.navi.amc.investorapp.ui.panCard +import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher @@ -22,10 +23,12 @@ import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys.MARTIAL_S import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys.RESIDENTIAL_STATUS import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter import com.navi.amc.investorapp.ui.home.HomeActivity -import com.navi.amc.investorapp.ui.kyc.activities.KycActivity +import com.navi.amc.investorapp.ui.otpVerification.OtpVerificationActivity import com.navi.amc.investorapp.ui.personalDetails.AboutIncomeActivity +import com.navi.amc.investorapp.ui.setup_account.KycDocumentsActivity import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity import com.navi.amc.investorapp.util.initDobListeners +import com.navi.amc.investorapp.util.orFalse import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.* @@ -263,11 +266,22 @@ class VerifyPanCardActivity : BaseActivity - analyticsEventTracker.onPanVerified() sharedPreferences.writeStringValue( SharedPreferencesKeys.ON_BOARDING_STATUS, its.investor?.status ) + its.options?.let { it -> + sharedPreferences.writeStringValue( + SharedPreferencesKeys.OPTIONS_MOBILE, + its.options!![0].mobile + ).toString() + sharedPreferences.writeBooleanInt( + SharedPreferencesKeys.ASK_OPTIONS, + true + ) + + } + its.personalDetailsToAsk?.let { it -> if (it.contains(EMAIL)) { sharedPreferences.writeBooleanInt( @@ -305,13 +319,28 @@ class VerifyPanCardActivity : BaseActivity, @@ -353,12 +382,20 @@ class VerifyPanCardActivity : BaseActivity { + if (sharedPreferences.getBoolean( + SharedPreferencesKeys.ASK_OPTIONS, + false + ) + .orFalse() - gotoFinish(VerifyPanLoaderScreen::class.java) + ) { + gotoFinish(SetupYourActivity::class.java) + } else { + gotoFinish(VerifyPanLoaderScreen::class.java) + } } - Constant.KYC_NON_COMPLIANT -> { - gotoFinish(KycActivity::class.java) + gotoFinish(KycDocumentsActivity::class.java) } Constant.BASIC_DETAILS_UPDATED -> { @@ -385,7 +422,7 @@ class VerifyPanCardActivity : BaseActivity { - gotoFinish(KycActivity::class.java) + gotoFinish(KycDocumentsActivity::class.java) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt new file mode 100644 index 0000000000..f8ba454126 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt @@ -0,0 +1,89 @@ +package com.navi.amc.investorapp.ui.setup_account + +import android.os.Bundle +import com.navi.amc.investorapp.R +import com.navi.amc.investorapp.base.BaseActivity +import com.navi.amc.investorapp.databinding.ActivityKycDocumentsBinding +import com.navi.amc.investorapp.extension.checkInternetSnackBar +import com.navi.amc.investorapp.extension.goto +import com.navi.amc.investorapp.extension.statusBarTransparent +import com.navi.amc.investorapp.response.ResponseKycDocuments +import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys +import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter +import com.navi.amc.investorapp.ui.kyc.activities.KycActivity +import com.navi.amc.investorapp.util.IconUtils + +class KycDocumentsActivity : BaseActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + statusBarTransparent() + bindViewModel() + init() + initControl() + } + + override val screenName: String + get() = "KycDocumentsActivity" + + private val sharedPreferences by lazy { + SharedPreferencesWriter.getInstance(this) + } + + override fun onStart() { + super.onStart() + if (checkInternetSnackBar(this, binding.root)) { + viewModel.hitKycDocumentsApi() + } + } + + override val layoutRes: Int + get() = R.layout.activity_kyc_documents + override val viewModelClass: Class + get() = SetupYouAcountViewModel::class.java + + override fun bindViewModel() { + binding.kycDocumentsViewModel = viewModel + binding.lifecycleOwner = this + } + + override fun init() { + viewModel.accessToken = + sharedPreferences.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)!!.accessToken.toString() + } + + override fun initControl() { + inItLiveDataObserver() + } + + private fun inItLiveDataObserver() { + viewModel.onCLick.observe(this, { + when (it.id) { + R.id.btnContinue -> { + goto(KycActivity::class.java) + } + R.id.backButton -> { + finish() + } + } + }) + viewModel.response.observe(this, { + it.let { its -> + with(binding) + { + title.text = its.title + btnContinue.text = its.cta?.title + its.iconCode?.let { it1 -> IconUtils.updateIcon(it1, binding.iconCode) } + } + if (its.documents?.size!! > 0) { + mDocumentsListAdapter(its.documents) + } + } + }) + } + + private fun mDocumentsListAdapter(documents: ArrayList?) { + val adp = MyDocumentsListAdapter() + binding.rvDocumentList.adapter = adp + documents?.let { adp.setData(it) } + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt new file mode 100644 index 0000000000..4399eebe28 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt @@ -0,0 +1,42 @@ +package com.navi.amc.investorapp.ui.setup_account + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.navi.amc.investorapp.databinding.LayoutKycDocumentsListBinding +import com.navi.amc.investorapp.response.ResponseKycDocuments +import com.navi.amc.investorapp.util.IconUtils + +class MyDocumentsListAdapter : RecyclerView.Adapter() { + + var list: ArrayList = ArrayList() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + val inflater = LayoutInflater.from(parent.context) + return MyViewHolder(LayoutKycDocumentsListBinding.inflate(inflater, parent, false)) + } + + override fun getItemCount(): Int { + return list.size + } + + override fun onBindViewHolder(holder: MyViewHolder, position: Int) = holder.bind(position) + + fun setData( + list: ArrayList + ) { + this.list = list + } + + inner class MyViewHolder(val binding: LayoutKycDocumentsListBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(pos: Int) { + val model = list[pos] + with(binding) { + title.text = model.title + description.text = model.subTitle + model.iconCode?.let { it1 -> IconUtils.updateIcon(it1, binding.ivPersonalDetails) } + } + } + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt index ac5e4bd58d..1828eb63be 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt @@ -10,6 +10,7 @@ import com.navi.amc.investorapp.base.BaseViewModel import com.navi.amc.investorapp.base.SingleLiveEvent import com.navi.amc.investorapp.response.HomePageResponse import com.navi.amc.investorapp.response.Investor +import com.navi.amc.investorapp.response.ResponseKycDocuments import com.navi.amc.investorapp.retrofit.ApiUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -19,9 +20,8 @@ class SetupYouAcountViewModel : BaseViewModel() { private val _onClick = MutableLiveData() val onCLick: LiveData = _onClick - private val _response = SingleLiveEvent() - val response: SingleLiveEvent = _response - + private val _response = SingleLiveEvent() + val response: SingleLiveEvent = _response private val _investorResponse = SingleLiveEvent() val investorResponse: SingleLiveEvent = _investorResponse @@ -33,10 +33,10 @@ class SetupYouAcountViewModel : BaseViewModel() { _onClick.value = view } - fun hitHomePageApi() { + fun hitKycDocumentsApi() { showProgress() viewModelScope.launch(Dispatchers.IO) { - ApiUtils.callHomePageApi(accessToken, { + ApiUtils.hitKycDocumentsApi({ _response.setValue(it) hideProgress() }, { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt index bba4d120ea..84bd91fb45 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt @@ -37,9 +37,7 @@ class SetupYourActivity : BaseActivity - with(binding) - { - - sharedPreferences.writeStringValue( - SharedPreferencesKeys.ON_BOARDING_STATUS, - its.investor?.status - ) - - status = its.investor?.status - checkGreenTick() - } - } - }) - viewModel.investorResponse.observe(this, { it.let { its -> with(binding) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipActivity.kt index 8c7f908667..cdf131a342 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipActivity.kt @@ -48,9 +48,11 @@ class SipActivity : BaseActivity() { binding.lifecycleOwner = this } - private val spiId: Int - get() = intent.getIntExtra(EXTRA_DATA, 0) + get() = intent.getIntExtra(EXTRA_ID, 0) + + private val fundType: String? + get() = intent.getStringExtra(EXTRA_DATA) private val sharedPreferences by lazy { SharedPreferencesWriter.getInstance(this) @@ -68,6 +70,7 @@ class SipActivity : BaseActivity() { override fun onStart() { super.onStart() binding.isModifyEnable = false + binding.index.text = fundType if (checkInternetSnackBar(this, binding.sipRoot)) { viewModel.spiId = spiId.toString() binding.minInvestmentText.text = "${getString(R.string.min_investment_rupees)} 500" @@ -168,7 +171,6 @@ class SipActivity : BaseActivity() { viewModel.response.observe(this, { it.let { its -> if (its.installments.size > 0) { - binding.isSipAutoPayFailed = false binding.isSipAutoPayFailed = !(its.installments[0].state.toString() == "confirmed" || its.installments[0].state.toString() == "CONFIRMED" @@ -182,7 +184,7 @@ class SipActivity : BaseActivity() { this.schemeId = its.installments[0].scheme.toString() this.amount = its.installments[0].amount.toString() this.nextInstallment = its.nextInstallment.toString() - viewModel.paymentID = its.installments[0].id.toString() + viewModel.paymentID = its.installments[0].id } else { binding.isSipAutoPayFailed = false } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt index 02c9ebe7ab..c1a8c1aaa3 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt @@ -53,7 +53,7 @@ class SipViewModel : BaseViewModel() { var amount: Double? = 0.0 var accessToken: String? = "" var spiId: String? = "" - var paymentID: String? = "" + var paymentID: Int? = 0 fun hitGetSip() { showProgress() @@ -128,7 +128,7 @@ class SipViewModel : BaseViewModel() { fun reTryCreateOrderApi() { showProgress() val userData = SipLumpsumResponse( - order_id = paymentID?.toInt() + order_id = paymentID ) viewModelScope.launch(Dispatchers.IO) { ApiUtils.reTryCreateOrderApi(userData, accessToken, { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt index 93b37a50a5..6cb2a1be51 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt @@ -7,6 +7,7 @@ import com.navi.amc.investorapp.R @Keep object IconUtils { const val ICON_CHAT = "ICON_CHAT" + const val ICON_DOCUMENT = "ICON_DOCUMENT" const val ICON_SINGLE = "ICON_SINGLE" const val ICON_MARRIED = "ICON_MARRIED" const val ICON_OTHER = "ICON_OTHER" @@ -54,6 +55,7 @@ object IconUtils { private fun getImageFromIconCode(iconCode: String): Int { return when (iconCode) { + ICON_DOCUMENT -> R.drawable.ic_kyc_documents ICON_CHAT -> R.drawable.ic_chat_svg ICON_SINGLE -> R.drawable.ic_single_svg ICON_MARRIED -> R.drawable.ic_married_svg diff --git a/navi-amc/src/main/res/drawable/bg_rectangle_f5f5f5.xml b/navi-amc/src/main/res/drawable/bg_rectangle_f5f5f5.xml new file mode 100644 index 0000000000..e1a1d0e7f1 --- /dev/null +++ b/navi-amc/src/main/res/drawable/bg_rectangle_f5f5f5.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/drawable/ic_kyc_documents.xml b/navi-amc/src/main/res/drawable/ic_kyc_documents.xml new file mode 100644 index 0000000000..42db414784 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_kyc_documents.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/navi-amc/src/main/res/drawable/yellow_line_png.png b/navi-amc/src/main/res/drawable/yellow_line_png.png new file mode 100644 index 0000000000000000000000000000000000000000..2752ba0276fb1aa5e451185c1e23d6d114faa950 GIT binary patch literal 1059 zcmV+;1l;?HP){o zLww=mju!IWF6flC?sx140h~04Q>yUPS&8G*^vK!;YH+9dBX6`%e`F1EImSmgcblHh zxj9F5;NmZ4d3tHWwcb^F1&*vvVFQ) zk`ya3Zz|+08hR~Lw~41i7v^wsIAN03wdKGLt7hR?X)3f+=5M7LacKT*%%MM(jQ)r( ztu#j@6LBg`vEx8f#pBl=;j>Mz=fjoBFV`Q`r2?ppl=3vDkY#NZHKVJeAB5L z!@$-VV0dn_qzT7{CF0Qh(K4KY_+vR5SNHSyJ&Aw`8>M8{nGx;qqQ+{Gxtj^crm-z3 z30GhwHXC_7)IQq%4u8lyJlh`aKEo0% zYcQ``D*TC_n0p2<#&1|49i?u+5ypYN5e8q>7IY!Su}36LO&1h@j@?AxyyM?T`;C+t d`S~^9+JDnl*XjOq0VDtb002ovPDHLkV1m;k>CpfH literal 0 HcmV?d00001 diff --git a/navi-amc/src/main/res/layout/activity_kyc_documents.xml b/navi-amc/src/main/res/layout/activity_kyc_documents.xml new file mode 100644 index 0000000000..dc786af46b --- /dev/null +++ b/navi-amc/src/main/res/layout/activity_kyc_documents.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/activity_otp_verification.xml b/navi-amc/src/main/res/layout/activity_otp_verification.xml index 606a15902f..8b07f949be 100644 --- a/navi-amc/src/main/res/layout/activity_otp_verification.xml +++ b/navi-amc/src/main/res/layout/activity_otp_verification.xml @@ -291,8 +291,10 @@ android:id="@+id/verifyBtn" style="@style/Button_FFCC42" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="@dimen/_48dp" android:layout_marginTop="@dimen/_10dp" + android:gravity="center" + android:textAlignment="center" android:layout_marginBottom="@dimen/_20dp" android:alpha="0.5" android:onClick="@{(v)->otpViewModelBinding.onClick(v)}" diff --git a/navi-amc/src/main/res/layout/activity_payment_sucess.xml b/navi-amc/src/main/res/layout/activity_payment_sucess.xml index b8a2d8cc8d..8c46196ed4 100644 --- a/navi-amc/src/main/res/layout/activity_payment_sucess.xml +++ b/navi-amc/src/main/res/layout/activity_payment_sucess.xml @@ -140,16 +140,18 @@ app:layout_constraintTop_toBottomOf="@id/view" tools:text="@tools:sample/lorem/random" /> - @@ -498,14 +500,16 @@ android:id="@+id/goHome" style="@style/ButtonBlackOutlineWhiteBgStyle" android:layout_width="@dimen/_0dp" - android:layout_height="@dimen/_40dp" + android:layout_height="@dimen/_48dp" android:layout_marginTop="@dimen/_20dp" android:layout_marginEnd="@dimen/_16dp" android:layout_marginBottom="@dimen/_16dp" android:elevation="1dp" android:fontFamily="@font/navisans_bold" + android:gravity="center" android:onClick="@{(v)->paymentModeViewModel.onClick(v)}" android:text="@string/go_home" + android:textAlignment="center" android:textAllCaps="false" android:textSize="@dimen/_14sp" app:layout_constraintBottom_toBottomOf="parent" @@ -517,14 +521,16 @@ android:id="@+id/investMore" style="@style/Button_FFCC42" android:layout_width="@dimen/_0dp" - android:layout_height="@dimen/_40dp" + android:layout_height="@dimen/_48dp" android:layout_marginStart="@dimen/_16dp" android:layout_marginTop="@dimen/_20dp" android:layout_marginBottom="@dimen/_16dp" android:elevation="1dp" android:fontFamily="@font/navisans_bold" + android:gravity="center" android:onClick="@{(v)->paymentModeViewModel.onClick(v)}" android:text="@string/invest_more" + android:textAlignment="center" android:textAllCaps="false" android:textSize="@dimen/_14sp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/navi-amc/src/main/res/layout/activity_redemption_order.xml b/navi-amc/src/main/res/layout/activity_redemption_order.xml index bee79ca503..0ee40828c9 100644 --- a/navi-amc/src/main/res/layout/activity_redemption_order.xml +++ b/navi-amc/src/main/res/layout/activity_redemption_order.xml @@ -413,7 +413,9 @@ android:id="@+id/goToHome" style="@style/Button_FFCC42" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:gravity="center" + android:textAlignment="center" + android:layout_height="@dimen/_48dp" android:layout_marginTop="@dimen/_30dp" android:layout_marginBottom="@dimen/_20dp" android:onClick="@{(v)->redemptionViewModel.onClick(v)}" diff --git a/navi-amc/src/main/res/layout/activity_sell_my_fund.xml b/navi-amc/src/main/res/layout/activity_sell_my_fund.xml index 2a1c078332..a0ba202cb4 100644 --- a/navi-amc/src/main/res/layout/activity_sell_my_fund.xml +++ b/navi-amc/src/main/res/layout/activity_sell_my_fund.xml @@ -126,13 +126,15 @@ android:id="@+id/fundType" style="@style/TextStyle.tv_size_14sp" android:layout_width="@dimen/_0dp" + android:maxLines="3" + android:layout_height="wrap_content" android:layout_marginTop="@dimen/_4dp" android:textColor="@color/color_A3A3AB" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@id/fundName" app:layout_constraintTop_toBottomOf="@id/fundName" - tools:text="@string/invest_in_top_50_companies_of_india" /> + tools:text="@tools:sample/lorem/random" /> - + app:srcCompat="@drawable/ic_back_button" /> - diff --git a/navi-amc/src/main/res/layout/activity_sippayment.xml b/navi-amc/src/main/res/layout/activity_sippayment.xml index b1b42b5a10..085cee326f 100644 --- a/navi-amc/src/main/res/layout/activity_sippayment.xml +++ b/navi-amc/src/main/res/layout/activity_sippayment.xml @@ -138,17 +138,20 @@ app:layout_constraintTop_toBottomOf="@id/view" tools:text="@tools:sample/lorem/random" /> - - + app:srcCompat="@drawable/ic_back_button" /> - diff --git a/navi-amc/src/main/res/layout/layout_holdings.xml b/navi-amc/src/main/res/layout/layout_holdings.xml index 3e9716f046..7923a8d1d1 100644 --- a/navi-amc/src/main/res/layout/layout_holdings.xml +++ b/navi-amc/src/main/res/layout/layout_holdings.xml @@ -1,35 +1,39 @@ - + android:padding="@dimen/_10dp"> + app:layout_constraintTop_toTopOf="parent" + tools:text="@tools:sample/lorem/random" /> + app:layout_constraintStart_toEndOf="@id/tvName" + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/layout_kyc_documents_list.xml b/navi-amc/src/main/res/layout/layout_kyc_documents_list.xml new file mode 100644 index 0000000000..3ed8d0deb2 --- /dev/null +++ b/navi-amc/src/main/res/layout/layout_kyc_documents_list.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/mflisting_rec_design.xml b/navi-amc/src/main/res/layout/mflisting_rec_design.xml index 59ac7b562a..d1d5614878 100644 --- a/navi-amc/src/main/res/layout/mflisting_rec_design.xml +++ b/navi-amc/src/main/res/layout/mflisting_rec_design.xml @@ -1,132 +1,135 @@ + android:background="@drawable/card_view_backgnd"> - - + tools:text="@tools:sample/lorem/random" /> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/btnIndex" /> - - + android:layout_marginTop="@dimen/_15dp" + android:text="Fund Size" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/view1" /> - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + android:textAlignment="center" + android:paddingHorizontal="@dimen/_6dp" + android:maxLines="1" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/view1" /> @@ -136,25 +139,26 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_20dp" - app:layout_constraintTop_toBottomOf="@id/ConstraintFund" - android:padding="@dimen/_8dp" android:background="@drawable/bg_rectangle_fef3d6" - app:layout_constraintBottom_toBottomOf="parent"> + android:padding="@dimen/_8dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/ConstraintFund"> - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> diff --git a/navi-amc/src/main/res/layout/mutualfund_activity.xml b/navi-amc/src/main/res/layout/mutualfund_activity.xml index 534a277de7..3d7c64d6a1 100644 --- a/navi-amc/src/main/res/layout/mutualfund_activity.xml +++ b/navi-amc/src/main/res/layout/mutualfund_activity.xml @@ -144,6 +144,7 @@ android:id="@+id/tvsubtitle" style="@style/Textview_A3A3AB_regular_14sp" android:layout_width="@dimen/_0dp" + android:maxLines="3" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_5dp" app:layout_constraintEnd_toEndOf="parent" @@ -154,20 +155,22 @@ + tools:text="@tools:sample/lorem" /> @@ -289,6 +292,120 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/view2" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + - - + + + + - - + + + + + - - + app:srcCompat="@drawable/ic_circular_orange" /> + + + + + - - - @@ -1214,6 +1379,8 @@ android:layout_width="match_parent" android:layout_height="@dimen/_48dp" android:layout_margin="@dimen/_10dp" + android:gravity="center" + android:textAlignment="center" android:onClick="@{(v)->mutualfundviewmodel.onClick(v)}" android:text="@string/invest_now" app:layout_constraintBottom_toBottomOf="parent" diff --git a/navi-amc/src/main/res/layout/view_progress_header.xml b/navi-amc/src/main/res/layout/view_progress_header.xml index ce1f9ede3a..089cab0e00 100644 --- a/navi-amc/src/main/res/layout/view_progress_header.xml +++ b/navi-amc/src/main/res/layout/view_progress_header.xml @@ -7,19 +7,18 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + app:srcCompat="@drawable/ic_back_button" /> Date: Wed, 20 Oct 2021 16:33:12 +0530 Subject: [PATCH 19/53] reviewed fixes --- .../investorapp/response/ResponseCommon.kt | 2 +- .../response/ResponseKycDocuments.kt | 29 ++++++++---------- .../investorapp/retrofit/ApiErrorHandler.kt | 2 -- .../investorapp/ui/home/HomeScreenFragment.kt | 30 +++++++++---------- .../ui/mutual_fund/MutualFundActivity.kt | 6 ++-- .../ui/panCard/VerifyPanCardActivity.kt | 10 +++---- .../ui/setup_account/KycDocumentsActivity.kt | 4 +-- .../setup_account/MyDocumentsListAdapter.kt | 5 ++-- .../res/layout/activity_buyingflow_sip.xml | 11 +++---- .../main/res/layout/mutualfund_activity.xml | 1 - 10 files changed, 45 insertions(+), 55 deletions(-) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt index 4a1b5d7ce4..33b78f49f9 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt @@ -27,7 +27,7 @@ data class ResponseCommon( @SerializedName("personal_details_to_ask") var personalDetailsToAsk: List? = null, @SerializedName("options") - var options: ArrayList? = ArrayList(), // null + var options: ArrayList = ArrayList(), // null @SerializedName("refresh_token") var refreshToken: String? = "", @SerializedName("x-amc-access-token") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt index eb5a8812b8..8851f1d06e 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt @@ -3,31 +3,26 @@ package com.navi.amc.investorapp.response import androidx.annotation.Keep import com.google.gson.annotations.SerializedName +import com.navi.common.model.CtaData @Keep data class ResponseKycDocuments( @SerializedName("cta") - var cta: Cta? = null, + var cta: CtaData? = null, @SerializedName("documents") var documents: ArrayList? = ArrayList(), @SerializedName("iconCode") var iconCode: String? = "", // ICON_DOCUMENT @SerializedName("title") var title: String? = "" // Keep the following documents handy -) { - data class Cta( - @SerializedName("title") - var title: String? = "", // Continue - @SerializedName("url") - var url: String? = "" // KYC - ) +) - data class Document( - @SerializedName("iconCode") - var iconCode: String? = "", // ICON_PAN - @SerializedName("subTitle") - var subTitle: String? = "", // To upload the image of PAN Card - @SerializedName("title") - var title: String? = ""// PAN Card - ) -} \ No newline at end of file +@Keep +data class Document( + @SerializedName("iconCode") + var iconCode: String? = "", // ICON_PAN + @SerializedName("subTitle") + var subTitle: String? = "", // To upload the image of PAN Card + @SerializedName("title") + var title: String? = ""// PAN Card +) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt index dbb3177cf8..737101d196 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt @@ -11,8 +11,6 @@ import java.net.UnknownHostException object ApiErrorHandler { - - fun handleException(exception: Exception): String { exception.printStackTrace() return when (exception) { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt index 2868dd28a7..74b48753b6 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt @@ -35,7 +35,6 @@ import com.navi.amc.investorapp.ui.otpVerification.OtpVerificationActivity import com.navi.amc.investorapp.ui.panCard.VerifyPanCardActivity import com.navi.amc.investorapp.ui.personalDetails.AboradErrorActivity import com.navi.amc.investorapp.ui.profile.MyLumpsumOrdersAdapter -import com.navi.amc.investorapp.ui.setup_account.KycDocumentsActivity import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity import com.navi.amc.investorapp.util.orFalse import com.navi.amc.investorapp.utils.DateUtils @@ -119,17 +118,17 @@ class HomeScreenFragment : BaseFragment { - requireActivity().goto(KycDocumentsActivity::class.java) + requireActivity().goto(KycActivity::class.java) } R.id.ivProgressDownArrow -> { pendingOrderCounter++ diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt index 35916d897e..f2b451fe14 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt @@ -353,18 +353,16 @@ class MutualFundActivity : BaseActivity + its.options.let { it -> sharedPreferences.writeStringValue( SharedPreferencesKeys.OPTIONS_MOBILE, - its.options!![0].mobile + its.options.getOrNull(0)?.mobile ).toString() sharedPreferences.writeBooleanInt( SharedPreferencesKeys.ASK_OPTIONS, @@ -395,7 +395,7 @@ class VerifyPanCardActivity : BaseActivity { - gotoFinish(KycDocumentsActivity::class.java) + gotoFinish(KycActivity::class.java) } Constant.BASIC_DETAILS_UPDATED -> { @@ -422,7 +422,7 @@ class VerifyPanCardActivity : BaseActivity { - gotoFinish(KycDocumentsActivity::class.java) + gotoFinish(KycActivity::class.java) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt index f8ba454126..611c4631e2 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt @@ -7,7 +7,7 @@ import com.navi.amc.investorapp.databinding.ActivityKycDocumentsBinding import com.navi.amc.investorapp.extension.checkInternetSnackBar import com.navi.amc.investorapp.extension.goto import com.navi.amc.investorapp.extension.statusBarTransparent -import com.navi.amc.investorapp.response.ResponseKycDocuments +import com.navi.amc.investorapp.response.Document import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter import com.navi.amc.investorapp.ui.kyc.activities.KycActivity @@ -81,7 +81,7 @@ class KycDocumentsActivity : BaseActivity?) { + private fun mDocumentsListAdapter(documents: ArrayList?) { val adp = MyDocumentsListAdapter() binding.rvDocumentList.adapter = adp documents?.let { adp.setData(it) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt index 4399eebe28..59fba115ee 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt @@ -4,12 +4,13 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.navi.amc.investorapp.databinding.LayoutKycDocumentsListBinding +import com.navi.amc.investorapp.response.Document import com.navi.amc.investorapp.response.ResponseKycDocuments import com.navi.amc.investorapp.util.IconUtils class MyDocumentsListAdapter : RecyclerView.Adapter() { - var list: ArrayList = ArrayList() + var list: ArrayList = ArrayList() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { val inflater = LayoutInflater.from(parent.context) @@ -23,7 +24,7 @@ class MyDocumentsListAdapter : RecyclerView.Adapter + list: ArrayList ) { this.list = list } diff --git a/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml b/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml index 1e7de88c69..8fbbc8e8cb 100644 --- a/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml +++ b/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml @@ -121,7 +121,7 @@ style="@style/TextStyle.tv_size_18sp" android:layout_width="@dimen/_0dp" android:layout_marginStart="@dimen/_8dp" - android:maxLines="1" + android:maxLines="3" android:textColor="@color/color_22223D" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" @@ -134,7 +134,7 @@ style="@style/TextStyle.tv_size_14sp" android:layout_width="@dimen/_0dp" android:layout_marginTop="@dimen/_4dp" - android:maxLines="1" + android:maxLines="3" android:textColor="@color/color_A3A3AB" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@id/fundName" @@ -144,11 +144,12 @@ From e78e5d978c540058b9029d9c53138154aeaae78c Mon Sep 17 00:00:00 2001 From: adarshs Date: Thu, 21 Oct 2021 17:02:16 +0530 Subject: [PATCH 20/53] Upgrading neoEyed sdk in navi-analytics --- navi-analytics/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/navi-analytics/build.gradle b/navi-analytics/build.gradle index d538f474df..d45b3396a0 100644 --- a/navi-analytics/build.gradle +++ b/navi-analytics/build.gradle @@ -52,5 +52,5 @@ dependencies { // Firebase SDK for Google Analytics (Kotlin) implementation 'com.google.firebase:firebase-crashlytics:17.3.0' // NeoEyed SDK - implementation project(":neoeyed-sdk-release-3.3.0") + implementation project(":neoeyed-sdk-release-3.3.1") } \ No newline at end of file From eb3b753bfed4a84d8130759c0c7c214bd35b4615 Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Thu, 21 Oct 2021 17:51:17 +0530 Subject: [PATCH 21/53] More UI - Fixes --- .../response/ResponseInvestmentDetails.kt | 4 +- .../ui/investment/OrderInProgressAdapter.kt | 2 +- .../ui/payment/PaymentResultResponse.kt | 2 - navi-amc/src/main/res/drawable/aadhaar.png | Bin 0 -> 4620 bytes .../src/main/res/drawable/ic_dropdown.xml | 9 ++ .../main/res/drawable/ic_my_investment.xml | 98 ++++++++---------- .../res/drawable/ic_order_in_progress.xml | 36 +++---- .../src/main/res/drawable/married_new.xml | 68 ++++++++++++ .../main/res/layout/activity_about_income.xml | 2 +- .../main/res/layout/fragment_home_screen.xml | 39 ++++--- .../navi_nifty_fifty_index_fund_view.xml | 1 + 11 files changed, 165 insertions(+), 96 deletions(-) create mode 100644 navi-amc/src/main/res/drawable/aadhaar.png create mode 100644 navi-amc/src/main/res/drawable/ic_dropdown.xml create mode 100644 navi-amc/src/main/res/drawable/married_new.xml diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt index 75c0e114d3..148634575a 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt @@ -29,8 +29,8 @@ data class ResponseInvestmentDetails( ) data class OrdersInProgres( - @SerializedName("allotted_units") - var allottedUnits: String? = "", // 15 +// @SerializedName("allotted_units") +// var allottedUnits: String? = "", // 15 @SerializedName("amount") var amount: String? = "", // 35000 @SerializedName("confirmed_at") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/OrderInProgressAdapter.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/OrderInProgressAdapter.kt index e5f095b740..715154a514 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/OrderInProgressAdapter.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/OrderInProgressAdapter.kt @@ -35,7 +35,7 @@ class OrderInProgressAdapter( with(binding) { orderNameText.text = list[pos].schemeName.toString() orderType.text = list[pos]?.type.toString() - unitAllocation.text = "Unit Allocation ${list?.get(pos)?.allottedUnits.toString()}" +// unitAllocation.text = "Unit Allocation ${list?.get(pos)?.allottedUnits.toString()}" orderAmount.text = "Rs ${list?.get(pos)?.amount.toString()}" } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt index de9413ad1d..e8c7d4a378 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt @@ -6,8 +6,6 @@ import com.google.gson.annotations.SerializedName @Keep data class PaymentResultResponse( - @SerializedName("allotted_units") - var allottedUnits: Int? = 0, // 15 @SerializedName("payment") var payment: PaymentBody? = null, // 15 diff --git a/navi-amc/src/main/res/drawable/aadhaar.png b/navi-amc/src/main/res/drawable/aadhaar.png new file mode 100644 index 0000000000000000000000000000000000000000..ffec38dc56e1fa4e0dac8776a0009522e5951006 GIT binary patch literal 4620 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 + + diff --git a/navi-amc/src/main/res/drawable/ic_my_investment.xml b/navi-amc/src/main/res/drawable/ic_my_investment.xml index 6b254940be..4855224302 100644 --- a/navi-amc/src/main/res/drawable/ic_my_investment.xml +++ b/navi-amc/src/main/res/drawable/ic_my_investment.xml @@ -1,58 +1,44 @@ - - - - - - - - - - - + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_order_in_progress.xml b/navi-amc/src/main/res/drawable/ic_order_in_progress.xml index 769c8f7f46..7f30f9d75b 100644 --- a/navi-amc/src/main/res/drawable/ic_order_in_progress.xml +++ b/navi-amc/src/main/res/drawable/ic_order_in_progress.xml @@ -1,53 +1,53 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/navi-amc/src/main/res/drawable/married_new.xml b/navi-amc/src/main/res/drawable/married_new.xml new file mode 100644 index 0000000000..2fdff1f579 --- /dev/null +++ b/navi-amc/src/main/res/drawable/married_new.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + diff --git a/navi-amc/src/main/res/layout/activity_about_income.xml b/navi-amc/src/main/res/layout/activity_about_income.xml index 5ba4b49e14..91ca21fa6e 100644 --- a/navi-amc/src/main/res/layout/activity_about_income.xml +++ b/navi-amc/src/main/res/layout/activity_about_income.xml @@ -200,7 +200,7 @@ android:id="@+id/ivMarried" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/ic_married_svg" + android:src="@drawable/married_new" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/navi-amc/src/main/res/layout/fragment_home_screen.xml b/navi-amc/src/main/res/layout/fragment_home_screen.xml index bf47caea2a..9134b82e08 100644 --- a/navi-amc/src/main/res/layout/fragment_home_screen.xml +++ b/navi-amc/src/main/res/layout/fragment_home_screen.xml @@ -309,7 +309,7 @@ android:id="@+id/ivAadhar" android:layout_width="@dimen/_40dp" android:layout_height="@dimen/_40dp" - android:src="@drawable/aadhar" + android:src="@drawable/aadhaar" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -370,7 +370,8 @@ android:layout_marginTop="@dimen/_16dp" android:visibility="visible" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/cardKYC"> + app:layout_constraintTop_toBottomOf="@id/cardKYC" + > @@ -519,7 +520,7 @@ android:id="@+id/ivInvestment" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/investment" + android:src="@drawable/ic_my_investment" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -528,10 +529,11 @@ style="@style/Textview_1A1A1A_bold_14sp" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/_10dp" + android:layout_marginStart="@dimen/_8dp" android:text="@string/your_investment" + app:layout_constraintBottom_toBottomOf="@id/ivInvestment" app:layout_constraintStart_toEndOf="@+id/ivInvestment" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@id/ivInvestment" /> + tools:text="500000000000000" /> + app:layout_constraintTop_toTopOf="@id/orderText" /> diff --git a/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml b/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml index dfb928fd9c..5d0c8ddee8 100644 --- a/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml +++ b/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml @@ -57,6 +57,7 @@ style="@style/Textview_22223D_regular_14sp" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:fontFamily="@font/navisans_bold" android:layout_marginTop="@dimen/_24dp" android:drawableEnd="@drawable/ic_right_side_arrow_svg" android:drawablePadding="@dimen/_8dp" From 43a3d45cf5872c45e1cd55eea0efaec298875de8 Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Thu, 21 Oct 2021 21:45:42 +0530 Subject: [PATCH 22/53] exit status for a positive case check --- Dockerfile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 604a72847e..23f7613c49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,10 +37,8 @@ RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup; EX1=\"\$?\";\ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests; EX2=\"\$?\";\ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup ; EX3=\"\$?\";\ - if [ $EX1 == 0 ] && [ $EX2 == 0 ] && [ $EX3 == 0 ]; then exit 0; else exit 1; fi; \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit; EX2=\"\$?\";\ + if [ $EX2 == 0 ]; then exit 0; else exit 1; fi; \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ From 19e5e368859cfbc0d6c909c6cf2e51d36ec190d9 Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Thu, 21 Oct 2021 21:59:31 +0530 Subject: [PATCH 23/53] exit status for a positive case check --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 23f7613c49..fe873a04ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,7 @@ RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit; EX2=\"\$?\";\ - if [ $EX2 == 0 ]; then exit 0; else exit 1; fi; \ + if [[ $EX2 == 0 ]]; then exit 0; else exit 1; fi; \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ From 94b3921c3ed0bfa3205add93092b516d7c3beafa Mon Sep 17 00:00:00 2001 From: adarshs Date: Thu, 21 Oct 2021 22:52:47 +0530 Subject: [PATCH 24/53] Deleting build files --- .../0fa041ea627bf7caffa4e7e5b11e9c4e.bin | 1 - .../1334355a806a571d49bf0f01abb67acb.bin | 1 - ...jetified-neoeyed-sdk-release-3.3.0-api.jar | Bin 99542 -> 0 bytes .../24ddbf2846645241f4217a492ba729b5.bin | 1 - .../26627e92b703ad14331bb7b6e807f175.bin | 0 .../2d84f4d8a67ab9f1afa2e4c5bf389bbb.bin | 1 - .../3ab822513c98ffb3c49b594b773644af.bin | 0 .../3bd64d7aa9ac876d5774cf45fe47a9c9.bin | 1 - .../jetified-neoeyed-sdk-release-3.3.0.aar | Bin 41667 -> 0 bytes .../3cd549877cc80cd663562ebf93415a52.bin | 1 - ...jetified-neoeyed-sdk-release-3.3.0-api.jar | Bin 99542 -> 0 bytes .../3dda395ff6fc49c3bfafd34fe97cebcb.bin | 1 - .../com.neoeyed.sdk-r.txt | 218 --------------- .../45d6bf7dc0b95defebab1c04afd00e6d.bin | 0 .../4655d808980b11d77847c99ac83647ff.bin | 1 - .../AndroidManifest.xml | 40 --- .../build/gradle/aar-metadata.properties | 2 - .../jetified-neoeyed-sdk-release-3.3.0/R.txt | 261 ------------------ .../jars/classes.jar | Bin 41569 -> 0 bytes .../50b6222e99095d52ad598066fee76674.bin | 0 .../576d4c4c5987824994a0a18c54c286f3.bin | 0 .../595085c85ac612efa2ecd13485ee21ba.bin | 0 .../63f7b3a68f5ad3cbb351e7590099b6d3.bin | 1 - .../65a7a5f8f4d6d1120fdca90dab9d3096.bin | 0 .../687565ce8799d9db189fe5da87bd6a50.bin | 0 .../6d21730918cbb2808c0f356ff046e648.bin | 1 - ...fied-neoeyed-sdk-release-3.3.0-runtime.jar | Bin 81984 -> 0 bytes .../70ad6452c2c6737a6167538720b7a1f6.bin | 1 - .../com.neoeyed.sdk-r.txt | 218 --------------- .../7ae1b32e15e4bceb093254cb31ac2eeb.bin | 0 .../8f0007c34ba2d232e91916ebec6bba94.bin | 0 .../900dcb22a40e6fc6af3f8b312a60c7b3.bin | 1 - .../AndroidManifest.xml | 40 --- .../build/gradle/aar-metadata.properties | 2 - .../jetified-neoeyed-sdk-release-3.3.0/R.txt | 261 ------------------ .../jars/classes.jar | Bin 41569 -> 0 bytes .../9ac3b51d3c763f5be029e25486c1eb6a.bin | 0 .../9bf49bfd1ec0861f115fabd01c8168b5.bin | 1 - .../jetified-neoeyed-sdk-release-3.3.0.aar | Bin 41667 -> 0 bytes .../a3eac6dbd0bcb12e1c00045be558cc10.bin | 1 - .../a790a1855d616f5fe732b005d3ebe4ef.bin | 0 .../bc7e14d75cdd8298a51471b8439634b4.bin | 0 .../c69f1c9c82deed680c03f574ef064f6e.bin | 1 - ...fied-neoeyed-sdk-release-3.3.0-runtime.jar | Bin 81984 -> 0 bytes .../c76552f22a7c6987983b67a428d78856.bin | 1 - .../e6a4eabdae60fb0dad4d6464c68d9f1c.bin | 1 - .../f6bb3f1ea40bc6e17eb08f9e2e84b1e5.bin | 0 .../f89647cb4edf4215a7f4f2b2c6127f73.bin | 0 .../fde1c47541908ce22f841752f228ada1.bin | 1 - 49 files changed, 1060 deletions(-) delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/0fa041ea627bf7caffa4e7e5b11e9c4e.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb/jetified-neoeyed-sdk-release-3.3.0-api.jar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/24ddbf2846645241f4217a492ba729b5.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/26627e92b703ad14331bb7b6e807f175.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/2d84f4d8a67ab9f1afa2e4c5bf389bbb.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3ab822513c98ffb3c49b594b773644af.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9/jetified-neoeyed-sdk-release-3.3.0.aar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52/jetified-neoeyed-sdk-release-3.3.0-api.jar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb/com.neoeyed.sdk-r.txt delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/45d6bf7dc0b95defebab1c04afd00e6d.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/R.txt delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/50b6222e99095d52ad598066fee76674.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/576d4c4c5987824994a0a18c54c286f3.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/595085c85ac612efa2ecd13485ee21ba.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/63f7b3a68f5ad3cbb351e7590099b6d3.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/65a7a5f8f4d6d1120fdca90dab9d3096.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/687565ce8799d9db189fe5da87bd6a50.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648/jetified-neoeyed-sdk-release-3.3.0-runtime.jar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6/com.neoeyed.sdk-r.txt delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/7ae1b32e15e4bceb093254cb31ac2eeb.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/8f0007c34ba2d232e91916ebec6bba94.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/R.txt delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/9ac3b51d3c763f5be029e25486c1eb6a.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5/jetified-neoeyed-sdk-release-3.3.0.aar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a3eac6dbd0bcb12e1c00045be558cc10.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a790a1855d616f5fe732b005d3ebe4ef.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/bc7e14d75cdd8298a51471b8439634b4.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e/jetified-neoeyed-sdk-release-3.3.0-runtime.jar delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/c76552f22a7c6987983b67a428d78856.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/e6a4eabdae60fb0dad4d6464c68d9f1c.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/f6bb3f1ea40bc6e17eb08f9e2e84b1e5.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/f89647cb4edf4215a7f4f2b2c6127f73.bin delete mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/fde1c47541908ce22f841752f228ada1.bin diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/0fa041ea627bf7caffa4e7e5b11e9c4e.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/0fa041ea627bf7caffa4e7e5b11e9c4e.bin deleted file mode 100644 index c626d1be35..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/0fa041ea627bf7caffa4e7e5b11e9c4e.bin +++ /dev/null @@ -1 +0,0 @@ -i/jars/classes.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb.bin deleted file mode 100644 index 0ee11c5631..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0-api.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb/jetified-neoeyed-sdk-release-3.3.0-api.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/1334355a806a571d49bf0f01abb67acb/jetified-neoeyed-sdk-release-3.3.0-api.jar deleted file mode 100644 index 5eab0163d336a62726a1c321aa1e85bc44f16648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99542 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/24ddbf2846645241f4217a492ba729b5.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/24ddbf2846645241f4217a492ba729b5.bin deleted file mode 100644 index c626d1be35..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/24ddbf2846645241f4217a492ba729b5.bin +++ /dev/null @@ -1 +0,0 @@ -i/jars/classes.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/26627e92b703ad14331bb7b6e807f175.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/26627e92b703ad14331bb7b6e807f175.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/2d84f4d8a67ab9f1afa2e4c5bf389bbb.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/2d84f4d8a67ab9f1afa2e4c5bf389bbb.bin deleted file mode 100644 index fb0cbb18e6..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/2d84f4d8a67ab9f1afa2e4c5bf389bbb.bin +++ /dev/null @@ -1 +0,0 @@ -o/com.neoeyed.sdk diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3ab822513c98ffb3c49b594b773644af.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/3ab822513c98ffb3c49b594b773644af.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9.bin deleted file mode 100644 index 52a3fd682a..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0.aar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9/jetified-neoeyed-sdk-release-3.3.0.aar b/neoeyed-sdk-release-3.3.0/build/.transforms/3bd64d7aa9ac876d5774cf45fe47a9c9/jetified-neoeyed-sdk-release-3.3.0.aar deleted file mode 100644 index 414b3c7a86ad966f5000b7746ceebd59f15743bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52.bin deleted file mode 100644 index 0ee11c5631..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0-api.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52/jetified-neoeyed-sdk-release-3.3.0-api.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/3cd549877cc80cd663562ebf93415a52/jetified-neoeyed-sdk-release-3.3.0-api.jar deleted file mode 100644 index 5eab0163d336a62726a1c321aa1e85bc44f16648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99542 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb.bin deleted file mode 100644 index bc740494bc..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb.bin +++ /dev/null @@ -1 +0,0 @@ -o/com.neoeyed.sdk-r.txt diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb/com.neoeyed.sdk-r.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb/com.neoeyed.sdk-r.txt deleted file mode 100644 index 64bf923ef2..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/3dda395ff6fc49c3bfafd34fe97cebcb/com.neoeyed.sdk-r.txt +++ /dev/null @@ -1,218 +0,0 @@ -com.neoeyed.sdk -anim fragment_close_enter -anim fragment_close_exit -anim fragment_fade_enter -anim fragment_fade_exit -anim fragment_fast_out_extra_slow_in -anim fragment_open_enter -anim fragment_open_exit -attr alpha -attr buttonSize -attr circleCrop -attr colorScheme -attr font -attr fontProviderAuthority -attr fontProviderCerts -attr fontProviderFetchStrategy -attr fontProviderFetchTimeout -attr fontProviderPackage -attr fontProviderQuery -attr fontStyle -attr fontVariationSettings -attr fontWeight -attr imageAspectRatio -attr imageAspectRatioAdjust -attr scopeUris -attr ttcIndex -color common_google_signin_btn_text_dark -color common_google_signin_btn_text_dark_default -color common_google_signin_btn_text_dark_disabled -color common_google_signin_btn_text_dark_focused -color common_google_signin_btn_text_dark_pressed -color common_google_signin_btn_text_light -color common_google_signin_btn_text_light_default -color common_google_signin_btn_text_light_disabled -color common_google_signin_btn_text_light_focused -color common_google_signin_btn_text_light_pressed -color common_google_signin_btn_tint -color notification_action_color_filter -color notification_icon_bg_color -color ripple_material_light -color secondary_text_default_material_light -dimen compat_button_inset_horizontal_material -dimen compat_button_inset_vertical_material -dimen compat_button_padding_horizontal_material -dimen compat_button_padding_vertical_material -dimen compat_control_corner_material -dimen compat_notification_large_icon_max_height -dimen compat_notification_large_icon_max_width -dimen notification_action_icon_size -dimen notification_action_text_size -dimen notification_big_circle_margin -dimen notification_content_margin_start -dimen notification_large_icon_height -dimen notification_large_icon_width -dimen notification_main_column_padding_top -dimen notification_media_narrow_margin -dimen notification_right_icon_size -dimen notification_right_side_padding_top -dimen notification_small_icon_background_padding -dimen notification_small_icon_size_as_large -dimen notification_subtext_size -dimen notification_top_pad -dimen notification_top_pad_large_text -drawable common_full_open_on_phone -drawable common_google_signin_btn_icon_dark -drawable common_google_signin_btn_icon_dark_focused -drawable common_google_signin_btn_icon_dark_normal -drawable common_google_signin_btn_icon_dark_normal_background -drawable common_google_signin_btn_icon_disabled -drawable common_google_signin_btn_icon_light -drawable common_google_signin_btn_icon_light_focused -drawable common_google_signin_btn_icon_light_normal -drawable common_google_signin_btn_icon_light_normal_background -drawable common_google_signin_btn_text_dark -drawable common_google_signin_btn_text_dark_focused -drawable common_google_signin_btn_text_dark_normal -drawable common_google_signin_btn_text_dark_normal_background -drawable common_google_signin_btn_text_disabled -drawable common_google_signin_btn_text_light -drawable common_google_signin_btn_text_light_focused -drawable common_google_signin_btn_text_light_normal -drawable common_google_signin_btn_text_light_normal_background -drawable googleg_disabled_color_18 -drawable googleg_standard_color_18 -drawable notification_action_background -drawable notification_bg -drawable notification_bg_low -drawable notification_bg_low_normal -drawable notification_bg_low_pressed -drawable notification_bg_normal -drawable notification_bg_normal_pressed -drawable notification_icon_background -drawable notification_template_icon_bg -drawable notification_template_icon_low_bg -drawable notification_tile_bg -drawable notify_panel_notification_icon_bg -id accessibility_action_clickable_span -id accessibility_custom_action_0 -id accessibility_custom_action_1 -id accessibility_custom_action_10 -id accessibility_custom_action_11 -id accessibility_custom_action_12 -id accessibility_custom_action_13 -id accessibility_custom_action_14 -id accessibility_custom_action_15 -id accessibility_custom_action_16 -id accessibility_custom_action_17 -id accessibility_custom_action_18 -id accessibility_custom_action_19 -id accessibility_custom_action_2 -id accessibility_custom_action_20 -id accessibility_custom_action_21 -id accessibility_custom_action_22 -id accessibility_custom_action_23 -id accessibility_custom_action_24 -id accessibility_custom_action_25 -id accessibility_custom_action_26 -id accessibility_custom_action_27 -id accessibility_custom_action_28 -id accessibility_custom_action_29 -id accessibility_custom_action_3 -id accessibility_custom_action_30 -id accessibility_custom_action_31 -id accessibility_custom_action_4 -id accessibility_custom_action_5 -id accessibility_custom_action_6 -id accessibility_custom_action_7 -id accessibility_custom_action_8 -id accessibility_custom_action_9 -id action_container -id action_divider -id action_image -id action_text -id actions -id adjust_height -id adjust_width -id async -id auto -id blocking -id chronometer -id dark -id dialog_button -id forever -id fragment_container_view_tag -id icon -id icon_group -id icon_only -id info -id italic -id light -id line1 -id line3 -id none -id normal -id notification_background -id notification_main_column -id notification_main_column_container -id right_icon -id right_side -id standard -id tag_accessibility_actions -id tag_accessibility_clickable_spans -id tag_accessibility_heading -id tag_accessibility_pane_title -id tag_screen_reader_focusable -id tag_transition_group -id tag_unhandled_key_event_manager -id tag_unhandled_key_listeners -id text -id text2 -id time -id title -id visible_removing_fragment_view_tag -id wide -integer google_play_services_version -integer status_bar_notification_info_maxnum -layout custom_dialog -layout notification_action -layout notification_action_tombstone -layout notification_template_custom_big -layout notification_template_icon_group -layout notification_template_part_chronometer -layout notification_template_part_time -string common_google_play_services_enable_button -string common_google_play_services_enable_text -string common_google_play_services_enable_title -string common_google_play_services_install_button -string common_google_play_services_install_text -string common_google_play_services_install_title -string common_google_play_services_notification_channel_name -string common_google_play_services_notification_ticker -string common_google_play_services_unknown_issue -string common_google_play_services_unsupported_text -string common_google_play_services_update_button -string common_google_play_services_update_text -string common_google_play_services_update_title -string common_google_play_services_updating_text -string common_google_play_services_wear_update_text -string common_open_on_phone -string common_signin_button_text -string common_signin_button_text_long -string status_bar_notification_info_overflow -style TextAppearance_Compat_Notification -style TextAppearance_Compat_Notification_Info -style TextAppearance_Compat_Notification_Line2 -style TextAppearance_Compat_Notification_Time -style TextAppearance_Compat_Notification_Title -style Widget_Compat_NotificationActionContainer -style Widget_Compat_NotificationActionText -styleable ColorStateListItem alpha android_alpha android_color -styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery -styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex -styleable Fragment android_id android_name android_tag -styleable FragmentContainerView android_name android_tag -styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type -styleable GradientColorItem android_color android_offset -styleable LoadingImageView circleCrop imageAspectRatio imageAspectRatioAdjust -styleable SignInButton buttonSize colorScheme scopeUris diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/45d6bf7dc0b95defebab1c04afd00e6d.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/45d6bf7dc0b95defebab1c04afd00e6d.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff.bin deleted file mode 100644 index f527fe3967..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml b/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml deleted file mode 100644 index e814731d3f..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties b/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties deleted file mode 100644 index d8560bd4e2..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties +++ /dev/null @@ -1,2 +0,0 @@ -aarFormatVersion=1.0 -aarMetadataVersion=1.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/R.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/R.txt deleted file mode 100644 index c68b87c7af..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/R.txt +++ /dev/null @@ -1,261 +0,0 @@ -int anim fragment_close_enter 0x0 -int anim fragment_close_exit 0x0 -int anim fragment_fade_enter 0x0 -int anim fragment_fade_exit 0x0 -int anim fragment_fast_out_extra_slow_in 0x0 -int anim fragment_open_enter 0x0 -int anim fragment_open_exit 0x0 -int attr alpha 0x0 -int attr buttonSize 0x0 -int attr circleCrop 0x0 -int attr colorScheme 0x0 -int attr font 0x0 -int attr fontProviderAuthority 0x0 -int attr fontProviderCerts 0x0 -int attr fontProviderFetchStrategy 0x0 -int attr fontProviderFetchTimeout 0x0 -int attr fontProviderPackage 0x0 -int attr fontProviderQuery 0x0 -int attr fontStyle 0x0 -int attr fontVariationSettings 0x0 -int attr fontWeight 0x0 -int attr imageAspectRatio 0x0 -int attr imageAspectRatioAdjust 0x0 -int attr scopeUris 0x0 -int attr ttcIndex 0x0 -int color common_google_signin_btn_text_dark 0x0 -int color common_google_signin_btn_text_dark_default 0x0 -int color common_google_signin_btn_text_dark_disabled 0x0 -int color common_google_signin_btn_text_dark_focused 0x0 -int color common_google_signin_btn_text_dark_pressed 0x0 -int color common_google_signin_btn_text_light 0x0 -int color common_google_signin_btn_text_light_default 0x0 -int color common_google_signin_btn_text_light_disabled 0x0 -int color common_google_signin_btn_text_light_focused 0x0 -int color common_google_signin_btn_text_light_pressed 0x0 -int color common_google_signin_btn_tint 0x0 -int color notification_action_color_filter 0x0 -int color notification_icon_bg_color 0x0 -int color ripple_material_light 0x0 -int color secondary_text_default_material_light 0x0 -int dimen compat_button_inset_horizontal_material 0x0 -int dimen compat_button_inset_vertical_material 0x0 -int dimen compat_button_padding_horizontal_material 0x0 -int dimen compat_button_padding_vertical_material 0x0 -int dimen compat_control_corner_material 0x0 -int dimen compat_notification_large_icon_max_height 0x0 -int dimen compat_notification_large_icon_max_width 0x0 -int dimen notification_action_icon_size 0x0 -int dimen notification_action_text_size 0x0 -int dimen notification_big_circle_margin 0x0 -int dimen notification_content_margin_start 0x0 -int dimen notification_large_icon_height 0x0 -int dimen notification_large_icon_width 0x0 -int dimen notification_main_column_padding_top 0x0 -int dimen notification_media_narrow_margin 0x0 -int dimen notification_right_icon_size 0x0 -int dimen notification_right_side_padding_top 0x0 -int dimen notification_small_icon_background_padding 0x0 -int dimen notification_small_icon_size_as_large 0x0 -int dimen notification_subtext_size 0x0 -int dimen notification_top_pad 0x0 -int dimen notification_top_pad_large_text 0x0 -int drawable common_full_open_on_phone 0x0 -int drawable common_google_signin_btn_icon_dark 0x0 -int drawable common_google_signin_btn_icon_dark_focused 0x0 -int drawable common_google_signin_btn_icon_dark_normal 0x0 -int drawable common_google_signin_btn_icon_dark_normal_background 0x0 -int drawable common_google_signin_btn_icon_disabled 0x0 -int drawable common_google_signin_btn_icon_light 0x0 -int drawable common_google_signin_btn_icon_light_focused 0x0 -int drawable common_google_signin_btn_icon_light_normal 0x0 -int drawable common_google_signin_btn_icon_light_normal_background 0x0 -int drawable common_google_signin_btn_text_dark 0x0 -int drawable common_google_signin_btn_text_dark_focused 0x0 -int drawable common_google_signin_btn_text_dark_normal 0x0 -int drawable common_google_signin_btn_text_dark_normal_background 0x0 -int drawable common_google_signin_btn_text_disabled 0x0 -int drawable common_google_signin_btn_text_light 0x0 -int drawable common_google_signin_btn_text_light_focused 0x0 -int drawable common_google_signin_btn_text_light_normal 0x0 -int drawable common_google_signin_btn_text_light_normal_background 0x0 -int drawable googleg_disabled_color_18 0x0 -int drawable googleg_standard_color_18 0x0 -int drawable notification_action_background 0x0 -int drawable notification_bg 0x0 -int drawable notification_bg_low 0x0 -int drawable notification_bg_low_normal 0x0 -int drawable notification_bg_low_pressed 0x0 -int drawable notification_bg_normal 0x0 -int drawable notification_bg_normal_pressed 0x0 -int drawable notification_icon_background 0x0 -int drawable notification_template_icon_bg 0x0 -int drawable notification_template_icon_low_bg 0x0 -int drawable notification_tile_bg 0x0 -int drawable notify_panel_notification_icon_bg 0x0 -int id accessibility_action_clickable_span 0x0 -int id accessibility_custom_action_0 0x0 -int id accessibility_custom_action_1 0x0 -int id accessibility_custom_action_10 0x0 -int id accessibility_custom_action_11 0x0 -int id accessibility_custom_action_12 0x0 -int id accessibility_custom_action_13 0x0 -int id accessibility_custom_action_14 0x0 -int id accessibility_custom_action_15 0x0 -int id accessibility_custom_action_16 0x0 -int id accessibility_custom_action_17 0x0 -int id accessibility_custom_action_18 0x0 -int id accessibility_custom_action_19 0x0 -int id accessibility_custom_action_2 0x0 -int id accessibility_custom_action_20 0x0 -int id accessibility_custom_action_21 0x0 -int id accessibility_custom_action_22 0x0 -int id accessibility_custom_action_23 0x0 -int id accessibility_custom_action_24 0x0 -int id accessibility_custom_action_25 0x0 -int id accessibility_custom_action_26 0x0 -int id accessibility_custom_action_27 0x0 -int id accessibility_custom_action_28 0x0 -int id accessibility_custom_action_29 0x0 -int id accessibility_custom_action_3 0x0 -int id accessibility_custom_action_30 0x0 -int id accessibility_custom_action_31 0x0 -int id accessibility_custom_action_4 0x0 -int id accessibility_custom_action_5 0x0 -int id accessibility_custom_action_6 0x0 -int id accessibility_custom_action_7 0x0 -int id accessibility_custom_action_8 0x0 -int id accessibility_custom_action_9 0x0 -int id action_container 0x0 -int id action_divider 0x0 -int id action_image 0x0 -int id action_text 0x0 -int id actions 0x0 -int id adjust_height 0x0 -int id adjust_width 0x0 -int id async 0x0 -int id auto 0x0 -int id blocking 0x0 -int id chronometer 0x0 -int id dark 0x0 -int id dialog_button 0x0 -int id forever 0x0 -int id fragment_container_view_tag 0x0 -int id icon 0x0 -int id icon_group 0x0 -int id icon_only 0x0 -int id info 0x0 -int id italic 0x0 -int id light 0x0 -int id line1 0x0 -int id line3 0x0 -int id none 0x0 -int id normal 0x0 -int id notification_background 0x0 -int id notification_main_column 0x0 -int id notification_main_column_container 0x0 -int id right_icon 0x0 -int id right_side 0x0 -int id standard 0x0 -int id tag_accessibility_actions 0x0 -int id tag_accessibility_clickable_spans 0x0 -int id tag_accessibility_heading 0x0 -int id tag_accessibility_pane_title 0x0 -int id tag_screen_reader_focusable 0x0 -int id tag_transition_group 0x0 -int id tag_unhandled_key_event_manager 0x0 -int id tag_unhandled_key_listeners 0x0 -int id text 0x0 -int id text2 0x0 -int id time 0x0 -int id title 0x0 -int id visible_removing_fragment_view_tag 0x0 -int id wide 0x0 -int integer google_play_services_version 0x0 -int integer status_bar_notification_info_maxnum 0x0 -int layout custom_dialog 0x0 -int layout notification_action 0x0 -int layout notification_action_tombstone 0x0 -int layout notification_template_custom_big 0x0 -int layout notification_template_icon_group 0x0 -int layout notification_template_part_chronometer 0x0 -int layout notification_template_part_time 0x0 -int string common_google_play_services_enable_button 0x0 -int string common_google_play_services_enable_text 0x0 -int string common_google_play_services_enable_title 0x0 -int string common_google_play_services_install_button 0x0 -int string common_google_play_services_install_text 0x0 -int string common_google_play_services_install_title 0x0 -int string common_google_play_services_notification_channel_name 0x0 -int string common_google_play_services_notification_ticker 0x0 -int string common_google_play_services_unknown_issue 0x0 -int string common_google_play_services_unsupported_text 0x0 -int string common_google_play_services_update_button 0x0 -int string common_google_play_services_update_text 0x0 -int string common_google_play_services_update_title 0x0 -int string common_google_play_services_updating_text 0x0 -int string common_google_play_services_wear_update_text 0x0 -int string common_open_on_phone 0x0 -int string common_signin_button_text 0x0 -int string common_signin_button_text_long 0x0 -int string status_bar_notification_info_overflow 0x0 -int style TextAppearance_Compat_Notification 0x0 -int style TextAppearance_Compat_Notification_Info 0x0 -int style TextAppearance_Compat_Notification_Line2 0x0 -int style TextAppearance_Compat_Notification_Time 0x0 -int style TextAppearance_Compat_Notification_Title 0x0 -int style Widget_Compat_NotificationActionContainer 0x0 -int style Widget_Compat_NotificationActionText 0x0 -int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5 } -int styleable ColorStateListItem_alpha 0 -int styleable ColorStateListItem_android_alpha 1 -int styleable ColorStateListItem_android_color 2 -int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } -int styleable FontFamily_fontProviderAuthority 0 -int styleable FontFamily_fontProviderCerts 1 -int styleable FontFamily_fontProviderFetchStrategy 2 -int styleable FontFamily_fontProviderFetchTimeout 3 -int styleable FontFamily_fontProviderPackage 4 -int styleable FontFamily_fontProviderQuery 5 -int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } -int styleable FontFamilyFont_android_font 0 -int styleable FontFamilyFont_android_fontStyle 1 -int styleable FontFamilyFont_android_fontVariationSettings 2 -int styleable FontFamilyFont_android_fontWeight 3 -int styleable FontFamilyFont_android_ttcIndex 4 -int styleable FontFamilyFont_font 5 -int styleable FontFamilyFont_fontStyle 6 -int styleable FontFamilyFont_fontVariationSettings 7 -int styleable FontFamilyFont_fontWeight 8 -int styleable FontFamilyFont_ttcIndex 9 -int[] styleable Fragment { 0x10100d0, 0x1010003, 0x10100d1 } -int styleable Fragment_android_id 0 -int styleable Fragment_android_name 1 -int styleable Fragment_android_tag 2 -int[] styleable FragmentContainerView { 0x1010003, 0x10100d1 } -int styleable FragmentContainerView_android_name 0 -int styleable FragmentContainerView_android_tag 1 -int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } -int styleable GradientColor_android_centerColor 0 -int styleable GradientColor_android_centerX 1 -int styleable GradientColor_android_centerY 2 -int styleable GradientColor_android_endColor 3 -int styleable GradientColor_android_endX 4 -int styleable GradientColor_android_endY 5 -int styleable GradientColor_android_gradientRadius 6 -int styleable GradientColor_android_startColor 7 -int styleable GradientColor_android_startX 8 -int styleable GradientColor_android_startY 9 -int styleable GradientColor_android_tileMode 10 -int styleable GradientColor_android_type 11 -int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } -int styleable GradientColorItem_android_color 0 -int styleable GradientColorItem_android_offset 1 -int[] styleable LoadingImageView { 0x0, 0x0, 0x0 } -int styleable LoadingImageView_circleCrop 0 -int styleable LoadingImageView_imageAspectRatio 1 -int styleable LoadingImageView_imageAspectRatioAdjust 2 -int[] styleable SignInButton { 0x0, 0x0, 0x0 } -int styleable SignInButton_buttonSize 0 -int styleable SignInButton_colorScheme 1 -int styleable SignInButton_scopeUris 2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/4655d808980b11d77847c99ac83647ff/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar deleted file mode 100644 index fc0dd60edfd84de2d8fc33e197676fed19726a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41569 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/50b6222e99095d52ad598066fee76674.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/50b6222e99095d52ad598066fee76674.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/576d4c4c5987824994a0a18c54c286f3.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/576d4c4c5987824994a0a18c54c286f3.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/595085c85ac612efa2ecd13485ee21ba.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/595085c85ac612efa2ecd13485ee21ba.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/63f7b3a68f5ad3cbb351e7590099b6d3.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/63f7b3a68f5ad3cbb351e7590099b6d3.bin deleted file mode 100644 index fcbf8d4b26..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/63f7b3a68f5ad3cbb351e7590099b6d3.bin +++ /dev/null @@ -1 +0,0 @@ -i/AndroidManifest.xml diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/65a7a5f8f4d6d1120fdca90dab9d3096.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/65a7a5f8f4d6d1120fdca90dab9d3096.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/687565ce8799d9db189fe5da87bd6a50.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/687565ce8799d9db189fe5da87bd6a50.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648.bin deleted file mode 100644 index decd0066b4..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0-runtime.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648/jetified-neoeyed-sdk-release-3.3.0-runtime.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/6d21730918cbb2808c0f356ff046e648/jetified-neoeyed-sdk-release-3.3.0-runtime.jar deleted file mode 100644 index a676d45c96247a7f6a6c96678d1db7584ce28539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81984 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6.bin deleted file mode 100644 index bc740494bc..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6.bin +++ /dev/null @@ -1 +0,0 @@ -o/com.neoeyed.sdk-r.txt diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6/com.neoeyed.sdk-r.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6/com.neoeyed.sdk-r.txt deleted file mode 100644 index 64bf923ef2..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/70ad6452c2c6737a6167538720b7a1f6/com.neoeyed.sdk-r.txt +++ /dev/null @@ -1,218 +0,0 @@ -com.neoeyed.sdk -anim fragment_close_enter -anim fragment_close_exit -anim fragment_fade_enter -anim fragment_fade_exit -anim fragment_fast_out_extra_slow_in -anim fragment_open_enter -anim fragment_open_exit -attr alpha -attr buttonSize -attr circleCrop -attr colorScheme -attr font -attr fontProviderAuthority -attr fontProviderCerts -attr fontProviderFetchStrategy -attr fontProviderFetchTimeout -attr fontProviderPackage -attr fontProviderQuery -attr fontStyle -attr fontVariationSettings -attr fontWeight -attr imageAspectRatio -attr imageAspectRatioAdjust -attr scopeUris -attr ttcIndex -color common_google_signin_btn_text_dark -color common_google_signin_btn_text_dark_default -color common_google_signin_btn_text_dark_disabled -color common_google_signin_btn_text_dark_focused -color common_google_signin_btn_text_dark_pressed -color common_google_signin_btn_text_light -color common_google_signin_btn_text_light_default -color common_google_signin_btn_text_light_disabled -color common_google_signin_btn_text_light_focused -color common_google_signin_btn_text_light_pressed -color common_google_signin_btn_tint -color notification_action_color_filter -color notification_icon_bg_color -color ripple_material_light -color secondary_text_default_material_light -dimen compat_button_inset_horizontal_material -dimen compat_button_inset_vertical_material -dimen compat_button_padding_horizontal_material -dimen compat_button_padding_vertical_material -dimen compat_control_corner_material -dimen compat_notification_large_icon_max_height -dimen compat_notification_large_icon_max_width -dimen notification_action_icon_size -dimen notification_action_text_size -dimen notification_big_circle_margin -dimen notification_content_margin_start -dimen notification_large_icon_height -dimen notification_large_icon_width -dimen notification_main_column_padding_top -dimen notification_media_narrow_margin -dimen notification_right_icon_size -dimen notification_right_side_padding_top -dimen notification_small_icon_background_padding -dimen notification_small_icon_size_as_large -dimen notification_subtext_size -dimen notification_top_pad -dimen notification_top_pad_large_text -drawable common_full_open_on_phone -drawable common_google_signin_btn_icon_dark -drawable common_google_signin_btn_icon_dark_focused -drawable common_google_signin_btn_icon_dark_normal -drawable common_google_signin_btn_icon_dark_normal_background -drawable common_google_signin_btn_icon_disabled -drawable common_google_signin_btn_icon_light -drawable common_google_signin_btn_icon_light_focused -drawable common_google_signin_btn_icon_light_normal -drawable common_google_signin_btn_icon_light_normal_background -drawable common_google_signin_btn_text_dark -drawable common_google_signin_btn_text_dark_focused -drawable common_google_signin_btn_text_dark_normal -drawable common_google_signin_btn_text_dark_normal_background -drawable common_google_signin_btn_text_disabled -drawable common_google_signin_btn_text_light -drawable common_google_signin_btn_text_light_focused -drawable common_google_signin_btn_text_light_normal -drawable common_google_signin_btn_text_light_normal_background -drawable googleg_disabled_color_18 -drawable googleg_standard_color_18 -drawable notification_action_background -drawable notification_bg -drawable notification_bg_low -drawable notification_bg_low_normal -drawable notification_bg_low_pressed -drawable notification_bg_normal -drawable notification_bg_normal_pressed -drawable notification_icon_background -drawable notification_template_icon_bg -drawable notification_template_icon_low_bg -drawable notification_tile_bg -drawable notify_panel_notification_icon_bg -id accessibility_action_clickable_span -id accessibility_custom_action_0 -id accessibility_custom_action_1 -id accessibility_custom_action_10 -id accessibility_custom_action_11 -id accessibility_custom_action_12 -id accessibility_custom_action_13 -id accessibility_custom_action_14 -id accessibility_custom_action_15 -id accessibility_custom_action_16 -id accessibility_custom_action_17 -id accessibility_custom_action_18 -id accessibility_custom_action_19 -id accessibility_custom_action_2 -id accessibility_custom_action_20 -id accessibility_custom_action_21 -id accessibility_custom_action_22 -id accessibility_custom_action_23 -id accessibility_custom_action_24 -id accessibility_custom_action_25 -id accessibility_custom_action_26 -id accessibility_custom_action_27 -id accessibility_custom_action_28 -id accessibility_custom_action_29 -id accessibility_custom_action_3 -id accessibility_custom_action_30 -id accessibility_custom_action_31 -id accessibility_custom_action_4 -id accessibility_custom_action_5 -id accessibility_custom_action_6 -id accessibility_custom_action_7 -id accessibility_custom_action_8 -id accessibility_custom_action_9 -id action_container -id action_divider -id action_image -id action_text -id actions -id adjust_height -id adjust_width -id async -id auto -id blocking -id chronometer -id dark -id dialog_button -id forever -id fragment_container_view_tag -id icon -id icon_group -id icon_only -id info -id italic -id light -id line1 -id line3 -id none -id normal -id notification_background -id notification_main_column -id notification_main_column_container -id right_icon -id right_side -id standard -id tag_accessibility_actions -id tag_accessibility_clickable_spans -id tag_accessibility_heading -id tag_accessibility_pane_title -id tag_screen_reader_focusable -id tag_transition_group -id tag_unhandled_key_event_manager -id tag_unhandled_key_listeners -id text -id text2 -id time -id title -id visible_removing_fragment_view_tag -id wide -integer google_play_services_version -integer status_bar_notification_info_maxnum -layout custom_dialog -layout notification_action -layout notification_action_tombstone -layout notification_template_custom_big -layout notification_template_icon_group -layout notification_template_part_chronometer -layout notification_template_part_time -string common_google_play_services_enable_button -string common_google_play_services_enable_text -string common_google_play_services_enable_title -string common_google_play_services_install_button -string common_google_play_services_install_text -string common_google_play_services_install_title -string common_google_play_services_notification_channel_name -string common_google_play_services_notification_ticker -string common_google_play_services_unknown_issue -string common_google_play_services_unsupported_text -string common_google_play_services_update_button -string common_google_play_services_update_text -string common_google_play_services_update_title -string common_google_play_services_updating_text -string common_google_play_services_wear_update_text -string common_open_on_phone -string common_signin_button_text -string common_signin_button_text_long -string status_bar_notification_info_overflow -style TextAppearance_Compat_Notification -style TextAppearance_Compat_Notification_Info -style TextAppearance_Compat_Notification_Line2 -style TextAppearance_Compat_Notification_Time -style TextAppearance_Compat_Notification_Title -style Widget_Compat_NotificationActionContainer -style Widget_Compat_NotificationActionText -styleable ColorStateListItem alpha android_alpha android_color -styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery -styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex -styleable Fragment android_id android_name android_tag -styleable FragmentContainerView android_name android_tag -styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type -styleable GradientColorItem android_color android_offset -styleable LoadingImageView circleCrop imageAspectRatio imageAspectRatioAdjust -styleable SignInButton buttonSize colorScheme scopeUris diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/7ae1b32e15e4bceb093254cb31ac2eeb.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/7ae1b32e15e4bceb093254cb31ac2eeb.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/8f0007c34ba2d232e91916ebec6bba94.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/8f0007c34ba2d232e91916ebec6bba94.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3.bin deleted file mode 100644 index f527fe3967..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml b/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml deleted file mode 100644 index e814731d3f..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties b/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties deleted file mode 100644 index d8560bd4e2..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties +++ /dev/null @@ -1,2 +0,0 @@ -aarFormatVersion=1.0 -aarMetadataVersion=1.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/R.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/R.txt deleted file mode 100644 index c68b87c7af..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/R.txt +++ /dev/null @@ -1,261 +0,0 @@ -int anim fragment_close_enter 0x0 -int anim fragment_close_exit 0x0 -int anim fragment_fade_enter 0x0 -int anim fragment_fade_exit 0x0 -int anim fragment_fast_out_extra_slow_in 0x0 -int anim fragment_open_enter 0x0 -int anim fragment_open_exit 0x0 -int attr alpha 0x0 -int attr buttonSize 0x0 -int attr circleCrop 0x0 -int attr colorScheme 0x0 -int attr font 0x0 -int attr fontProviderAuthority 0x0 -int attr fontProviderCerts 0x0 -int attr fontProviderFetchStrategy 0x0 -int attr fontProviderFetchTimeout 0x0 -int attr fontProviderPackage 0x0 -int attr fontProviderQuery 0x0 -int attr fontStyle 0x0 -int attr fontVariationSettings 0x0 -int attr fontWeight 0x0 -int attr imageAspectRatio 0x0 -int attr imageAspectRatioAdjust 0x0 -int attr scopeUris 0x0 -int attr ttcIndex 0x0 -int color common_google_signin_btn_text_dark 0x0 -int color common_google_signin_btn_text_dark_default 0x0 -int color common_google_signin_btn_text_dark_disabled 0x0 -int color common_google_signin_btn_text_dark_focused 0x0 -int color common_google_signin_btn_text_dark_pressed 0x0 -int color common_google_signin_btn_text_light 0x0 -int color common_google_signin_btn_text_light_default 0x0 -int color common_google_signin_btn_text_light_disabled 0x0 -int color common_google_signin_btn_text_light_focused 0x0 -int color common_google_signin_btn_text_light_pressed 0x0 -int color common_google_signin_btn_tint 0x0 -int color notification_action_color_filter 0x0 -int color notification_icon_bg_color 0x0 -int color ripple_material_light 0x0 -int color secondary_text_default_material_light 0x0 -int dimen compat_button_inset_horizontal_material 0x0 -int dimen compat_button_inset_vertical_material 0x0 -int dimen compat_button_padding_horizontal_material 0x0 -int dimen compat_button_padding_vertical_material 0x0 -int dimen compat_control_corner_material 0x0 -int dimen compat_notification_large_icon_max_height 0x0 -int dimen compat_notification_large_icon_max_width 0x0 -int dimen notification_action_icon_size 0x0 -int dimen notification_action_text_size 0x0 -int dimen notification_big_circle_margin 0x0 -int dimen notification_content_margin_start 0x0 -int dimen notification_large_icon_height 0x0 -int dimen notification_large_icon_width 0x0 -int dimen notification_main_column_padding_top 0x0 -int dimen notification_media_narrow_margin 0x0 -int dimen notification_right_icon_size 0x0 -int dimen notification_right_side_padding_top 0x0 -int dimen notification_small_icon_background_padding 0x0 -int dimen notification_small_icon_size_as_large 0x0 -int dimen notification_subtext_size 0x0 -int dimen notification_top_pad 0x0 -int dimen notification_top_pad_large_text 0x0 -int drawable common_full_open_on_phone 0x0 -int drawable common_google_signin_btn_icon_dark 0x0 -int drawable common_google_signin_btn_icon_dark_focused 0x0 -int drawable common_google_signin_btn_icon_dark_normal 0x0 -int drawable common_google_signin_btn_icon_dark_normal_background 0x0 -int drawable common_google_signin_btn_icon_disabled 0x0 -int drawable common_google_signin_btn_icon_light 0x0 -int drawable common_google_signin_btn_icon_light_focused 0x0 -int drawable common_google_signin_btn_icon_light_normal 0x0 -int drawable common_google_signin_btn_icon_light_normal_background 0x0 -int drawable common_google_signin_btn_text_dark 0x0 -int drawable common_google_signin_btn_text_dark_focused 0x0 -int drawable common_google_signin_btn_text_dark_normal 0x0 -int drawable common_google_signin_btn_text_dark_normal_background 0x0 -int drawable common_google_signin_btn_text_disabled 0x0 -int drawable common_google_signin_btn_text_light 0x0 -int drawable common_google_signin_btn_text_light_focused 0x0 -int drawable common_google_signin_btn_text_light_normal 0x0 -int drawable common_google_signin_btn_text_light_normal_background 0x0 -int drawable googleg_disabled_color_18 0x0 -int drawable googleg_standard_color_18 0x0 -int drawable notification_action_background 0x0 -int drawable notification_bg 0x0 -int drawable notification_bg_low 0x0 -int drawable notification_bg_low_normal 0x0 -int drawable notification_bg_low_pressed 0x0 -int drawable notification_bg_normal 0x0 -int drawable notification_bg_normal_pressed 0x0 -int drawable notification_icon_background 0x0 -int drawable notification_template_icon_bg 0x0 -int drawable notification_template_icon_low_bg 0x0 -int drawable notification_tile_bg 0x0 -int drawable notify_panel_notification_icon_bg 0x0 -int id accessibility_action_clickable_span 0x0 -int id accessibility_custom_action_0 0x0 -int id accessibility_custom_action_1 0x0 -int id accessibility_custom_action_10 0x0 -int id accessibility_custom_action_11 0x0 -int id accessibility_custom_action_12 0x0 -int id accessibility_custom_action_13 0x0 -int id accessibility_custom_action_14 0x0 -int id accessibility_custom_action_15 0x0 -int id accessibility_custom_action_16 0x0 -int id accessibility_custom_action_17 0x0 -int id accessibility_custom_action_18 0x0 -int id accessibility_custom_action_19 0x0 -int id accessibility_custom_action_2 0x0 -int id accessibility_custom_action_20 0x0 -int id accessibility_custom_action_21 0x0 -int id accessibility_custom_action_22 0x0 -int id accessibility_custom_action_23 0x0 -int id accessibility_custom_action_24 0x0 -int id accessibility_custom_action_25 0x0 -int id accessibility_custom_action_26 0x0 -int id accessibility_custom_action_27 0x0 -int id accessibility_custom_action_28 0x0 -int id accessibility_custom_action_29 0x0 -int id accessibility_custom_action_3 0x0 -int id accessibility_custom_action_30 0x0 -int id accessibility_custom_action_31 0x0 -int id accessibility_custom_action_4 0x0 -int id accessibility_custom_action_5 0x0 -int id accessibility_custom_action_6 0x0 -int id accessibility_custom_action_7 0x0 -int id accessibility_custom_action_8 0x0 -int id accessibility_custom_action_9 0x0 -int id action_container 0x0 -int id action_divider 0x0 -int id action_image 0x0 -int id action_text 0x0 -int id actions 0x0 -int id adjust_height 0x0 -int id adjust_width 0x0 -int id async 0x0 -int id auto 0x0 -int id blocking 0x0 -int id chronometer 0x0 -int id dark 0x0 -int id dialog_button 0x0 -int id forever 0x0 -int id fragment_container_view_tag 0x0 -int id icon 0x0 -int id icon_group 0x0 -int id icon_only 0x0 -int id info 0x0 -int id italic 0x0 -int id light 0x0 -int id line1 0x0 -int id line3 0x0 -int id none 0x0 -int id normal 0x0 -int id notification_background 0x0 -int id notification_main_column 0x0 -int id notification_main_column_container 0x0 -int id right_icon 0x0 -int id right_side 0x0 -int id standard 0x0 -int id tag_accessibility_actions 0x0 -int id tag_accessibility_clickable_spans 0x0 -int id tag_accessibility_heading 0x0 -int id tag_accessibility_pane_title 0x0 -int id tag_screen_reader_focusable 0x0 -int id tag_transition_group 0x0 -int id tag_unhandled_key_event_manager 0x0 -int id tag_unhandled_key_listeners 0x0 -int id text 0x0 -int id text2 0x0 -int id time 0x0 -int id title 0x0 -int id visible_removing_fragment_view_tag 0x0 -int id wide 0x0 -int integer google_play_services_version 0x0 -int integer status_bar_notification_info_maxnum 0x0 -int layout custom_dialog 0x0 -int layout notification_action 0x0 -int layout notification_action_tombstone 0x0 -int layout notification_template_custom_big 0x0 -int layout notification_template_icon_group 0x0 -int layout notification_template_part_chronometer 0x0 -int layout notification_template_part_time 0x0 -int string common_google_play_services_enable_button 0x0 -int string common_google_play_services_enable_text 0x0 -int string common_google_play_services_enable_title 0x0 -int string common_google_play_services_install_button 0x0 -int string common_google_play_services_install_text 0x0 -int string common_google_play_services_install_title 0x0 -int string common_google_play_services_notification_channel_name 0x0 -int string common_google_play_services_notification_ticker 0x0 -int string common_google_play_services_unknown_issue 0x0 -int string common_google_play_services_unsupported_text 0x0 -int string common_google_play_services_update_button 0x0 -int string common_google_play_services_update_text 0x0 -int string common_google_play_services_update_title 0x0 -int string common_google_play_services_updating_text 0x0 -int string common_google_play_services_wear_update_text 0x0 -int string common_open_on_phone 0x0 -int string common_signin_button_text 0x0 -int string common_signin_button_text_long 0x0 -int string status_bar_notification_info_overflow 0x0 -int style TextAppearance_Compat_Notification 0x0 -int style TextAppearance_Compat_Notification_Info 0x0 -int style TextAppearance_Compat_Notification_Line2 0x0 -int style TextAppearance_Compat_Notification_Time 0x0 -int style TextAppearance_Compat_Notification_Title 0x0 -int style Widget_Compat_NotificationActionContainer 0x0 -int style Widget_Compat_NotificationActionText 0x0 -int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5 } -int styleable ColorStateListItem_alpha 0 -int styleable ColorStateListItem_android_alpha 1 -int styleable ColorStateListItem_android_color 2 -int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } -int styleable FontFamily_fontProviderAuthority 0 -int styleable FontFamily_fontProviderCerts 1 -int styleable FontFamily_fontProviderFetchStrategy 2 -int styleable FontFamily_fontProviderFetchTimeout 3 -int styleable FontFamily_fontProviderPackage 4 -int styleable FontFamily_fontProviderQuery 5 -int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } -int styleable FontFamilyFont_android_font 0 -int styleable FontFamilyFont_android_fontStyle 1 -int styleable FontFamilyFont_android_fontVariationSettings 2 -int styleable FontFamilyFont_android_fontWeight 3 -int styleable FontFamilyFont_android_ttcIndex 4 -int styleable FontFamilyFont_font 5 -int styleable FontFamilyFont_fontStyle 6 -int styleable FontFamilyFont_fontVariationSettings 7 -int styleable FontFamilyFont_fontWeight 8 -int styleable FontFamilyFont_ttcIndex 9 -int[] styleable Fragment { 0x10100d0, 0x1010003, 0x10100d1 } -int styleable Fragment_android_id 0 -int styleable Fragment_android_name 1 -int styleable Fragment_android_tag 2 -int[] styleable FragmentContainerView { 0x1010003, 0x10100d1 } -int styleable FragmentContainerView_android_name 0 -int styleable FragmentContainerView_android_tag 1 -int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } -int styleable GradientColor_android_centerColor 0 -int styleable GradientColor_android_centerX 1 -int styleable GradientColor_android_centerY 2 -int styleable GradientColor_android_endColor 3 -int styleable GradientColor_android_endX 4 -int styleable GradientColor_android_endY 5 -int styleable GradientColor_android_gradientRadius 6 -int styleable GradientColor_android_startColor 7 -int styleable GradientColor_android_startX 8 -int styleable GradientColor_android_startY 9 -int styleable GradientColor_android_tileMode 10 -int styleable GradientColor_android_type 11 -int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } -int styleable GradientColorItem_android_color 0 -int styleable GradientColorItem_android_offset 1 -int[] styleable LoadingImageView { 0x0, 0x0, 0x0 } -int styleable LoadingImageView_circleCrop 0 -int styleable LoadingImageView_imageAspectRatio 1 -int styleable LoadingImageView_imageAspectRatioAdjust 2 -int[] styleable SignInButton { 0x0, 0x0, 0x0 } -int styleable SignInButton_buttonSize 0 -int styleable SignInButton_colorScheme 1 -int styleable SignInButton_scopeUris 2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/900dcb22a40e6fc6af3f8b312a60c7b3/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar deleted file mode 100644 index fc0dd60edfd84de2d8fc33e197676fed19726a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41569 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/9ac3b51d3c763f5be029e25486c1eb6a.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/9ac3b51d3c763f5be029e25486c1eb6a.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5.bin deleted file mode 100644 index 52a3fd682a..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0.aar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5/jetified-neoeyed-sdk-release-3.3.0.aar b/neoeyed-sdk-release-3.3.0/build/.transforms/9bf49bfd1ec0861f115fabd01c8168b5/jetified-neoeyed-sdk-release-3.3.0.aar deleted file mode 100644 index 414b3c7a86ad966f5000b7746ceebd59f15743bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a3eac6dbd0bcb12e1c00045be558cc10.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/a3eac6dbd0bcb12e1c00045be558cc10.bin deleted file mode 100644 index 63dace7e60..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/a3eac6dbd0bcb12e1c00045be558cc10.bin +++ /dev/null @@ -1 +0,0 @@ -i/META-INF/com/android/build/gradle/aar-metadata.properties diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a790a1855d616f5fe732b005d3ebe4ef.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/a790a1855d616f5fe732b005d3ebe4ef.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/bc7e14d75cdd8298a51471b8439634b4.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/bc7e14d75cdd8298a51471b8439634b4.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e.bin deleted file mode 100644 index decd0066b4..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e.bin +++ /dev/null @@ -1 +0,0 @@ -o/jetified-neoeyed-sdk-release-3.3.0-runtime.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e/jetified-neoeyed-sdk-release-3.3.0-runtime.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/c69f1c9c82deed680c03f574ef064f6e/jetified-neoeyed-sdk-release-3.3.0-runtime.jar deleted file mode 100644 index a676d45c96247a7f6a6c96678d1db7584ce28539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81984 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 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/c76552f22a7c6987983b67a428d78856.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/c76552f22a7c6987983b67a428d78856.bin deleted file mode 100644 index fb0cbb18e6..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/c76552f22a7c6987983b67a428d78856.bin +++ /dev/null @@ -1 +0,0 @@ -o/com.neoeyed.sdk diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/e6a4eabdae60fb0dad4d6464c68d9f1c.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/e6a4eabdae60fb0dad4d6464c68d9f1c.bin deleted file mode 100644 index fcbf8d4b26..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/e6a4eabdae60fb0dad4d6464c68d9f1c.bin +++ /dev/null @@ -1 +0,0 @@ -i/AndroidManifest.xml diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/f6bb3f1ea40bc6e17eb08f9e2e84b1e5.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/f6bb3f1ea40bc6e17eb08f9e2e84b1e5.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/f89647cb4edf4215a7f4f2b2c6127f73.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/f89647cb4edf4215a7f4f2b2c6127f73.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/fde1c47541908ce22f841752f228ada1.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/fde1c47541908ce22f841752f228ada1.bin deleted file mode 100644 index 63dace7e60..0000000000 --- a/neoeyed-sdk-release-3.3.0/build/.transforms/fde1c47541908ce22f841752f228ada1.bin +++ /dev/null @@ -1 +0,0 @@ -i/META-INF/com/android/build/gradle/aar-metadata.properties From 78eb2cf753fb30ed27ee5588781fe9f6cbee21fb Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Thu, 21 Oct 2021 23:45:24 +0530 Subject: [PATCH 25/53] exit status for a positive case check --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index fe873a04ca..93995603aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,8 +37,9 @@ RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit; EX2=\"\$?\";\ - if [[ $EX2 == 0 ]]; then exit 0; else exit 1; fi; \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup && \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests && \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ From 7f60fc7febdd4f07ce8fab73b083501556904b5f Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Fri, 22 Oct 2021 12:30:05 +0530 Subject: [PATCH 26/53] toolbar sticky --- .../res/layout/activity_buyingflow_sip.xml | 719 ++--- .../main/res/layout/mutualfund_activity.xml | 2515 +++++++++-------- navi-amc/src/main/res/values/colors.xml | 1 + 3 files changed, 1636 insertions(+), 1599 deletions(-) diff --git a/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml b/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml index 8fbbc8e8cb..6bf14c90a6 100644 --- a/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml +++ b/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml @@ -34,45 +34,46 @@ android:layout_height="match_parent" android:background="@color/white"> - - - + android:layout_height="wrap_content" + android:background="@color/color_FBFBFB"> - - - + + + - + + + + + + + + + app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + - - - - - - - - - - - - + - + + + app:layout_constraintStart_toEndOf="@id/tvSip" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + android:id="@+id/amountTotalText" + style="@style/TextStyle.tv_size_16sp" + android:layout_marginTop="@dimen/_16dp" + android:text="@string/investment_amount" + android:textColor="@color/color_22223D" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/tv5000"> + app:layout_constraintTop_toTopOf="parent"> - - + app:layout_constraintTop_toTopOf="parent" /> - - - + - + - + - - - + - + - - - - - - - - - - - + + + + + + + + + + diff --git a/navi-amc/src/main/res/layout/mutualfund_activity.xml b/navi-amc/src/main/res/layout/mutualfund_activity.xml index dc7dee6331..c891c4d424 100644 --- a/navi-amc/src/main/res/layout/mutualfund_activity.xml +++ b/navi-amc/src/main/res/layout/mutualfund_activity.xml @@ -46,7 +46,60 @@ android:id="@+id/mutualfundParent" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#FBFBFB"> + android:background="@color/color_FBFBFB" + > + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/toolbar"> + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/_8dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - + app:layout_constraintTop_toTopOf="parent"> - - - - + app:layout_constraintTop_toTopOf="parent" /> - + - + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + android:text="@string/cagr" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + + + + - - - + app:layout_constraintTop_toBottomOf="@+id/view2" /> - + + + + + + + + - + + + + + + + + + - + + + + + + + + + - + + + + + + + + + + + - - + + + + + + + + + - - + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + app:layout_constraintTop_toBottomOf="@+id/tvForThePeriodOF"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@drawable/ic_circular_orange" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginTop="@dimen/_16dp" + android:text="Minimum Investment Amount" + app:layout_constraintStart_toEndOf="@+id/ivMinimumInvestmentAmt" + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="@+id/tvMinimumInvestmentAmt" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1379,9 +1404,9 @@ android:layout_height="@dimen/_48dp" android:layout_margin="@dimen/_10dp" android:gravity="center" - android:textAlignment="center" android:onClick="@{(v)->mutualfundviewmodel.onClick(v)}" android:text="@string/invest_now" + android:textAlignment="center" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/navi-amc/src/main/res/values/colors.xml b/navi-amc/src/main/res/values/colors.xml index 4117515323..e1ac54bcca 100644 --- a/navi-amc/src/main/res/values/colors.xml +++ b/navi-amc/src/main/res/values/colors.xml @@ -20,6 +20,7 @@ #14BC51 #EE7765 #225156 + #FBFBFB #99000000 #E5E5E5 #392D40 From 73778aa71c650af5847884aeb5b72bcb98e375a4 Mon Sep 17 00:00:00 2001 From: rahul bhat Date: Fri, 22 Oct 2021 15:56:57 +0530 Subject: [PATCH 27/53] cta should be null. (#1669) --- app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt b/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt index 13e193844f..dc79aedfa1 100644 --- a/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt +++ b/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt @@ -282,7 +282,7 @@ object BindingAdapterUtil { ) { greetingCardData?.let { greetingCardView.visibility = View.VISIBLE - greetingCardView.setProperties(it.title, it.iconCode, CtaData(url = "HOME")) + greetingCardView.setProperties(it.title, it.iconCode) } ?: run { greetingCardView.visibility = View.GONE } } From 131731312788781148cb68db7783f93b401699ab Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Mon, 25 Oct 2021 10:01:50 +0530 Subject: [PATCH 28/53] shanakar review comments issue resolved --- .../amc/investorapp/response/ResponseInvestmentDetails.kt | 4 ++-- .../com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt | 2 -- .../amc/investorapp/ui/investment/OrderInProgressAdapter.kt | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt index 148634575a..75c0e114d3 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt @@ -29,8 +29,8 @@ data class ResponseInvestmentDetails( ) data class OrdersInProgres( -// @SerializedName("allotted_units") -// var allottedUnits: String? = "", // 15 + @SerializedName("allotted_units") + var allottedUnits: String? = "", // 15 @SerializedName("amount") var amount: String? = "", // 35000 @SerializedName("confirmed_at") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt index 74b48753b6..986b1bdacf 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt @@ -121,11 +121,9 @@ class HomeScreenFragment : BaseFragment Date: Mon, 25 Oct 2021 10:50:43 +0530 Subject: [PATCH 29/53] Removing neoEyed sdk dependency from app, since it's in analytics module --- app/build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1be92623da..b5098d3572 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -360,8 +360,6 @@ dependencies { implementation 'com.android.support:support-annotations:28.0.0' - implementation project(":neoeyed-sdk-release-3.3.1") - implementation 'com.google.dagger:hilt-android:2.38.1' kapt 'com.google.dagger:hilt-compiler:2.38.1' From 9f957538b380d9cb2f087decb346b94ec8c91ab3 Mon Sep 17 00:00:00 2001 From: Shankar Yadav Date: Mon, 25 Oct 2021 12:40:33 +0530 Subject: [PATCH 30/53] Redirection for MAC --- navi-amc/src/main/AndroidManifest.xml | 9 +++ .../constants/AnalyticsConstant.kt | 2 + .../navigator/NaviAmcDeeplinkNavigator.kt | 17 +++++- .../ui/activity/OnBoardingLoadingActivity.kt | 58 +++++++++++++++++++ .../ui/panCard/OnBoardingLoadingVM.kt | 7 +++ .../ui/setup_account/KycDocumentsActivity.kt | 3 +- .../layout/activity_onboarding_loading.xml | 35 +++++++++++ navi-amc/src/main/res/values/strings.xml | 1 + 8 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt create mode 100644 navi-amc/src/main/res/layout/activity_onboarding_loading.xml diff --git a/navi-amc/src/main/AndroidManifest.xml b/navi-amc/src/main/AndroidManifest.xml index 0b0974b6cc..c2fc969222 100644 --- a/navi-amc/src/main/AndroidManifest.xml +++ b/navi-amc/src/main/AndroidManifest.xml @@ -120,6 +120,15 @@ + + + + + diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt index a052148267..dfba549c81 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt @@ -41,6 +41,7 @@ object AnalyticsConstant { const val OtpVerificationActivity = "OtpVerificationActivity" const val VerifyPanCardActivity = "AMC_Pan_Page" const val VerifyPanLoaderScreen = "VerifyPanLoaderScreen" + const val OnBoardingLoaderScreen = "OnBoardingLoaderScreen" const val PaymentSuccessActivity = "PaymentSuccessActivity" const val SelectPaymentModeActivity = "SelectPaymentModeActivity" const val AboutIncomeActivity = "AMC_Personal_Details" @@ -53,6 +54,7 @@ object AnalyticsConstant { const val SetupYourActivity = "AMC_Setup_Account" const val SIPPaymentActivity = "SIPPaymentActivity" const val SipActivity = "SipActivity" + const val KycDocumentsActivity = "KycDocumentsActivity" class HomeScreen { fun onHomeScreenInvestNowClick() = NaviTrackEvent.trackEvent("AMC_HomeScreen_InvestNow") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt index a3a8f53c32..6d397d213a 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt @@ -5,9 +5,13 @@ import android.content.Intent import android.os.Bundle import com.navi.amc.investorapp.constants.Constant import com.navi.amc.investorapp.constants.EXTRA_FROM +import com.navi.amc.investorapp.ui.activity.OnBoardingLoadingActivity import com.navi.amc.investorapp.ui.home.HomeActivity import com.navi.amc.investorapp.ui.investment.MyInvestmentActivity +import com.navi.amc.investorapp.ui.panCard.VerifyPanCardActivity import com.navi.amc.investorapp.ui.profile.MyLumpsumOrdersActivity +import com.navi.amc.investorapp.ui.setup_account.KycDocumentsActivity +import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity import com.navi.amc.investorapp.util.orFalse import com.navi.amc.investorapp.util.orZero import com.navi.common.model.CtaData @@ -20,6 +24,11 @@ object NaviAmcDeeplinkNavigator { private const val SELL_ORDER = "sell_order" private const val BUY_ORDER = "buy_order" private const val INVESTMENT = "investment" + private const val ONBOARD_LOADING = "loading" + private const val KYC_INTRO = "kyc-intro" + private const val NON_KYC_INTRO = "non-kyc-intro" + private const val PAN = "pan" + fun navigate( activity: Activity?, ctaData: CtaData, @@ -44,13 +53,19 @@ object NaviAmcDeeplinkNavigator { intent?.putExtra(EXTRA_FROM, Constant.AMC_BUY_ORDER_PAGE) } INVESTMENT -> intent = Intent(activity, MyInvestmentActivity::class.java) + ONBOARD_LOADING -> intent = + Intent(activity, OnBoardingLoadingActivity::class.java) + NON_KYC_INTRO -> intent = Intent(activity, SetupYourActivity::class.java) + KYC_INTRO -> intent = Intent(activity, KycDocumentsActivity::class.java) + PAN -> intent = Intent(activity, VerifyPanCardActivity::class.java) + } ctaData.parameters?.forEach { keyValue -> bundle.putString(keyValue.key, keyValue.value) } intent?.let { intent -> intent.putExtras(bundle) - intent.putExtra(Constants.SECOND_IDENTIFIER, it.getOrNull(1)) + intent.putExtra(Constants.SECOND_IDENTIFIER, it.getOrNull(2)) if (needsResult.orFalse()) { activity?.startActivityForResult(intent, requestCode.orZero()) } else activity?.startActivity(intent) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt new file mode 100644 index 0000000000..b9f239f569 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt @@ -0,0 +1,58 @@ +package com.navi.amc.investorapp.ui.activity + +import android.os.Bundle +import androidx.lifecycle.lifecycleScope +import com.navi.amc.investorapp.R +import com.navi.amc.investorapp.base.BaseActivity +import com.navi.amc.investorapp.constants.AnalyticsConstant +import com.navi.amc.investorapp.databinding.ActivityVerifyPanLoaderBinding +import com.navi.amc.investorapp.extension.* +import com.navi.amc.investorapp.navigator.NaviAmcDeeplinkNavigator +import com.navi.amc.investorapp.ui.panCard.OnBoardingLoadingVM +import com.navi.common.model.CtaData +import com.navi.common.utils.Constants +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +class OnBoardingLoadingActivity : + BaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + statusBarTransparent() + bindViewModel() + init() + initControl() + lifecycleScope.launch { + delay(3000) + navigateToNextScreen() + } + } + + private fun navigateToNextScreen() { + val screen = intent.getStringExtra(Constants.SECOND_IDENTIFIER) + NaviAmcDeeplinkNavigator.navigate( + this, + CtaData(url = NaviAmcDeeplinkNavigator.AMC.plus("/").plus(screen)), + true + ) + } + + override val layoutRes: Int + get() = R.layout.activity_onboarding_loading + override val viewModelClass: Class + get() = OnBoardingLoadingVM::class.java + + override fun bindViewModel() { + } + + override fun init() { + } + + override fun initControl() { + } + + override val screenName: String + get() = AnalyticsConstant.OnBoardingLoaderScreen +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt new file mode 100644 index 0000000000..97e93100d1 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt @@ -0,0 +1,7 @@ +package com.navi.amc.investorapp.ui.panCard + +import com.navi.amc.investorapp.base.BaseViewModel + +class OnBoardingLoadingVM : BaseViewModel() { + +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt index 611c4631e2..09f8af6e09 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt @@ -3,6 +3,7 @@ package com.navi.amc.investorapp.ui.setup_account import android.os.Bundle import com.navi.amc.investorapp.R import com.navi.amc.investorapp.base.BaseActivity +import com.navi.amc.investorapp.constants.AnalyticsConstant import com.navi.amc.investorapp.databinding.ActivityKycDocumentsBinding import com.navi.amc.investorapp.extension.checkInternetSnackBar import com.navi.amc.investorapp.extension.goto @@ -23,7 +24,7 @@ class KycDocumentsActivity : BaseActivity + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/values/strings.xml b/navi-amc/src/main/res/values/strings.xml index a24857f843..e28f000144 100644 --- a/navi-amc/src/main/res/values/strings.xml +++ b/navi-amc/src/main/res/values/strings.xml @@ -544,6 +544,7 @@ Speak the digits below while recording Tips for great video Retake video + Complete your account setup\nto invest in Navi ICICI BANK HDFC BANK From 009cb214bfa9f9927a58c0a35f17725276b856c9 Mon Sep 17 00:00:00 2001 From: Shankar Yadav Date: Mon, 25 Oct 2021 13:33:39 +0530 Subject: [PATCH 31/53] fix typo --- .../amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt index 6d397d213a..d1dd987a1d 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt @@ -25,8 +25,8 @@ object NaviAmcDeeplinkNavigator { private const val BUY_ORDER = "buy_order" private const val INVESTMENT = "investment" private const val ONBOARD_LOADING = "loading" - private const val KYC_INTRO = "kyc-intro" - private const val NON_KYC_INTRO = "non-kyc-intro" + private const val KYC_COMPLIANT_INTRO = "kyc-intro" + private const val KYC_NON_COMPLIANT_INTRO = "non-kyc-intro" private const val PAN = "pan" fun navigate( @@ -55,8 +55,8 @@ object NaviAmcDeeplinkNavigator { INVESTMENT -> intent = Intent(activity, MyInvestmentActivity::class.java) ONBOARD_LOADING -> intent = Intent(activity, OnBoardingLoadingActivity::class.java) - NON_KYC_INTRO -> intent = Intent(activity, SetupYourActivity::class.java) - KYC_INTRO -> intent = Intent(activity, KycDocumentsActivity::class.java) + KYC_COMPLIANT_INTRO -> intent = Intent(activity, SetupYourActivity::class.java) + KYC_NON_COMPLIANT_INTRO -> intent = Intent(activity, KycDocumentsActivity::class.java) PAN -> intent = Intent(activity, VerifyPanCardActivity::class.java) } From 2bc3b0832d8c3fb40c166a24f9ca15f99e49cf38 Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Mon, 25 Oct 2021 13:47:06 +0530 Subject: [PATCH 32/53] pancard number number fixes --- navi-amc/src/main/AndroidManifest.xml | 4 ++-- .../java/com/navi/amc/investorapp/response/ResponseCommon.kt | 2 +- .../investorapp/ui/otpVerification/OtpVerificationActivity.kt | 4 ++-- .../navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt | 4 ++-- navi-amc/src/main/res/layout/mutualfund_activity.xml | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/navi-amc/src/main/AndroidManifest.xml b/navi-amc/src/main/AndroidManifest.xml index 0b0974b6cc..ef9d746967 100644 --- a/navi-amc/src/main/AndroidManifest.xml +++ b/navi-amc/src/main/AndroidManifest.xml @@ -96,7 +96,7 @@ android:name=".ui.investment.MyInvestmentActivity" android:parentActivityName=".ui.home.HomeActivity" android:screenOrientation="portrait" /> - + android:windowSoftInputMode="stateHidden|adjustResize" /> ? = null, @SerializedName("options") - var options: ArrayList = ArrayList(), // null + var options: ArrayList? = null, // null @SerializedName("refresh_token") var refreshToken: String? = "", @SerializedName("x-amc-access-token") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationActivity.kt index 1e0217d702..0ee7054881 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationActivity.kt @@ -19,9 +19,9 @@ import com.navi.amc.investorapp.extension.* import com.navi.amc.investorapp.listener.AMCCustomTextWatcher import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter -import com.navi.amc.investorapp.ui.login.LoginActivity import com.navi.amc.investorapp.ui.panCard.VerifyPanCardActivity import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity +import com.navi.amc.investorapp.util.orZero import com.navi.amc.investorapp.utils.SmsBroadcastReceiver import kotlinx.android.synthetic.main.activity_otp_verification.* import java.util.regex.Pattern @@ -87,7 +87,7 @@ class OtpVerificationActivity : } else { numb = sharedPreferences.getString(SharedPreferencesKeys.MOBILE) } - val phoneNumber = if (numb!!.length >= 4) numb.substring( + val phoneNumber = if (numb?.length.orZero() >= 4) numb?.substring( numb.length - 4 ) else "" mobileNumber.text = "******$phoneNumber" diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt index 5218818624..8df07893f4 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt @@ -270,10 +270,10 @@ class VerifyPanCardActivity : BaseActivity + its.options?.let { it -> sharedPreferences.writeStringValue( SharedPreferencesKeys.OPTIONS_MOBILE, - its.options.getOrNull(0)?.mobile + its.options?.getOrNull(0)?.mobile ).toString() sharedPreferences.writeBooleanInt( SharedPreferencesKeys.ASK_OPTIONS, diff --git a/navi-amc/src/main/res/layout/mutualfund_activity.xml b/navi-amc/src/main/res/layout/mutualfund_activity.xml index c891c4d424..2319da309f 100644 --- a/navi-amc/src/main/res/layout/mutualfund_activity.xml +++ b/navi-amc/src/main/res/layout/mutualfund_activity.xml @@ -869,7 +869,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_26dp" - android:text="Minimum 1st Invetsment" + android:text="Minimum 1st Investment" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:targetApi="lollipop" /> @@ -893,7 +893,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/_16dp" android:layout_marginEnd="@dimen/_16dp" - android:text="Minimum 2nd Invetsment Onwards" + android:text="Minimum 2nd Investment Onwards" app:layout_constraintStart_toStartOf="@+id/tvMinFirstInv" app:layout_constraintTop_toBottomOf="@id/tvMinFirstInv" tools:targetApi="lollipop" /> From 85e066bfd8ce07aa3525e369c69a66a7f52dc23d Mon Sep 17 00:00:00 2001 From: Shankar Yadav Date: Mon, 25 Oct 2021 14:09:48 +0530 Subject: [PATCH 33/53] remvoe file --- navi-amc/src/main/AndroidManifest.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/navi-amc/src/main/AndroidManifest.xml b/navi-amc/src/main/AndroidManifest.xml index bfaeb44898..ee07b8a852 100644 --- a/navi-amc/src/main/AndroidManifest.xml +++ b/navi-amc/src/main/AndroidManifest.xml @@ -121,10 +121,6 @@ android:name=".ui.setup_account.SetupYourActivity" android:screenOrientation="portrait" /> - - From 1671f42500959386e02b741f7f002a381e7d884e Mon Sep 17 00:00:00 2001 From: Adarsh S Date: Mon, 25 Oct 2021 14:23:50 +0530 Subject: [PATCH 34/53] Handling pan mismatch error from cibil data in offer generation (#1598) * Handling pan mismatch from cibil data in offer generation * Adding null check * Handling cibil error in loan rejection api --- .../errors/fragments/ActionErrorFragment.kt | 2 ++ .../com/naviapp/network/ApiErrorTagType.kt | 4 ++- .../java/com/naviapp/network/models/Action.kt | 5 ++- .../loandetails/viewmodels/LoanDetailsVM.kt | 33 +++++++++++++++++-- .../LoanEligibilityLoaderActivity.kt | 29 +++++++++++++++- app/src/main/res/drawable/ic_pan_error.xml | 20 +++++++++++ 6 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/drawable/ic_pan_error.xml diff --git a/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt b/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt index 480f3d0467..db5141beaf 100644 --- a/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt +++ b/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt @@ -91,6 +91,7 @@ class ActionErrorFragment : BaseBottomSheet() { BANK_ERROR_ICON -> R.drawable.ic_bank_error_svg PROFILE_ERROR_ICON -> R.drawable.ic_profile_error_svg OTP_ON_CALL_ERROR_ICON -> R.drawable.ic_otp_call_error_svg + INVALID_PAN -> R.drawable.ic_pan_error else -> R.drawable.ic_error_circle_svg } } @@ -110,6 +111,7 @@ class ActionErrorFragment : BaseBottomSheet() { const val USER_ON_HOLD_ERROR_ICON = "USER_ON_HOLD_ERROR_ICON" const val NAVI_ICON = "NAVI_ICON" const val OTP_ON_CALL_ERROR_ICON = "OTP_ON_CALL_ERROR_ICON" + const val INVALID_PAN = "INVALID_PAN" private const val ERROR_DATA = "ERROR_DATA" private const val DIALOG_CANCELABLE = "DIALOG_CANCELABLE" diff --git a/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt b/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt index d10d84ec24..421a351913 100644 --- a/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt +++ b/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt @@ -64,6 +64,7 @@ object ApiErrorTagType { const val VIDEO_KYC_ERROR = "VIDEO_KYC_ERROR" const val OTP_WRONG = "OTP_WRONG" const val SOMETHING_WENT_WRONG = "SOMETHING_WENT_WRONG" + const val INVALID_PAN_DETAILS = "INVALID_PAN_DETAILS" @StringDef( SELFIE_UPLOAD, @@ -103,7 +104,8 @@ object ApiErrorTagType { NO_INTERNET_ERROR, SELFIE_SETTING_API_ERROR, OVD_UPLOAD_ERROR, - PG_REPAYMENT_STATUS_DETAIL_API_ERROR + PG_REPAYMENT_STATUS_DETAIL_API_ERROR, + INVALID_PAN_DETAILS ) @Retention(AnnotationRetention.SOURCE) annotation class ApiErrorTagTypeDef diff --git a/app/src/main/java/com/naviapp/network/models/Action.kt b/app/src/main/java/com/naviapp/network/models/Action.kt index 4a3e7f155a..e0fc4c3424 100644 --- a/app/src/main/java/com/naviapp/network/models/Action.kt +++ b/app/src/main/java/com/naviapp/network/models/Action.kt @@ -1,12 +1,11 @@ package com.naviapp.network.models import android.os.Parcelable -import android.view.View import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize -import kotlinx.android.parcel.RawValue @Parcelize data class Action( - @SerializedName("title") val title: String? + @SerializedName("title") val title: String?, + @SerializedName("subPage") val subPage: String? = null ) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt index e3f19796d3..8df0b64b89 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.navi.common.model.CtaData import com.naviapp.common.viewmodel.BaseVM +import com.naviapp.firebasedb.FirebaseStatusType import com.naviapp.firebasedb.LOAN_APPLY import com.naviapp.firebasedb.OFFER_GENERATE import com.naviapp.firebasedb.PRE_ELIGIBILITY @@ -13,6 +14,7 @@ import com.naviapp.models.request.LoanFeeDetailsRequest import com.naviapp.models.request.LoanRequest import com.naviapp.models.request.MoratoriumRequest import com.naviapp.models.response.* +import com.naviapp.network.ApiErrorTagType.INVALID_PAN_DETAILS import com.naviapp.network.models.GenericErrorResponse import com.naviapp.personalloan.getloan.loandetails.repositories.LoanDetailsRepository import com.navi.common.sharedpref.PreferenceManager @@ -113,6 +115,12 @@ class LoanDetailsVM(private val repository: LoanDetailsRepository = LoanDetailsR val loanDetailsResponse: LiveData get() = _loanDetailsResponse + private var panFailedFromCibilRedirectUrl: String? = null + + private val _generateOfferFailed = MutableLiveData() + val generateOfferFailed: LiveData + get() = _generateOfferFailed + fun fetchLoanProducts() { coroutineScope.launch { val response = repository.fetchLoanProduct() @@ -276,10 +284,29 @@ class LoanDetailsVM(private val repository: LoanDetailsRepository = LoanDetailsR fun fetchLoanRejectionData(requestId: String) { coroutineScope.launch { val response = repository.fetchOfferRejectionData(requestId) - if (response.error == null) { + var errorTag: String? = null + response.errors?.forEach { genericError -> + when (genericError.code) { + INVALID_PAN_DETAILS -> { + _generateOfferFailed.value = FirebaseStatusType.FAILURE + panFailedFromCibilRedirectUrl = genericError.actions?.get(0)?.subPage + errorTag = genericError.code + } + } + } + if (response.error == null && errorTag.isNullOrEmpty()) { _generateOfferError.value = response.errors?.firstOrNull() } else { - updateErrorMessage(response.error) + if (errorTag.isNullOrEmpty()) { + updateErrorMessage(response.error) + } else { + setErrorData( + errors = response.errors, + error = response.error, + tag = errorTag, + cancelable = errorTag == null + ) + } } } } @@ -358,4 +385,6 @@ class LoanDetailsVM(private val repository: LoanDetailsRepository = LoanDetailsR } } } + + fun getPanFailedRedirectUrl() = panFailedFromCibilRedirectUrl } diff --git a/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt b/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt index f4b92b462f..69b7420aff 100644 --- a/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt +++ b/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt @@ -24,7 +24,9 @@ import com.naviapp.firebasedb.* import com.naviapp.firebasedb.FirebaseStatusType.FAILURE import com.naviapp.firebasedb.FirebaseStatusType.SUCCESS import com.naviapp.manager.viewmodel.UserDataViewModel +import com.naviapp.models.CtaData import com.naviapp.models.RedirectPageStatus +import com.naviapp.network.ApiErrorTagType import com.naviapp.permission.viewmodel.PermissionViewModel import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.loandetails.viewmodels.LoanDetailsVM @@ -56,7 +58,7 @@ class LoanEligibilityLoaderActivity : BaseActivity(), super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.loan_eligibility_loader_activity) super.setContentView(binding.root) - initError(loanDetailsVM) + initError() binding.loader.setProgressCompletedListener(this) sendUserData() sendNeoEyedData() @@ -65,6 +67,17 @@ class LoanEligibilityLoaderActivity : BaseActivity(), initAnimation() } + private fun initError() { + initError( + viewModel = loanDetailsVM, + actions = listOf( + Pair( + handlePanDetailsFailedFromCibil, ApiErrorTagType.INVALID_PAN_DETAILS + ) + ) + ) + } + private fun sendUserData() { userDataViewModel.sendUserData() } @@ -121,6 +134,10 @@ class LoanEligibilityLoaderActivity : BaseActivity(), loanDetailsVM.statusGenerateOffer.observeNullable(this) { it?.let { fetchOfferIdAndStopApiPoll(it) } } + loanDetailsVM.generateOfferFailed.observeNonNull(this) { + binding.loader.pause() + statusHandling(it) + } loanDetailsVM.offerIdResponse.observeNonNull(this) { offerIdResponse -> if (offerIdResponse.details?.inReview.orFalse()) { @@ -409,6 +426,16 @@ class LoanEligibilityLoaderActivity : BaseActivity(), } } + private val handlePanDetailsFailedFromCibil: View.OnClickListener = View.OnClickListener { + loanDetailsVM.getPanFailedRedirectUrl()?.let { url -> + NaviDeepLinkNavigator.navigate( + activity = this, + ctaData = CtaData(url = url), + finish = true + ) + } + } + override val screenName: String get() = LOAN_ELIGIBILITIY_LOADER diff --git a/app/src/main/res/drawable/ic_pan_error.xml b/app/src/main/res/drawable/ic_pan_error.xml new file mode 100644 index 0000000000..eb0aec46d4 --- /dev/null +++ b/app/src/main/res/drawable/ic_pan_error.xml @@ -0,0 +1,20 @@ + + + + + From b325002c486f8171ef532068c81e58176ce0df6d Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Mon, 25 Oct 2021 15:36:49 +0530 Subject: [PATCH 35/53] cagr fixes --- .../com/navi/amc/investorapp/response/Fund.kt | 27 +++++----- .../response/ResponseInvestmentDetails.kt | 2 +- .../investorapp/ui/home/HomeScreenFragment.kt | 49 ++++++++++++++----- .../ui/mutual_fund/MutualFundActivity.kt | 16 ++++-- .../main/res/layout/mutualfund_activity.xml | 16 +++--- 5 files changed, 73 insertions(+), 37 deletions(-) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt index b09523f25e..36cb9db655 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt @@ -1,7 +1,9 @@ package com.navi.amc.investorapp.response +import androidx.annotation.Keep import com.google.gson.annotations.SerializedName +@Keep data class Fund( @SerializedName("aum") val aum: String? = null, @@ -77,15 +79,16 @@ data class Fund( @SerializedName("cagr") var cagr: CAGR? = null, -) { - data class CAGR( - @SerializedName("max") - var max: String? = "", // 03.99% - @SerializedName("1") - var x1: String? = "", // NA - @SerializedName("3") - var x3: String? = "", // NA - @SerializedName("5") - var x5: String? = "" // NA - ) -} \ No newline at end of file +) + +@Keep +data class CAGR( + @SerializedName("max") + var max: String? = "", // 03.99% + @SerializedName("1") + var x1: String? = "", // NA + @SerializedName("3") + var x3: String? = "", // NA + @SerializedName("5") + var x5: String? = "" // NA +) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt index 75c0e114d3..8f3f522db6 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt @@ -21,7 +21,7 @@ data class ResponseInvestmentDetails( @SerializedName("current_amount") var currentAmount: String? = "", // 130000 @SerializedName("diff") - var diff: String? = "", // 30000 + var diff: Double? = 0.0, // 30000 @SerializedName("invested_amount") var investedAmount: String? = "", // 100000 @SerializedName("percentage_diff") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt index 986b1bdacf..7d5ef43859 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt @@ -5,8 +5,8 @@ import android.os.Bundle import android.os.CountDownTimer import android.os.Handler import android.os.Looper -import android.util.Log import android.view.View +import androidx.core.content.ContextCompat import com.navi.amc.investorapp.R import com.navi.amc.investorapp.base.BaseFragment import com.navi.amc.investorapp.constants.* @@ -37,12 +37,14 @@ import com.navi.amc.investorapp.ui.personalDetails.AboradErrorActivity import com.navi.amc.investorapp.ui.profile.MyLumpsumOrdersAdapter import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity import com.navi.amc.investorapp.util.orFalse +import com.navi.amc.investorapp.util.orZero import com.navi.amc.investorapp.utils.DateUtils import com.navi.analytics.utils.NaviTrackEvent import com.navi.common.deeplink.DeepLinkManager import com.navi.common.deeplink.util.DeeplinkConstants import com.navi.common.model.CtaData import com.navi.common.utils.Constants +import kotlin.math.abs class HomeScreenFragment : BaseFragment() { var status: String? = null @@ -374,23 +376,44 @@ class HomeScreenFragment : BaseFragment with(binding) { - tvInvestedAmtPrice.text = "₹ ${its.investmentsOverview?.investedAmount}" tvCurrentValuePrice.text = "₹ ${its.investmentsOverview?.currentAmount}" - var diff = its.investmentsOverview?.diff - yourInvPercentage.text = " (${its.investmentsOverview?.percentageDiff} %)" - if (diff?.trim()?.indexOf("-") != -1) { - yourInvPrice.text = "- ₹ ${diff?.substring(diff?.indexOf("-") + 1)}" - yourInvPercentage.setTextAppearance( - activity, - R.style.Textview_FF3333_regular_12sp + val diff = its.investmentsOverview?.diff + if (diff.orZero() < 0) { + yourInvPrice.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_A3A3AB + ) ) + yourInvPercentage.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_FF3333 + ) + ) + yourInvPercentage.text = + "( - ${its.investmentsOverview?.percentageDiff} %)" + yourInvPrice.text = + "- ${view.context.getString(R.string.rupees)} ${abs(diff.orZero())}" + } else { - yourInvPrice.text = "+ ₹ ${diff}" - yourInvPercentage.setTextAppearance( - activity, - R.style.Textview_14BC51_regular_12sp + yourInvPrice.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_14BC51 + ) ) + yourInvPercentage.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_14BC51 + ) + ) + yourInvPercentage.text = + "( + ${its.investmentsOverview?.percentageDiff} %)" + yourInvPrice.text = + "+ ${view.context.getString(R.string.rupees)} ${abs(diff.orZero())}" } if (its.investmentsOverview?.investedAmount!!.toDouble() > 0) { ConstraintBeforeInvestment.visibility = View.GONE diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt index f2b451fe14..6dd71d10e4 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/MutualFundActivity.kt @@ -19,6 +19,7 @@ import com.navi.amc.investorapp.databinding.MutualfundActivityBinding import com.navi.amc.investorapp.extension.* import com.navi.amc.investorapp.listener.AMCAdapterClickListener import com.navi.amc.investorapp.navigator.NaviAmcDeeplinkNavigator +import com.navi.amc.investorapp.response.CAGR import com.navi.amc.investorapp.response.Fund import com.navi.amc.investorapp.response.Holding import com.navi.amc.investorapp.response.Manager @@ -34,7 +35,7 @@ import kotlinx.android.synthetic.main.mutualfund_activity.* class MutualFundActivity : BaseActivity() { - private var cagr: Fund.CAGR? = null + private var cagr: CAGR? = null var stampedCount: Int = 0 var investmentCount: Int = 0 @@ -353,8 +354,13 @@ class MutualFundActivity : BaseActivity + + @@ -46,8 +50,7 @@ android:id="@+id/mutualfundParent" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/color_FBFBFB" - > + android:background="@color/color_FBFBFB"> + android:background="@color/color_FBFBFB"> @@ -270,7 +272,7 @@ android:background="@drawable/bg_rectangle_gray_outline_white_bg" android:paddingHorizontal="@dimen/_16dp" android:paddingVertical="@dimen/_16dp" - android:visibility="visible" + android:visibility="@{cagr ? View.VISIBLE: View.GONE, default = visible}" app:cardCornerRadius="@dimen/_10dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/ConstraintWhoShouldInvest"> From f12ec4fa2192a1c2199e25db38b90378de816cd4 Mon Sep 17 00:00:00 2001 From: Shankar Yadav Date: Mon, 25 Oct 2021 16:32:08 +0530 Subject: [PATCH 36/53] Fix wrong import issue --- .../activities/LoanEligibilityLoaderActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt b/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt index 69b7420aff..8ff99c1c91 100644 --- a/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt +++ b/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt @@ -6,6 +6,7 @@ import android.text.TextUtils import android.view.View import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider +import com.navi.common.model.CtaData import com.naviapp.R import com.naviapp.analytics.neoeyed.viewmodel.NeoEyedVM import com.naviapp.analytics.utils.NaviAnalytics @@ -24,7 +25,6 @@ import com.naviapp.firebasedb.* import com.naviapp.firebasedb.FirebaseStatusType.FAILURE import com.naviapp.firebasedb.FirebaseStatusType.SUCCESS import com.naviapp.manager.viewmodel.UserDataViewModel -import com.naviapp.models.CtaData import com.naviapp.models.RedirectPageStatus import com.naviapp.network.ApiErrorTagType import com.naviapp.permission.viewmodel.PermissionViewModel From ba75c9e4bc1c9595e8d179efd630026573ac6318 Mon Sep 17 00:00:00 2001 From: rahul bhat Date: Mon, 25 Oct 2021 16:50:24 +0530 Subject: [PATCH 37/53] Feature/new auto pay (#1650) * First Draft Mandate Options * Working Radio Custom View * Working enach tutorial * Working AutoPay * String + No button if no footer data coming from backend. * Sandbox for digio esign in dev and qa env --- .../naviapp/analytics/utils/NaviAnalytics.kt | 11 +- .../naviapp/common/adapter/RadioRvAdapter.kt | 70 ++++++ .../common/customview/RadioCustomView.kt | 35 +++ .../common/customview/RadioRecyclerView.kt | 34 +++ .../models/RadioCustomViewBindingData.kt | 11 + .../models/request/AutoPayOptionData.kt | 8 + .../response/DisbursementDetailsResponse.kt | 29 ++- .../models/response/EnachWidgetResponse.kt | 12 + .../models/response/RadioButtonResponse.kt | 15 ++ .../models/response/WidgetGenericResponse.kt | 7 +- .../network/retrofit/RetrofitService.kt | 9 +- .../fragments/BankDetailsFragment.kt | 15 +- .../BankDetailsAutoDebitRepository.kt | 13 +- .../view/activities/EnachTutorialActivity.kt | 66 +++--- .../fragments/BankDetailsAutoDebitFragment.kt | 193 ++++----------- .../view/fragments/EnachFragment.kt | 82 +++++++ .../viewmodels/BankDetailsAutoDebitVM.kt | 64 ++++- .../getloan/helpers/EnachHelper.kt | 7 +- .../com/naviapp/utils/BindingAdapterUtil.kt | 59 ++++- .../main/java/com/naviapp/utils/Constants.kt | 1 + .../main/java/com/naviapp/utils/IconUtils.kt | 4 + .../main/res/drawable/ic_bank_verified.xml | 33 +++ .../res/drawable/ic_green_tick_circle_16.xml | 15 ++ app/src/main/res/drawable/ic_lightning.xml | 12 + .../res/drawable/ic_recommended_lightning.xml | 15 ++ .../drawable/radio_custom_view_selector.xml | 6 + .../res/drawable/radio_icon_tint_selector.xml | 6 + .../bank_details_auto_debit_fragment.xml | 219 ++++++++++-------- .../res/layout/enach_tutorial_activity.xml | 73 +++--- app/src/main/res/layout/fragment_enach.xml | 42 ++++ .../res/layout/section_heading_layout.xml | 3 +- .../main/res/layout/view_auto_pay_pending.xml | 37 +++ .../layout/view_auto_pay_pending_aadhar.xml | 50 ++++ .../main/res/layout/view_auto_pay_success.xml | 40 ++++ .../res/layout/view_radio_icon_custom.xml | 56 +++++ .../main/res/layout/view_select_mandate.xml | 60 +++++ app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 9 +- app/src/main/res/values/styles.xml | 7 + 39 files changed, 1069 insertions(+), 360 deletions(-) create mode 100644 app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt create mode 100644 app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt create mode 100644 app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt create mode 100644 app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt create mode 100644 app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt create mode 100644 app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt create mode 100644 app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt create mode 100644 app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt create mode 100644 app/src/main/res/drawable/ic_bank_verified.xml create mode 100644 app/src/main/res/drawable/ic_green_tick_circle_16.xml create mode 100644 app/src/main/res/drawable/ic_lightning.xml create mode 100644 app/src/main/res/drawable/ic_recommended_lightning.xml create mode 100644 app/src/main/res/drawable/radio_custom_view_selector.xml create mode 100644 app/src/main/res/drawable/radio_icon_tint_selector.xml create mode 100644 app/src/main/res/layout/fragment_enach.xml create mode 100644 app/src/main/res/layout/view_auto_pay_pending.xml create mode 100644 app/src/main/res/layout/view_auto_pay_pending_aadhar.xml create mode 100644 app/src/main/res/layout/view_auto_pay_success.xml create mode 100644 app/src/main/res/layout/view_radio_icon_custom.xml create mode 100644 app/src/main/res/layout/view_select_mandate.xml diff --git a/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt b/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt index 515c2a2618..2d40bcd1d4 100644 --- a/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt +++ b/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt @@ -248,8 +248,11 @@ class NaviAnalytics private constructor() { fun onCheckBoxClicked() = NaviTrackEvent.trackEvent("bank_details_checkbox") - fun onSetupAutoDebitClicked() = - NaviTrackEvent.trackEvent("setup_autodebit_button_tap") + fun onSetupAutoDebitClicked(type: String?) = + NaviTrackEvent.trackEvent( + "setup_autodebit_button_tap", + mapOf(Pair("type", type.orEmpty())) + ) fun onAccountNumberEdit() = NaviTrackEvent.trackEvent("account_number_edit") @@ -1569,6 +1572,10 @@ class NaviAnalytics private constructor() { } } + inner class EnachTutorial { + fun onPageSelected(pageName: String) = NaviTrackEvent.trackEvent(pageName) + } + companion object { const val SPLASH = "splash" const val PERMISSIONS_SCREEN = "permission" diff --git a/app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt b/app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt new file mode 100644 index 0000000000..317f7f059d --- /dev/null +++ b/app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt @@ -0,0 +1,70 @@ +package com.naviapp.common.adapter + +import android.annotation.SuppressLint +import android.view.ViewGroup +import androidx.lifecycle.MutableLiveData +import androidx.recyclerview.widget.RecyclerView +import com.naviapp.R +import com.naviapp.common.customview.RadioCustomView +import com.naviapp.models.response.RadioButtonResponse +import com.naviapp.utils.orFalse +import kotlinx.android.synthetic.main.view_radio_button.view.* + +class RadioRvAdapter( + private val radioViewList: List, + private val selectedLabelLiveData: MutableLiveData +) : RecyclerView.Adapter() { + init { + setInitialSelectedPosition() + } + + private fun setInitialSelectedPosition() { + selectedLabelLiveData.value = radioViewList.firstOrNull() + radioViewList.forEach { + if (it.checked.orFalse()) selectedLabelLiveData.value = it + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RadioRvViewHolder { + return RadioRvViewHolder( + RadioCustomView(context = parent.context) + ) + } + + @SuppressLint("NotifyDataSetChanged") + override fun onBindViewHolder(holder: RadioRvViewHolder, position: Int) { + val radioViewData = radioViewList[position] + holder.setData(radioViewData) + holder.view.radio_btn.setOnClickListener { + if (radioViewData.checked.orFalse()) return@setOnClickListener + clearRadioButtonAndSetNewSelection(position) + selectedLabelLiveData.value = radioViewData + notifyDataSetChanged() + } + } + + private fun clearRadioButtonAndSetNewSelection(position: Int) { + radioViewList.forEachIndexed { index, radioButtonData -> + radioButtonData.checked = index == position + } + } + + override fun getItemCount(): Int { + return radioViewList.size + } + +} + +class RadioRvViewHolder(val view: RadioCustomView) : RecyclerView.ViewHolder(view) { + + fun setData(radioButtonResponse: RadioButtonResponse) { + view.setProperties( + radioButtonResponse.radioButtonText, + radioButtonResponse.iconCode, + radioButtonResponse.description, + radioButtonResponse.checked, + radioButtonResponse.enabled, + R.drawable.radio_custom_view_selector + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt b/app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt new file mode 100644 index 0000000000..04210d04fe --- /dev/null +++ b/app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt @@ -0,0 +1,35 @@ +package com.naviapp.common.customview + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.databinding.DataBindingUtil +import com.naviapp.R +import com.naviapp.databinding.ViewRadioIconCustomBinding +import com.naviapp.models.RadioCustomViewBindingData + +class RadioCustomView(context: Context, attrs: AttributeSet? = null) : + ConstraintLayout(context, attrs) { + private val binding: ViewRadioIconCustomBinding + + init { + val inflater = LayoutInflater.from(context) + binding = DataBindingUtil.inflate(inflater, R.layout.view_radio_icon_custom, this, true) + } + + fun setProperties( + radioButtonText: String?, + iconCode: String? = null, + description: String? = null, + checked: Boolean? = null, + enabled: Boolean? = null, + selectorRadioButton: Int? = R.drawable.radiobutton_selector, + styleDescription: Int? = R.style.TextDescExtraSmallFontStyleOne + ) { + binding.data = RadioCustomViewBindingData( + radioButtonText, iconCode, description, selectorRadioButton, styleDescription, + checked ?: false, enabled ?: false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt b/app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt new file mode 100644 index 0000000000..2ae79c17ac --- /dev/null +++ b/app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt @@ -0,0 +1,34 @@ +package com.naviapp.common.customview + +import android.content.Context +import android.util.AttributeSet +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.naviapp.common.adapter.RadioRvAdapter +import com.naviapp.common.decorator.LeftMarginItemDecoration +import com.naviapp.common.decorator.TopMarginItemDecoration +import com.naviapp.models.response.RadioButtonResponse + +class RadioRecyclerView(context: Context, attrs: AttributeSet? = null) : + RecyclerView(context, attrs) { + + private val _selectedLabelLiveData = MutableLiveData() + val selectedLabelLiveData: LiveData get() = _selectedLabelLiveData + fun setProperties( + radioViewList: List, + orientation: Int = VERTICAL, + gap: Float + ) { + layoutManager = LinearLayoutManager(context, orientation, false) + val itemDecoration = if (orientation == HORIZONTAL) { + LeftMarginItemDecoration(gap) + } else { + TopMarginItemDecoration(gap) + } + addItemDecoration(itemDecoration) + adapter = RadioRvAdapter(radioViewList, _selectedLabelLiveData) + } +} + diff --git a/app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt b/app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt new file mode 100644 index 0000000000..bcc3826374 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt @@ -0,0 +1,11 @@ +package com.naviapp.models + +data class RadioCustomViewBindingData( + val radioButtonText: String? = null, + val iconCode: String? = null, + val description: String? = null, + val selectorRadioButton: Int?, + val styleDescription: Int?, + var checked: Boolean = false, + val enabled: Boolean +) diff --git a/app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt b/app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt new file mode 100644 index 0000000000..25f6dd808c --- /dev/null +++ b/app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt @@ -0,0 +1,8 @@ +package com.naviapp.models.request + +import com.google.gson.annotations.SerializedName + +data class AutoPayOptionData( + @SerializedName("autoPayOption") + val autoPayOptionId: String? = null +) diff --git a/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt index 97df996db8..d37ed6a2fc 100644 --- a/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt @@ -11,17 +11,26 @@ data class DisbursementDetailsResponse( @SerializedName("header") val header: Header? = null, @SerializedName("content") val disbursementDetails: DisbursementDetails? = null, @SerializedName("footer") val footer: Footer? = null -): Parcelable +) : Parcelable @Parcelize data class DisbursementDetails( - @SerializedName("netLoanAmount") val netLoanAmount: Amount?, - @SerializedName("emi") val emiAmount: Amount?, - @SerializedName("firstDueDate") val firstDueDate: String?, - @SerializedName("bankDetails") var bankDetails: BankDetail?, - @SerializedName("customerName") val customerName: String?, - @SerializedName("autoDebitStatus") val autoDebitStatus: String?, - @SerializedName("email") val email: String?, - @SerializedName("addBankAccountEnable") val addBankAccountEnable: Boolean?, - @SerializedName("editBankRetriesLeft") val editBankRetriesLeft: Int? = null + @SerializedName("netLoanAmount") val netLoanAmount: Amount? = null, + @SerializedName("emi") val emiAmount: Amount? = null, + @SerializedName("firstDueDate") val firstDueDate: String? = null, + @SerializedName("bankDetails") var bankDetails: BankDetail? = null, + @SerializedName("customerName") val customerName: String? = null, + @SerializedName("autoDebitStatus") var autoDebitStatus: String? = null, + @SerializedName("email") val email: String? = null, + @SerializedName("addBankAccountEnable") val addBankAccountEnable: Boolean? = null, + @SerializedName("editBankRetriesLeft") val editBankRetriesLeft: Int? = null, + @SerializedName("autoPayOptions") val autoPayOptions: List? = null, ) : Parcelable + +enum class AutoPayStatus { + WAITING, + SUCCESS, + PENDING, + AADHAR_PENDING, + FAILURE +} diff --git a/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt b/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt new file mode 100644 index 0000000000..5f10633ee4 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt @@ -0,0 +1,12 @@ +package com.naviapp.models.response + +import com.google.gson.annotations.SerializedName + +data class EnachWidgetResponse( + @SerializedName("headerWidget") + val headerWidget: List? = null, + @SerializedName("contentWidget") + val contentWidget: List>? = null, + @SerializedName("footerWidget") + val footerWidget: List? = null +) diff --git a/app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt b/app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt new file mode 100644 index 0000000000..741c078306 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt @@ -0,0 +1,15 @@ +package com.naviapp.models.response + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class RadioButtonResponse( + @SerializedName("id") val id: String? = null, + @SerializedName("title") val radioButtonText: String? = null, + @SerializedName("description") val description: String? = null, + @SerializedName("iconCode") val iconCode: String? = null, + @SerializedName("enabled") val enabled: Boolean? = null, + @SerializedName("checked") var checked: Boolean? = null +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt b/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt index adb682902e..0491303926 100644 --- a/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt @@ -1,5 +1,6 @@ package com.naviapp.models.response +import android.os.Parcelable import com.google.gson.annotations.SerializedName import com.navi.common.model.CtaData import kotlinx.android.parcel.Parcelize @@ -22,11 +23,13 @@ abstract class WidgetConfig( val status: String? = null ) +@Parcelize data class GenericWidgetConfig( @SerializedName("body") val widgetBody: GenericWidgetBody? = null -) : WidgetConfig() +) : WidgetConfig(), Parcelable +@Parcelize open class GenericWidgetBody( @SerializedName("title") val title: String? = null, @@ -42,7 +45,7 @@ open class GenericWidgetBody( val cta: CtaData? = null, @SerializedName("documentUrl") val documentUrl: String? = null -) +) : Parcelable @Parcelize data class GenericWidgetItem( diff --git a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt index 2af394beb2..b9f2621c05 100644 --- a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt @@ -241,7 +241,10 @@ interface RetrofitService { suspend fun fetchMendateData(@Path("requestId") requestId: String): Response>> @POST("/loan-applications/{loanApplicationId}/auto-debit-registration") - suspend fun fetchMendateRequestId(@Path("loanApplicationId") loanApplicationId: String): Response> + suspend fun fetchMendateRequestId( + @Path("loanApplicationId") loanApplicationId: String, + @Body autoPayOptionData: AutoPayOptionData + ): Response> //Company Names @GET("/master-data/fetch-companies") @@ -342,8 +345,8 @@ interface RetrofitService { @GET("/attach/details/insurance") suspend fun fetchInsuranceDetails(): Response> - @GET("/loan-applications/{loanApplicationId}/auto-debit-instructions ") - suspend fun fetchEnachDetails(@Path("loanApplicationId") loanApplicationId: String): Response> + @GET("/loan-applications/{loanApplicationId}/v2/auto-debit-instructions") + suspend fun fetchEnachDetails(@Path("loanApplicationId") loanApplicationId: String): Response> @POST("/loan-origination-manager/fetch-installments") suspend fun fetchEmiDetails(@Body loanFeeDetailsRequest: LoanFeeDetailsRequest): Response> diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt index 900632b2d6..4f79d367f0 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt @@ -14,28 +14,28 @@ import android.widget.Toast import androidx.core.widget.addTextChangedListener import androidx.lifecycle.ViewModelProvider import com.navi.analytics.uxcam.UxcamUtil +import com.navi.common.model.CtaData +import com.navi.common.sharedpref.PreferenceManager import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.fragment.BaseFragment import com.naviapp.dashboard.listeners.FragmentInteractionListener import com.naviapp.databinding.BankDetailsFragmentBinding -import com.naviapp.personalloan.getloan.activities.BankAccountVerificationLoaderActivity -import com.naviapp.personalloan.getloan.activities.GetLoanActivity.Companion.IS_FOR_SECOND_LOAN_JOURNEY -import com.naviapp.personalloan.getloan.bankdetails.listeners.FindIfscListener -import com.naviapp.personalloan.getloan.bankdetails.listeners.OnSelectBankListener -import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM import com.naviapp.homeloan.common.listener.CheckBoxClickListener import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener -import com.navi.common.model.CtaData import com.naviapp.models.FeedbackPageType import com.naviapp.models.request.BankDetail import com.naviapp.models.response.* import com.naviapp.network.ApiErrorTagType.FETCH_BANKS_ERROR import com.naviapp.network.ApiErrorTagType.FETCH_DISBURSEMENT_DETAILS_ERROR import com.naviapp.network.ApiErrorTagType.FETCH_LOAN_BASIC_DETAILS_ERROR +import com.naviapp.personalloan.getloan.activities.BankAccountVerificationLoaderActivity import com.naviapp.personalloan.getloan.activities.GetLoanActivity -import com.navi.common.sharedpref.PreferenceManager +import com.naviapp.personalloan.getloan.activities.GetLoanActivity.Companion.IS_FOR_SECOND_LOAN_JOURNEY +import com.naviapp.personalloan.getloan.bankdetails.listeners.FindIfscListener +import com.naviapp.personalloan.getloan.bankdetails.listeners.OnSelectBankListener +import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM import com.naviapp.utils.* import com.naviapp.utils.Constants.BANK_ACCOUNT_NUMBER import com.naviapp.utils.Constants.BANK_IFSC @@ -172,6 +172,7 @@ class BankDetailsFragment : BaseFragment(), View.OnClickListener, FindIfscListen private fun initObservers() { viewModel.loanBasicDetails.observeNonNull(this) { + loanApplicationId = it.loanApplicationId if (!it.loanApplicationId.isNullOrEmpty()) { showLoader() viewModel.fetchDisbursementDetails(it.loanApplicationId) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt index 4981bd5a5d..b940a9c7ce 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt @@ -1,6 +1,7 @@ package com.naviapp.personalloan.getloan.bankdetailsautodebit.repositories import com.naviapp.models.EnachData +import com.naviapp.models.request.AutoPayOptionData import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.utils.retrofitService @@ -8,8 +9,16 @@ class BankDetailsAutoDebitRepository : ResponseCallback() { suspend fun fetchDisbursementDetails(loanApplicationId: String) = apiResponseCallback(retrofitService().fetchDisbursementDetails(loanApplicationId)) - suspend fun fetchMandateRequestId(loanApplicationId: String) = - apiResponseCallback(retrofitService().fetchMendateRequestId(loanApplicationId)) + suspend fun fetchMandateRequestId( + loanApplicationId: String, + autoPayOptionData: AutoPayOptionData + ) = + apiResponseCallback( + retrofitService().fetchMendateRequestId( + loanApplicationId, + autoPayOptionData + ) + ) suspend fun fetchEnachStatus(requestId: String) = apiResponseCallback(retrofitService().fetchAsyncRequestData(requestId)) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt index 1bc1b0cc18..6fa08529d8 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt @@ -3,19 +3,20 @@ package com.naviapp.personalloan.getloan.bankdetailsautodebit.view.activities import android.os.Bundle import android.view.View import androidx.databinding.DataBindingUtil -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.BaseActivity -import com.naviapp.common.decorator.TopMarginItemDecoration +import com.naviapp.common.adapter.BaseVPA import com.naviapp.databinding.EnachTutorialActivityBinding -import com.naviapp.personalloan.getloan.bankdetailsautodebit.adapter.EnachDetailsAdapter -import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.BankDetailsAutoDebitVM +import com.naviapp.models.response.EnachWidgetResponse import com.naviapp.models.response.GenericWidgetConfig import com.navi.common.sharedpref.PreferenceManager +import com.naviapp.personalloan.getloan.bankdetailsautodebit.view.fragments.EnachFragment +import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.BankDetailsAutoDebitVM import com.naviapp.utils.Constants import com.naviapp.utils.LOAN_APPLICATION_ID +import com.naviapp.utils.onPageSelected class EnachTutorialActivity : BaseActivity(), View.OnClickListener { private lateinit var binding: EnachTutorialActivityBinding @@ -31,7 +32,6 @@ class EnachTutorialActivity : BaseActivity(), View.OnClickListener { binding = DataBindingUtil.setContentView(this, R.layout.enach_tutorial_activity) super.setContentView(binding.root) initError(viewModel) - initUI() initListener() setUpObservers() val loanType = intent.getStringExtra(KEY_LOAN_TYPE) @@ -47,44 +47,48 @@ class EnachTutorialActivity : BaseActivity(), View.OnClickListener { } private fun setUpObservers() { - viewModel.enachDetails.observe(this, Observer { widgetGenericResponse -> + viewModel.enachDetails.observe(this, { widgetGenericResponse -> hideLoader() widgetGenericResponse?.let { - it.contentWidget?.let { contentWidgetList -> - @Suppress("UNCHECKED_CAST") - binding.contentRv.adapter = - EnachDetailsAdapter(contentWidgetList as List) - } - it.footerWidget?.let { listFooter -> - if (!listFooter.isNullOrEmpty()) { - (listFooter[0] as GenericWidgetConfig).widgetBody?.title?.let { title -> - binding.setupAutoDebitBtn.setProperties( - title, - iconId = R.drawable.ic_arrow_right_svg - ) - } - } - } + setupView(it) } }) } - private fun initListener() { - binding.backIv.setOnClickListener(this) - binding.setupAutoDebitBtn.setOnClickListener(this) + private fun setupView(enachWidgetResponse: EnachWidgetResponse) { + val headerWidgetList: List? = + enachWidgetResponse.headerWidget + val contentWidgetListForAllScreens: List>? = + enachWidgetResponse.contentWidget + val footerWidgetList: List? = + enachWidgetResponse.footerWidget + val adapter = BaseVPA(supportFragmentManager) + contentWidgetListForAllScreens?.forEachIndexed { index, contentWidgetList -> + adapter.addFragment( + EnachFragment.newInstance( + footerWidgetList?.getOrNull(index)?.widgetId, + contentWidgetList, + footerWidgetList?.getOrNull(index)?.widgetBody?.title + ), + headerWidgetList?.getOrNull(index)?.widgetBody?.title.orEmpty() + ) + } + binding.enachViewPager.adapter = adapter + binding.enachViewPager.offscreenPageLimit = 2 + binding.enachTabLayout.setupWithViewPager(binding.enachViewPager) + binding.enachViewPager.onPageSelected { position -> + NaviAnalytics.naviAnalytics.EnachTutorial() + .onPageSelected(headerWidgetList?.getOrNull(position)?.widgetBody?.title.orEmpty()) + } } - private fun initUI() { - binding.contentRv.addItemDecoration(TopMarginItemDecoration(resources.getDimension(R.dimen.layout_dp_40))) + private fun initListener() { + binding.sectionHeading.backIv.setOnClickListener(this) } override fun onClick(v: View?) { when (v?.id) { - binding.backIv.id -> finish() - binding.setupAutoDebitBtn.id -> { - setResult(RESULT_OK) - finish() - } + binding.sectionHeading.backIv.id -> finish() } } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt index 8594fbd199..eec8a5dcc6 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt @@ -9,7 +9,6 @@ import android.os.Handler import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.content.ContextCompat import androidx.lifecycle.ViewModelProvider import com.navi.analytics.uxcam.UxcamUtil import com.naviapp.R @@ -26,6 +25,17 @@ import com.naviapp.firebasedb.FirebaseStatusType.PENDING import com.naviapp.firebasedb.FirebaseStatusType.SUCCESS import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener +import com.naviapp.manager.UserManager +import com.navi.common.model.CtaData +import com.naviapp.models.FeedbackPageType +import com.naviapp.models.request.AutoPayOptionData +import com.naviapp.models.response.AdditionalDataAsyncResponse +import com.naviapp.models.response.AutoPayStatus +import com.naviapp.models.response.EnachMandateDetailsResponse +import com.naviapp.network.ApiErrorTagType +import com.naviapp.network.models.Action +import com.naviapp.network.models.GenericWarningResponse +import com.naviapp.payment.models.ProviderType import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment.Companion.DISBURSEMENT_DETAILS import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment.Companion.EDIT_ACCOUNT @@ -35,30 +45,19 @@ import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.EnachSha import com.naviapp.personalloan.getloan.common.listener.EnachListener import com.naviapp.personalloan.getloan.helpers.EnachHelper import com.naviapp.personalloan.getloan.helpers.EnachStub -import com.naviapp.manager.UserManager -import com.navi.common.model.CtaData -import com.naviapp.models.FeedbackPageType -import com.naviapp.models.response.AdditionalDataAsyncResponse -import com.naviapp.models.response.DisbursementDetails -import com.naviapp.models.response.EnachMandateDetailsResponse -import com.naviapp.network.ApiErrorTagType -import com.naviapp.network.models.Action -import com.naviapp.network.models.GenericWarningResponse -import com.naviapp.payment.models.ProviderType import com.navi.common.sharedpref.PreferenceManager import com.naviapp.utils.* +import com.naviapp.utils.Constants.MANDATE_TYPE class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, FooterInteractionListener { private lateinit var binding: BankDetailsAutoDebitFragmentBinding private var listener: FragmentInteractionListener? = null private val viewModel by lazy { ViewModelProvider(this).get(BankDetailsAutoDebitVM::class.java) } - private var apiPollScheduler: ApiPollScheduler? = null private var firebaseHelper: FirebaseDataHelper? = null private var firebaseDataReceiveListener: FirebaseDataReceiveListener? = null private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.BankDetails() - private var editAccountMaxRetry = 0 private var enachListener: EnachListener? = null private var loanApplicationId: String? = null @@ -73,7 +72,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { binding = BankDetailsAutoDebitFragmentBinding.inflate(inflater, container, false) initError() initUi() @@ -158,6 +157,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, private fun observeLoanBasicDetails() { viewModel.loanBasicDetails.observeNonNull(this) { basicDetails -> basicDetails.loanApplicationId?.let { + loanApplicationId = it showLoader() PreferenceManager.setStringPreference(LOAN_APPLICATION_ID, it) viewModel.fetchDisbursementDetails(it) @@ -231,12 +231,12 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } private fun observeDisbursementDetails() { - viewModel.disbursementDetails.observeNonNull(this) { disbursementDetailsResponse -> + viewModel.disbursementDetails.observeNullable(this) { disbursementDetailsResponse -> hideLoader() headerInteractionListener?.setProperties( - disbursementDetailsResponse.header?.title, - disbursementDetailsResponse.header?.subtitle, - disbursementDetailsResponse.header?.progress + disbursementDetailsResponse?.header?.title, + disbursementDetailsResponse?.header?.subtitle, + disbursementDetailsResponse?.header?.progress ) binding.footerView.setProperties( disbursementDetailsResponse?.footer?.backCta, @@ -246,32 +246,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, ), this ) - disbursementDetailsResponse?.disbursementDetails?.let { disbursementDetails -> - setBankDetails( - disbursementDetails.bankDetails?.bankName, - disbursementDetails.bankDetails?.accountNumber - ) - binding.bankDetailsTv.text = getString( - R.string.loan_transfer_info, - disbursementDetails.netLoanAmount?.value?.formatCurrency() - ?: getString(R.string.loan_amount) - ) - binding.autoDebitLayout.detailTv.text = getString( - R.string.enach_first_installment_info, - disbursementDetails.emiAmount?.value?.formatCurrency(), - disbursementDetails.firstDueDate - ) - editAccountMaxRetry = disbursementDetails.editBankRetriesLeft.orZero() - editBtnHandling(disbursementDetails) - disbursementDetails.autoDebitStatus?.let { setAutoDebitState(it, true) } - showAutoDebitLayout() - } - } - } - - private fun editBtnHandling(disbursementDetail: DisbursementDetails) { - if (disbursementDetail.editBankRetriesLeft.orZero() <= 0 || disbursementDetail.autoDebitStatus == SUCCESS) { - binding.editAccountTv.visibility = View.GONE + binding.viewModel = viewModel } } @@ -350,7 +325,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, when (status) { SUCCESS -> { firebaseHelper?.clear() - binding.editAccountTv.visibility = View.GONE + binding.changeBankTv.visibility = View.GONE gotoGetLoan() } FAILURE -> { @@ -396,7 +371,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, showTimeoutErrorScreen( firebaseHelper, apiPollScheduler, - View.OnClickListener { setupAutoDebit() }, + { setupAutoDebit() }, errorTag ) firebaseHelper = null @@ -434,7 +409,12 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, apiPollScheduler = ApiPollScheduler( numberOfRetry = NUMBER_OF_RETRY_MANDATE_STATUS, doOnTimeout = { - activity?.runOnUiThread { handleResponse(WAITING, MANDATE_COMPLETE) } + activity?.runOnUiThread { + handleResponse( + AutoPayStatus.WAITING.name, + MANDATE_COMPLETE + ) + } } ) { viewModel.fetchEnachStatus(requestId) @@ -456,66 +436,16 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, private fun setAutoDebitState(autoDebitStatus: String, isPageLoad: Boolean = false) { if (autoDebitStatus == SUCCESS) naviAnalyticsEventTracker.onAutoDebitSuccessScreen() else if (autoDebitStatus == FAILURE) naviAnalyticsEventTracker.onAutoDebitFailureScreen() - binding.autoDebitLayout.statusTv.visibility = - if (autoDebitStatus == PENDING) View.GONE else View.VISIBLE + viewModel.setAutoDebitState(autoDebitStatus) + binding.notifyChange() binding.footerView.visibility = - if (autoDebitStatus == SUCCESS || autoDebitStatus == WAITING) View.GONE else View.VISIBLE - binding.autoDebitLayout.howToSetupTv.visibility = - if (autoDebitStatus == SUCCESS || autoDebitStatus == WAITING) View.GONE else View.VISIBLE - binding.autoDebitLayout.statusTv.text = getString( - when (autoDebitStatus) { - SUCCESS -> R.string.auto_debit_success - WAITING -> R.string.auto_debit_pending - else -> R.string.auto_debit_failed - } - ) - - if (autoDebitStatus == WAITING) { - binding.autoDebitLayout.autoDebitTv.text = getString(R.string.auto_debit_pending_title) - binding.autoDebitLayout.detailTv.text = getString(R.string.auto_debit_pending_status) - } else { - binding.autoDebitLayout.autoDebitTv.text = - getString(R.string.setup_auto_debit_for_emi_s) - } - - context?.let { context -> - binding.autoDebitLayout.statusTv.setTextColor( - ContextCompat.getColor( - context, - when (autoDebitStatus) { - SUCCESS -> R.color.green - FAILURE -> R.color.red - else -> R.color.title_color_one - } - ) - ) - binding.autoDebitLayout.statusTv.setCompoundDrawablesWithIntrinsicBounds( - ContextCompat.getDrawable( - context, - when (autoDebitStatus) { - SUCCESS -> R.drawable.ic_tick_svg - FAILURE -> R.drawable.ic_alert_svg - else -> R.drawable.ic_pending_svg - } - ), - null, null, null - ) - } - - if (editAccountMaxRetry > 0 && autoDebitStatus == FAILURE) { - if (binding.editAccountTv.visibility != View.VISIBLE) - binding.editAccountTv.visibility = View.VISIBLE - } - if (isPageLoad && autoDebitStatus == SUCCESS) showNextBtn() + if (autoDebitStatus == SUCCESS || autoDebitStatus == AutoPayStatus.WAITING.name) View.GONE else View.VISIBLE + if (isPageLoad && autoDebitStatus == SUCCESS) binding.footerView.visibility = View.VISIBLE } private fun initUi() { - val isForSecondLoanJourney = - arguments?.getBoolean(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY).orFalse() - binding.bankDisclaimerView.bankDisclaimerCv.visibility = - if (isForSecondLoanJourney) View.GONE else View.VISIBLE - - UxcamUtil.instance.occludeSensitiveView(binding.accountNumberTv) + binding.footerInteractionListener = this + UxcamUtil.instance.occludeSensitiveView(binding.bankAccountNumberTv) initObservers() val id = loanApplicationId if (!id.isNullOrEmpty()) { @@ -526,49 +456,37 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } } - private fun showAutoDebitLayout() { - if (binding.autoDebitLayout.root.visibility == View.VISIBLE) return - Handler().postDelayed({ - binding.autoDebitLayout.root.visibility = View.VISIBLE - binding.divider.visibility = View.VISIBLE - binding.verifiedBadge.visibility = View.VISIBLE - setEaseInAnimation(binding.autoDebitLayout.root, binding.divider, binding.verifiedBadge) - }, AUTO_DEBIT_LAYOUT_DELAY) - } - - private fun setBankDetails(bankName: String?, accountNumber: String?) { - ifLet(bankName, accountNumber) { (bankName, accountNumber) -> - binding.bankNameTv.text = bankName - binding.accountNumberTv.text = accountNumber - } - } - private fun initListeners() { - binding.autoDebitLayout.howToSetupTv.setOnClickListener(this) - binding.editAccountTv.setOnClickListener(this) + binding.selectManadateView.howToSetupTv.setOnClickListener(this) + binding.changeBankTv.setOnClickListener(this) } - private fun setupAutoDebit() { + private fun setupAutoDebit(autoPayTypeId: String? = binding.selectManadateView.mandateOptionsRv.selectedLabelLiveData.value?.id) { if (!isAdded && activity?.isFinishing.orTrue()) return - showLoader() - naviAnalyticsEventTracker.onSetupAutoDebitClicked() + naviAnalyticsEventTracker.onSetupAutoDebitClicked(autoPayTypeId) val id = loanApplicationId if (!id.isNullOrEmpty()) { - viewModel.fetchMandateRequestId(id) + showLoader() + viewModel.fetchMandateRequestId(id, AutoPayOptionData(autoPayOptionId = autoPayTypeId)) } } override fun onClick(view: View?) { when (view?.id) { R.id.how_to_setup_tv -> navigateToEnachTutorial() - R.id.edit_account_tv -> handleEditAccountClick() + R.id.change_bank_tv -> handleEditAccountClick() } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if (requestCode != ENACH_TUTORIAL_SETUP_AUTO_DEBIT || resultCode != RESULT_OK) return - setupAutoDebit() + if (resultCode == RESULT_OK) { + when (requestCode) { + ENACH_TUTORIAL_SETUP_AUTO_DEBIT -> { + setupAutoDebit(arguments?.getString(MANDATE_TYPE)) + } + } + } } private fun navigateToEnachTutorial() { @@ -617,15 +535,6 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, }) } - private fun showNextBtn() { - binding.footerView.visibility = View.VISIBLE - binding.footerView.setProperties( - viewModel.disbursementDetails.value?.footer?.backCta, - viewModel.disbursementDetails.value?.footer?.nextCta, - this - ) - } - override fun onAttach(context: Context) { super.onAttach(context) listener = context as? FragmentInteractionListener @@ -650,9 +559,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { - if (ctaData?.url == Constants.SETUP_AUTO_DEBIT) { - setupAutoDebit() - } else { + if (viewModel.isAutoPaySuccess()) { ctaData?.url?.let { listener?.navigateTo( it, Bundle().apply { @@ -660,6 +567,8 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } ) } + } else { + setupAutoDebit() } } @@ -668,11 +577,9 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, companion object { const val TAG = "BANK_DETAILS_AUTO_DEBIT_FRAGMENT" - private const val AUTO_DEBIT_LAYOUT_DELAY = 500L private const val DELAY_AFTER_ENACH_SUCCESS = 4000L private const val NUMBER_OF_RETRY_MANDATE_CREATION = 2 private const val NUMBER_OF_RETRY_MANDATE_STATUS = 6 - private const val WAITING = "WAITING" private const val EDIT_BANK_CONFIRM_DELAY = 200L private const val ENACH_TUTORIAL_SETUP_AUTO_DEBIT = 100 private const val EMANDATE_CANCEL_CODE = 0 diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt new file mode 100644 index 0000000000..5f2e01bb56 --- /dev/null +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt @@ -0,0 +1,82 @@ +package com.naviapp.personalloan.getloan.bankdetailsautodebit.view.fragments + +import android.app.Activity.RESULT_OK +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.naviapp.R +import com.naviapp.common.decorator.TopMarginItemDecoration +import com.naviapp.common.fragment.BaseFragment +import com.naviapp.databinding.FragmentEnachBinding +import com.naviapp.models.response.GenericWidgetConfig +import com.naviapp.personalloan.getloan.bankdetailsautodebit.adapter.EnachDetailsAdapter +import com.naviapp.utils.Constants.EMPTY +import java.util.* + +class EnachFragment : BaseFragment() { + private lateinit var binding: FragmentEnachBinding + + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentEnachBinding.inflate(inflater, container, false) + initUi() + return binding.root + } + + private fun initUi() { + arguments?.getParcelableArrayList(CONTENT_DATA)?.let { + binding.contentRv.adapter = EnachDetailsAdapter( + it + ) + binding.contentRv.addItemDecoration(TopMarginItemDecoration(resources.getDimension(R.dimen.layout_dp_40))) + } + arguments?.getString(FOOTER_TITLE)?.let { + binding.setupAutoDebitBtn.visibility = View.VISIBLE + binding.footerDivider.visibility = View.VISIBLE + binding.setupAutoDebitBtn.setProperties( + it, + iconId = R.drawable.ic_arrow_right_svg + ) + } ?: run { + binding.setupAutoDebitBtn.visibility = View.GONE + binding.footerDivider.visibility = View.GONE + } + + binding.setupAutoDebitBtn.setOnClickListener { + val intent = Intent() + intent.putExtra(MANDATE_TYPE, arguments?.getString(MANDATE_TYPE)) + activity?.setResult(RESULT_OK, intent) + activity?.finish() + } + } + + companion object { + const val TAG = "EnachFragment" + private const val CONTENT_DATA = "content_data" + private const val MANDATE_TYPE = "mandate_type" + private const val FOOTER_TITLE = "footer_title" + fun newInstance( + mandateType: String?, + contentWidgetList: List, + footerTitle: String? + ) = EnachFragment().apply { + val args = Bundle() + args.putParcelableArrayList( + CONTENT_DATA, + contentWidgetList as? ArrayList + ) + args.putString(MANDATE_TYPE, mandateType) + args.putString(FOOTER_TITLE, footerTitle) + arguments = args + } + } + + override val screenName: String + get() = EMPTY +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt index 7477cf5c06..a4794656f8 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt @@ -2,18 +2,23 @@ package com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import com.navi.naviinsurancesdk.util.orZero import com.naviapp.common.viewmodel.BaseVM -import com.naviapp.personalloan.getloan.bankdetailsautodebit.repositories.BankDetailsAutoDebitRepository import com.naviapp.models.EnachData +import com.naviapp.models.request.AutoPayOptionData import com.naviapp.models.response.* import com.naviapp.network.ApiErrorTagType import com.naviapp.network.models.GenericErrorResponse +import com.naviapp.personalloan.getloan.bankdetailsautodebit.repositories.BankDetailsAutoDebitRepository +import com.naviapp.utils.formatCurrency import kotlinx.coroutines.launch class BankDetailsAutoDebitVM : BaseVM() { private val repository by lazy { BankDetailsAutoDebitRepository() } - val disbursementDetails = MutableLiveData() + private val _disbursementDetails = MutableLiveData() + val disbursementDetails: LiveData + get() = _disbursementDetails private val _mandateId = MutableLiveData() val mandateId: LiveData @@ -40,15 +45,15 @@ class BankDetailsAutoDebitVM : BaseVM() { val mandateFailure: LiveData get() = _mandateFailure - private val _enachDetails = MutableLiveData() - val enachDetails: LiveData + private val _enachDetails = MutableLiveData() + val enachDetails: LiveData get() = _enachDetails fun fetchDisbursementDetails(loanApplicationId: String) { coroutineScope.launch { val response = repository.fetchDisbursementDetails(loanApplicationId) if (response.error == null) { - disbursementDetails.value = response.data + _disbursementDetails.value = response.data } else { updateErrorMessage( response.error, @@ -59,9 +64,9 @@ class BankDetailsAutoDebitVM : BaseVM() { } } - fun fetchMandateRequestId(loanApplicationId: String) { + fun fetchMandateRequestId(loanApplicationId: String, autoPayOptionData: AutoPayOptionData) { coroutineScope.launch { - val response = repository.fetchMandateRequestId(loanApplicationId) + val response = repository.fetchMandateRequestId(loanApplicationId, autoPayOptionData) if (response.error == null) { _notificationPath.value = response.data?.notificationPath _mandateId.value = response.data @@ -132,4 +137,49 @@ class BankDetailsAutoDebitVM : BaseVM() { } } } + + fun isAutoPaySuccess(): Boolean { + return disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.SUCCESS.name + } + + fun isAutoPayAadharPending(): Boolean { + return disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.AADHAR_PENDING.name + } + + fun isAutoPayPending(): Boolean { + return disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.PENDING.name + } + + fun getBankName(): String? { + return disbursementDetails.value?.disbursementDetails?.bankDetails?.bankName + } + + fun getAccountNumber(): String? { + return disbursementDetails.value?.disbursementDetails?.bankDetails?.accountNumber + } + + fun canChangeBank(): Boolean { + return (disbursementDetails.value?.disbursementDetails?.editBankRetriesLeft.orZero() <= 0 || + disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.SUCCESS.name).not() + } + + fun getAutoPayFooterData(): Footer? { + return disbursementDetails.value?.footer + } + + fun getAutoPayOptions(): List? { + return disbursementDetails.value?.disbursementDetails?.autoPayOptions + } + + fun getEmiAmount(): String? { + return disbursementDetails.value?.disbursementDetails?.emiAmount?.value?.formatCurrency() + } + + fun getEmiStartDate(): String? { + return disbursementDetails.value?.disbursementDetails?.firstDueDate + } + + fun setAutoDebitState(autoDebitStatus: String) { + disbursementDetails.value?.disbursementDetails?.autoDebitStatus = autoDebitStatus + } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt b/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt index 9c34b9c264..8709b78182 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt @@ -7,10 +7,13 @@ package com.naviapp.personalloan.getloan.helpers import android.app.Activity +import android.text.TextUtils import androidx.appcompat.app.AppCompatActivity import com.digio.`in`.esign2sdk.Digio import com.digio.`in`.esign2sdk.DigioConfig import com.digio.`in`.esign2sdk.DigioEnvironment +import com.naviapp.BuildConfig +import com.naviapp.utils.PROD import com.naviapp.utils.log class EnachHelper { @@ -25,7 +28,9 @@ class EnachHelper { digio = Digio() val digioConfig = DigioConfig() // digioConfig.logo = "url for company logo" //TODO; company logo - digioConfig.environment = DigioEnvironment.PRODUCTION //Stage is sandbox + if (TextUtils.equals(BuildConfig.FLAVOR, PROD)) + digioConfig.environment = DigioEnvironment.PRODUCTION + else digioConfig.environment = DigioEnvironment.SANDBOX try { digio?.init(activity as AppCompatActivity, digioConfig) } catch (e: Exception) { diff --git a/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt b/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt index dc79aedfa1..c8f756239a 100644 --- a/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt +++ b/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt @@ -8,7 +8,10 @@ import android.graphics.Color import android.view.View import android.widget.AdapterView import android.widget.ImageView +import android.widget.RadioButton import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.widget.TextViewCompat import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.RecyclerView import com.navi.common.model.CtaData @@ -247,7 +250,7 @@ object BindingAdapterUtil { iconCode?.let { imageView.visibility = View.VISIBLE IconUtils.updateIcon(it, imageView) - } + } ?: run { imageView.visibility = View.GONE } } @BindingAdapter("populateLineItems") @@ -443,14 +446,6 @@ object BindingAdapterUtil { } } } - @BindingAdapter("setNoteText") - @JvmStatic - fun setNoteText( - noteView: NoteView, - text: String? - ) { - text?.let { noteView.setProperties(it) } - } @BindingAdapter("setDataToHorizontalLabelRecyclerView") @JvmStatic @@ -462,4 +457,50 @@ object BindingAdapterUtil { horizontalLabelRecyclerView.setProperties(labelViewResponseList) } + + @BindingAdapter("setNoteText") + @JvmStatic + fun setNoteText( + noteView: NoteView, + text: String? + ) { + text?.let { noteView.setProperties(it) } + } + + @BindingAdapter("setRadioDataList") + @JvmStatic + fun setRadioDataList( + radioRecyclerView: RadioRecyclerView, + radioButtonList: List? + ) { + if (radioButtonList.isNullOrEmpty()) return + radioRecyclerView.setProperties( + radioButtonList, + gap = radioRecyclerView.resources.getDimension(R.dimen.layout_dp_20) + ) + } + + @BindingAdapter("setStyleToTextView") + @JvmStatic + fun setStyleToTextView( + textView: TextView, + styleId: Int? + ) { + styleId?.let { + TextViewCompat.setTextAppearance(textView, it) + } + } + + @BindingAdapter("setColorStateListToRadioText") + @JvmStatic + fun setColorStateListToRadioText( + radioButton: RadioButton, + colorStateList: Int? + ) { + colorStateList?.let { + radioButton.setTextColor(ContextCompat.getColorStateList(radioButton.context, it)) + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/utils/Constants.kt b/app/src/main/java/com/naviapp/utils/Constants.kt index 2842fef77b..6d34a7b567 100644 --- a/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/app/src/main/java/com/naviapp/utils/Constants.kt @@ -132,4 +132,5 @@ object Constants { const val LEGAL_DOC_TYPE_TNC = "tnc" const val LEGAL_DOC_TYPE_PRIVACY_POLICY = "privacy-policy" const val CURRENT_ADDRESS ="CURRENT_ADDRESS" + const val MANDATE_TYPE = "MANDATE_TYPE" } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/utils/IconUtils.kt b/app/src/main/java/com/naviapp/utils/IconUtils.kt index 9af4c788c6..dbbcc2c62e 100644 --- a/app/src/main/java/com/naviapp/utils/IconUtils.kt +++ b/app/src/main/java/com/naviapp/utils/IconUtils.kt @@ -59,6 +59,8 @@ object IconUtils { private const val INVESTMENT_ICON = "INVESTMENT_ICON" private const val KYC_IN_PROGRESS_ICON = "KYC_IN_PROGRESS_ICON" private const val VERIFICATION_ERROR_ICON = "VERIFICATION_ERROR_ICON" + private const val LIGHTNING_RECOMMENDED = "LIGHTNING_RECOMMENDED" + private const val LIGHTNING = "LIGHTNING" const val FORM_RELATION = "FORM_RELATION" const val FORM_EMPLOYMENT_TYPE = "FORM_EMPLOYMENT_TYPE" const val FORM_SERVICE_TYPE = "FORM_SERVICE_TYPE" @@ -181,6 +183,8 @@ object IconUtils { INVESTMENT_ICON -> R.drawable.ic_investment KYC_IN_PROGRESS_ICON -> R.drawable.ic_kyc_in_progress VERIFICATION_ERROR_ICON -> R.drawable.ic_verification_fail + LIGHTNING_RECOMMENDED -> R.drawable.ic_recommended_lightning + LIGHTNING -> R.drawable.ic_lightning else -> -1 } } diff --git a/app/src/main/res/drawable/ic_bank_verified.xml b/app/src/main/res/drawable/ic_bank_verified.xml new file mode 100644 index 0000000000..71057a6445 --- /dev/null +++ b/app/src/main/res/drawable/ic_bank_verified.xml @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_green_tick_circle_16.xml b/app/src/main/res/drawable/ic_green_tick_circle_16.xml new file mode 100644 index 0000000000..418d28b15c --- /dev/null +++ b/app/src/main/res/drawable/ic_green_tick_circle_16.xml @@ -0,0 +1,15 @@ + + + + diff --git a/app/src/main/res/drawable/ic_lightning.xml b/app/src/main/res/drawable/ic_lightning.xml new file mode 100644 index 0000000000..8bdff70538 --- /dev/null +++ b/app/src/main/res/drawable/ic_lightning.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_recommended_lightning.xml b/app/src/main/res/drawable/ic_recommended_lightning.xml new file mode 100644 index 0000000000..c2731607fa --- /dev/null +++ b/app/src/main/res/drawable/ic_recommended_lightning.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/radio_custom_view_selector.xml b/app/src/main/res/drawable/radio_custom_view_selector.xml new file mode 100644 index 0000000000..38b41d8174 --- /dev/null +++ b/app/src/main/res/drawable/radio_custom_view_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/radio_icon_tint_selector.xml b/app/src/main/res/drawable/radio_icon_tint_selector.xml new file mode 100644 index 0000000000..72d9d6f995 --- /dev/null +++ b/app/src/main/res/drawable/radio_icon_tint_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bank_details_auto_debit_fragment.xml b/app/src/main/res/layout/bank_details_auto_debit_fragment.xml index a9c336ee81..636a093ed5 100644 --- a/app/src/main/res/layout/bank_details_auto_debit_fragment.xml +++ b/app/src/main/res/layout/bank_details_auto_debit_fragment.xml @@ -1,145 +1,160 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> - + + + + + + + + + + + + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_above="@+id/footer_view" + android:paddingStart="@dimen/layout_dp_20" + android:paddingTop="@dimen/layout_dp_28" + android:paddingEnd="@dimen/layout_dp_20" + android:paddingBottom="@dimen/layout_dp_20" + app:layout_constraintBottom_toTopOf="@id/footer_view" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_height="wrap_content"> - - - + app:layout_constraintTop_toTopOf="parent"> - + - + - + - + - - - + + app:layout_constraintTop_toBottomOf="@id/auto_pay_view" /> - + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/bank_verified_iv" + app:setNoteText="@{@string/same_bank_account_will_be_used_to_get_loan_to_setup_auto_debit}" /> - + app:layout_constraintStart_toStartOf="parent" + app:setFooterData="@{viewModel.getAutoPayFooterData()}" + app:setFooterInteractionListener="@{footerInteractionListener}" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/enach_tutorial_activity.xml b/app/src/main/res/layout/enach_tutorial_activity.xml index a7f6589a45..b52efbbc4b 100644 --- a/app/src/main/res/layout/enach_tutorial_activity.xml +++ b/app/src/main/res/layout/enach_tutorial_activity.xml @@ -2,50 +2,47 @@ - + android:background="@color/view_background_color_six" + android:orientation="vertical" + android:paddingBottom="10dp"> - - - - - + android:background="@color/view_background_color_six" + app:liftOnScroll="true"> - + - + + + + + - + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + + diff --git a/app/src/main/res/layout/fragment_enach.xml b/app/src/main/res/layout/fragment_enach.xml new file mode 100644 index 0000000000..0679370216 --- /dev/null +++ b/app/src/main/res/layout/fragment_enach.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/section_heading_layout.xml b/app/src/main/res/layout/section_heading_layout.xml index f0eefe6e96..c872df8aef 100644 --- a/app/src/main/res/layout/section_heading_layout.xml +++ b/app/src/main/res/layout/section_heading_layout.xml @@ -10,9 +10,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_auto_pay_pending_aadhar.xml b/app/src/main/res/layout/view_auto_pay_pending_aadhar.xml new file mode 100644 index 0000000000..dd708c37fd --- /dev/null +++ b/app/src/main/res/layout/view_auto_pay_pending_aadhar.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_auto_pay_success.xml b/app/src/main/res/layout/view_auto_pay_success.xml new file mode 100644 index 0000000000..c489bacffa --- /dev/null +++ b/app/src/main/res/layout/view_auto_pay_success.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_radio_icon_custom.xml b/app/src/main/res/layout/view_radio_icon_custom.xml new file mode 100644 index 0000000000..a2f193776e --- /dev/null +++ b/app/src/main/res/layout/view_radio_icon_custom.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_select_mandate.xml b/app/src/main/res/layout/view_select_mandate.xml new file mode 100644 index 0000000000..9f1dc3c3a3 --- /dev/null +++ b/app/src/main/res/layout/view_select_mandate.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7b7ab91f1a..85639f83eb 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -179,6 +179,7 @@ 160dp 86dp 5dp + 54dp 2dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4dd2f24067..edf10295a0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -306,12 +306,13 @@ No Transactions! Transactions related to EMI(s)\nwill show here Please select your primary email - EMI of %1$s will be auto-debited starting %2$s + EMI of %1$s will be auto-paid starting %2$s Auto-debit setup failed. Please retry. Pending Your auto-debit setup is pending confirmation. It may take upto 10 mins. Please wait... Auto-debit setup done + Auto-pay setup done Select valid Bank Kindly reach out to us for any questions\nregarding your loan or the app We will get back to you within 24 hours @@ -430,7 +431,7 @@ Voter ID Capture PAN Capture ID Capture - Same bank account will be used to get loan & to setup auto-debit of EMIs + Same bank account will be used to get loan & to setup auto-pay of EMIs Change Bank? Leave a feedback…(optional) It seems you are leaving! @@ -763,4 +764,8 @@ Do you want to change the slot? You can only do this once Change Slot + Your auto-pay setup with Aadhar OTP is signed + Setup auto-pay for EMIs + Your auto-pay setup is pending confirmation. It may take up to 10 mins. + Setup Auto-pay diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 78459a11f1..8998f8c204 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -603,11 +603,13 @@ @color/title_text_color 0.02 + + + From 2d50db7c5e867306b2094b6bd27764585c000979 Mon Sep 17 00:00:00 2001 From: shankar yadav Date: Tue, 26 Oct 2021 19:52:29 +0530 Subject: [PATCH 38/53] Release 2.0.5 (#1679) * Working with Mock * Updated call name * Integration done. Need to dev test e2e * handling description for OSV * Working * Initial commit * Fathers name UI * minor change * code refactor * Change listener/Bug fix * Code refactor * Osv Contract updated * Condition updated for Kyc In Review Screen * Add polling for fathers name submit * Address page min char size * neoEyed sdk update from 3.3.0 to 3.3.1 * Minor change * Code refactor * Code refactor * changes * changes in dockerfile * changes in dockerfile * changes in dockerfile * changes in dockerfile * changes in dockerfile * changes in dockerfile * Code refactor * Refactor code * Minor change * Remove fathersNameSubmitSuccess flag * Code refactor * Fixed Testcases * AMC - UI fixes * reviewed fixes * exit status added to e2e dockerfile * removed stetho reference * Upgrading neoEyed sdk in navi-analytics * More UI - Fixes * exit status for a positive case check * exit status for a positive case check * Deleting build files * exit status for a positive case check * toolbar sticky * cta should be null. (#1669) * shanakar review comments issue resolved * Removing neoEyed sdk dependency from app, since it's in analytics module * Redirection for MAC * fix typo * pancard number number fixes * remvoe file * Handling pan mismatch error from cibil data in offer generation (#1598) * Handling pan mismatch from cibil data in offer generation * Adding null check * Handling cibil error in loan rejection api * Update build.gradle * cagr fixes * Fix wrong import issue * Feature/new auto pay (#1650) * First Draft Mandate Options * Working Radio Custom View * Working enach tutorial * Working AutoPay * String + No button if no footer data coming from backend. * Sandbox for digio esign in dev and qa env * pan default name changes * Fix AMC issue and handle IFSC failure case * dob prefilled (#1687) * fix sell otp issue * payment issue fixes * Karza Async Implementation * minor change Co-authored-by: rahul bhat Co-authored-by: Hitesh Kumar Co-authored-by: adarshs Co-authored-by: Sidharth Bamba Co-authored-by: Sidharth Bamba Co-authored-by: Devendra Singh Co-authored-by: Shankar Yadav Co-authored-by: satish_p --- .gitignore | 2 +- Dockerfile | 7 +- app/build.gradle | 4 +- app/libs/neoeyed-sdk-release-3.3.1.aar | Bin 0 -> 41709 bytes .../dispatchers/AsyncDispatcher.kt | 3 +- .../dispatchers/ServerDispatcher.kt | 3 +- app/src/main/assets/success.json | 3866 +++++++++++++++++ .../naviapp/analytics/utils/NaviAnalytics.kt | 15 +- .../java/com/naviapp/common/BaseActivity.kt | 2 +- .../naviapp/common/adapter/RadioRvAdapter.kt | 70 + .../naviapp/common/customview/DobEditText.kt | 1 + .../customview/HorizontalLabelRecyclerView.kt | 101 + .../com/naviapp/common/customview/NoteView.kt | 2 +- .../common/customview/RadioCustomView.kt | 35 + .../common/customview/RadioRecyclerView.kt | 34 + .../common/fragment/CommonDialogBox.kt | 11 +- .../naviapp/common/fragment/OtpBottomSheet.kt | 23 +- .../common/repository/OtpRepository.kt | 3 +- .../errors/fragments/ActionErrorFragment.kt | 2 + .../com/naviapp/models/KycUiStatusValue.kt | 17 + .../com/naviapp/models/LabelViewResponse.kt | 10 + .../models/RadioCustomViewBindingData.kt | 11 + .../com/naviapp/models/SubPageStatusType.kt | 4 +- .../java/com/naviapp/models/UiStatusValue.kt | 21 - .../models/request/AutoPayOptionData.kt | 8 + .../com/naviapp/models/request/KycRequest.kt | 9 +- .../naviapp/models/request/OsvSlotRequest.kt | 8 + .../AddressVerificationDetailsResponse.kt | 7 + .../response/DisbursementDetailsResponse.kt | 29 +- .../models/response/EnachWidgetResponse.kt | 12 + .../models/response/KycDetailsResponse.kt | 1 + .../KycPhysicalAddressVerificationResponse.kt | 19 + .../naviapp/models/response/OsvResponse.kt | 18 + .../models/response/RadioButtonResponse.kt | 15 + .../models/response/WidgetGenericResponse.kt | 7 +- .../com/naviapp/network/ApiErrorTagType.kt | 4 +- .../java/com/naviapp/network/models/Action.kt | 5 +- .../retrofit/LongRunningRetrofitProvider.kt | 36 - .../network/retrofit/RetrofitService.kt | 18 +- .../personalloan/di/PersonalLoanModule.kt | 20 + .../getloan/activities/GetLoanActivity.kt | 5 + .../fragments/KycAddressFragment.kt | 44 +- .../fragments/KycAddressProofFragment.kt | 6 +- .../fragments/BankDetailsFragment.kt | 15 +- .../BankDetailsAutoDebitRepository.kt | 13 +- .../view/activities/EnachTutorialActivity.kt | 66 +- .../fragments/BankDetailsAutoDebitFragment.kt | 193 +- .../view/fragments/EnachFragment.kt | 82 + .../viewmodels/BankDetailsAutoDebitVM.kt | 64 +- .../getloan/helper/GetLoanViewHelper.kt | 18 +- .../getloan/helpers/EnachHelper.kt | 7 +- .../getloan/kyc/adapter/KycItemsAdapter.kt | 33 +- .../getloan/kyc/fragments/KycFragment.kt | 94 +- .../kyc/fragments/KycInReviewFragment.kt | 121 +- .../KycPhysicalAddressVerificationFragment.kt | 115 + .../kyc/repositories/KycInReviewRepository.kt | 5 +- ...ycPhysicalAddressVerificationRepository.kt | 17 + .../getloan/kyc/viewmodels/KycInReviewVM.kt | 18 +- ...KycPhysicalAddressVerificationViewModel.kt | 51 + .../getloan/kyc/viewmodels/KycVM.kt | 70 +- .../loandetails/viewmodels/LoanDetailsVM.kt | 33 +- .../LoanEligibilityLoaderActivity.kt | 29 +- .../EmploymentVerificationFragment.kt | 25 +- .../pan/fragments/PanFragment.kt | 45 +- .../com/naviapp/utils/BindingAdapterUtil.kt | 64 +- .../main/java/com/naviapp/utils/Constants.kt | 5 + app/src/main/java/com/naviapp/utils/Ext.kt | 18 +- .../main/java/com/naviapp/utils/IconUtils.kt | 8 + .../main/res/color/selector_black_white.xml | 5 + app/src/main/res/drawable/bg_label_view.xml | 5 + .../bg_rounded_rect_deepbluegray_4.xml | 12 + .../res/drawable/bg_rounded_rect_gray_4.xml | 12 + .../main/res/drawable/ic_bank_verified.xml | 33 + .../res/drawable/ic_green_tick_circle_16.xml | 15 + app/src/main/res/drawable/ic_lightning.xml | 12 + app/src/main/res/drawable/ic_pan_error.xml | 20 + .../res/drawable/ic_recommended_lightning.xml | 15 + .../res/drawable/ic_verification_fail.xml | 20 + .../drawable/radio_custom_view_selector.xml | 6 + .../res/drawable/radio_icon_tint_selector.xml | 6 + .../bank_details_auto_debit_fragment.xml | 219 +- app/src/main/res/layout/dialog_box_common.xml | 27 +- .../res/layout/enach_tutorial_activity.xml | 73 +- app/src/main/res/layout/fragment_enach.xml | 42 + ...ment_kyc_physical_address_verification.xml | 135 + .../fragment_kyc_verification_in_progress.xml | 58 +- .../main/res/layout/item_text_field_view.xml | 31 + .../res/layout/section_heading_layout.xml | 3 +- .../main/res/layout/view_auto_pay_pending.xml | 37 + .../layout/view_auto_pay_pending_aadhar.xml | 50 + .../main/res/layout/view_auto_pay_success.xml | 40 + app/src/main/res/layout/view_label.xml | 29 + .../res/layout/view_radio_icon_custom.xml | 56 + .../main/res/layout/view_select_mandate.xml | 60 + app/src/main/res/raw/mock.json | 89 +- app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 16 +- app/src/main/res/values/styles.xml | 7 + .../viewmodels/DashboardSharedVMTest.kt | 48 +- .../viewmodel/PersonalLoanPanVMTest.kt | 2 +- navi-amc/src/main/AndroidManifest.xml | 41 +- .../constants/AnalyticsConstant.kt | 2 + .../navigator/NaviAmcDeeplinkNavigator.kt | 17 +- .../com/navi/amc/investorapp/response/Fund.kt | 21 +- .../investorapp/response/ResponseCommon.kt | 2 +- .../response/ResponseInvestmentDetails.kt | 2 +- .../response/ResponseKycDocuments.kt | 28 + .../investorapp/retrofit/ApiErrorHandler.kt | 4 +- .../navi/amc/investorapp/retrofit/ApiUtils.kt | 34 +- .../investorapp/retrofit/ServicesInterface.kt | 7 +- .../sharedpreference/SharedPreferencesKeys.kt | 7 +- .../ui/activity/OnBoardingLoadingActivity.kt | 58 + .../ui/activity/WebViewActivity.kt | 13 +- .../investorapp/ui/home/HomeScreenFragment.kt | 123 +- .../investorapp/ui/investment/MySipAdapter.kt | 4 +- .../ui/investment/SellMyFundActivity.kt | 62 +- .../ui/kyc/fragments/BankDetailsFragment.kt | 55 +- .../kyc/fragments/BankVerificationFragment.kt | 2 + .../ui/kyc/model/BankVerificationResponse.kt | 10 + .../ui/kyc/viewmodel/BankDetailsVM.kt | 28 +- .../ui/kyc/viewmodel/BankVerificationVM.kt | 7 +- .../ui/mutual_fund/BuyingflowSIPActivity.kt | 4 + .../ui/mutual_fund/MutualFundActivity.kt | 80 +- .../OtpVerificationActivity.kt | 39 +- .../OtpVerificationViewModel.kt | 7 +- .../ui/panCard/OnBoardingLoadingVM.kt | 7 + .../ui/panCard/VerifyPanCardActivity.kt | 86 +- .../ui/panCard/VerifyPanViewModel.kt | 17 + .../ui/payment/PaymentResultResponse.kt | 2 - .../ui/payment/PaymentSuccessActivity.kt | 8 + .../ui/setup_account/KycDocumentsActivity.kt | 90 + .../setup_account/MyDocumentsListAdapter.kt | 43 + .../setup_account/SetupYouAcountViewModel.kt | 10 +- .../ui/setup_account/SetupYourActivity.kt | 18 - .../investorapp/ui/sip/SIPPaymentActivity.kt | 18 +- .../amc/investorapp/ui/sip/SipActivity.kt | 10 +- .../amc/investorapp/ui/sip/SipViewModel.kt | 4 +- .../navi/amc/investorapp/util/IconUtils.kt | 2 + navi-amc/src/main/res/drawable/aadhaar.png | Bin 0 -> 4620 bytes .../main/res/drawable/bg_rectangle_f5f5f5.xml | 14 + .../src/main/res/drawable/ic_dropdown.xml | 9 + .../main/res/drawable/ic_kyc_documents.xml | 19 + .../main/res/drawable/ic_my_investment.xml | 98 +- .../res/drawable/ic_order_in_progress.xml | 36 +- .../src/main/res/drawable/married_new.xml | 68 + .../src/main/res/drawable/yellow_line_png.png | Bin 0 -> 1059 bytes .../main/res/layout/activity_about_income.xml | 2 +- .../res/layout/activity_buyingflow_sip.xml | 718 +-- .../res/layout/activity_kyc_documents.xml | 123 + .../layout/activity_onboarding_loading.xml | 35 + .../res/layout/activity_otp_verification.xml | 4 +- .../res/layout/activity_payment_sucess.xml | 101 +- .../res/layout/activity_redemption_order.xml | 4 +- .../main/res/layout/activity_sell_my_fund.xml | 4 +- .../main/res/layout/activity_setupyour.xml | 15 +- navi-amc/src/main/res/layout/activity_sip.xml | 15 +- .../main/res/layout/activity_sippayment.xml | 14 +- .../res/layout/activity_verify_pan_card.xml | 7 +- .../main/res/layout/fragment_home_screen.xml | 40 +- .../src/main/res/layout/layout_holdings.xml | 32 +- .../res/layout/layout_kyc_documents_list.xml | 57 + .../main/res/layout/mflisting_rec_design.xml | 166 +- .../main/res/layout/mutualfund_activity.xml | 2401 +++++----- .../navi_nifty_fifty_index_fund_view.xml | 1 + .../main/res/layout/view_progress_header.xml | 7 +- navi-amc/src/main/res/values/colors.xml | 1 + navi-amc/src/main/res/values/strings.xml | 4 +- navi-analytics/build.gradle | 2 +- .../libs/neoeyed-sdk-release-3.3.0.aar | Bin 41667 -> 0 bytes neoeyed-sdk-release-3.3.0/build.gradle | 2 - .../neoeyed-sdk-release-3.3.0.aar | Bin 41667 -> 0 bytes neoeyed-sdk-release-3.3.1/build.gradle | 2 + .../neoeyed-sdk-release-3.3.1.aar | Bin 0 -> 41709 bytes settings.gradle | 2 +- 174 files changed, 9290 insertions(+), 2596 deletions(-) create mode 100644 app/libs/neoeyed-sdk-release-3.3.1.aar create mode 100644 app/src/main/assets/success.json create mode 100644 app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt create mode 100644 app/src/main/java/com/naviapp/common/customview/HorizontalLabelRecyclerView.kt create mode 100644 app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt create mode 100644 app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt create mode 100644 app/src/main/java/com/naviapp/models/KycUiStatusValue.kt create mode 100644 app/src/main/java/com/naviapp/models/LabelViewResponse.kt create mode 100644 app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt delete mode 100644 app/src/main/java/com/naviapp/models/UiStatusValue.kt create mode 100644 app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt create mode 100644 app/src/main/java/com/naviapp/models/request/OsvSlotRequest.kt create mode 100644 app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt create mode 100644 app/src/main/java/com/naviapp/models/response/KycPhysicalAddressVerificationResponse.kt create mode 100644 app/src/main/java/com/naviapp/models/response/OsvResponse.kt create mode 100644 app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt delete mode 100644 app/src/main/java/com/naviapp/network/retrofit/LongRunningRetrofitProvider.kt create mode 100644 app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt create mode 100644 app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt create mode 100644 app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycPhysicalAddressVerificationFragment.kt create mode 100644 app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycPhysicalAddressVerificationRepository.kt create mode 100644 app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycPhysicalAddressVerificationViewModel.kt create mode 100644 app/src/main/res/color/selector_black_white.xml create mode 100644 app/src/main/res/drawable/bg_label_view.xml create mode 100644 app/src/main/res/drawable/bg_rounded_rect_deepbluegray_4.xml create mode 100644 app/src/main/res/drawable/bg_rounded_rect_gray_4.xml create mode 100644 app/src/main/res/drawable/ic_bank_verified.xml create mode 100644 app/src/main/res/drawable/ic_green_tick_circle_16.xml create mode 100644 app/src/main/res/drawable/ic_lightning.xml create mode 100644 app/src/main/res/drawable/ic_pan_error.xml create mode 100644 app/src/main/res/drawable/ic_recommended_lightning.xml create mode 100644 app/src/main/res/drawable/ic_verification_fail.xml create mode 100644 app/src/main/res/drawable/radio_custom_view_selector.xml create mode 100644 app/src/main/res/drawable/radio_icon_tint_selector.xml create mode 100644 app/src/main/res/layout/fragment_enach.xml create mode 100644 app/src/main/res/layout/fragment_kyc_physical_address_verification.xml create mode 100644 app/src/main/res/layout/item_text_field_view.xml create mode 100644 app/src/main/res/layout/view_auto_pay_pending.xml create mode 100644 app/src/main/res/layout/view_auto_pay_pending_aadhar.xml create mode 100644 app/src/main/res/layout/view_auto_pay_success.xml create mode 100644 app/src/main/res/layout/view_label.xml create mode 100644 app/src/main/res/layout/view_radio_icon_custom.xml create mode 100644 app/src/main/res/layout/view_select_mandate.xml create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/model/BankVerificationResponse.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/KycDocumentsActivity.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt create mode 100644 navi-amc/src/main/res/drawable/aadhaar.png create mode 100644 navi-amc/src/main/res/drawable/bg_rectangle_f5f5f5.xml create mode 100644 navi-amc/src/main/res/drawable/ic_dropdown.xml create mode 100644 navi-amc/src/main/res/drawable/ic_kyc_documents.xml create mode 100644 navi-amc/src/main/res/drawable/married_new.xml create mode 100644 navi-amc/src/main/res/drawable/yellow_line_png.png create mode 100644 navi-amc/src/main/res/layout/activity_kyc_documents.xml create mode 100644 navi-amc/src/main/res/layout/activity_onboarding_loading.xml create mode 100644 navi-amc/src/main/res/layout/layout_kyc_documents_list.xml delete mode 100644 navi-analytics/libs/neoeyed-sdk-release-3.3.0.aar delete mode 100644 neoeyed-sdk-release-3.3.0/build.gradle delete mode 100644 neoeyed-sdk-release-3.3.0/neoeyed-sdk-release-3.3.0.aar create mode 100644 neoeyed-sdk-release-3.3.1/build.gradle create mode 100644 neoeyed-sdk-release-3.3.1/neoeyed-sdk-release-3.3.1.aar diff --git a/.gitignore b/.gitignore index 03b025c175..581c4f22ef 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,6 @@ vcs.xml digio-kyc-1.0.13/build digio-esign-v2.8.0/build truecallersdk-2.6.1-releasePartner/build -neoeyed-sdk-release-3.3.0/build/ +neoeyed-sdk-release-3.3.1/build/ finoramic-android-sdk/build finoramic-androidx-sdk/build/ diff --git a/Dockerfile b/Dockerfile index f591615a13..93995603aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,10 +37,9 @@ RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup; \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests; \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup ; \ - + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup && \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests && \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ diff --git a/app/build.gradle b/app/build.gradle index b5098d3572..fe3d8429c7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ kapt { correctErrorTypes true } -def VERSION_NAME = "2.0.4" +def VERSION_NAME = "2.0.5" android { compileSdkVersion 29 @@ -42,7 +42,7 @@ android { applicationId "com.naviapp" minSdkVersion 21 targetSdkVersion 29 - versionCode 80 + versionCode 81 versionName VERSION_NAME multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/libs/neoeyed-sdk-release-3.3.1.aar b/app/libs/neoeyed-sdk-release-3.3.1.aar new file mode 100644 index 0000000000000000000000000000000000000000..39ec2ec568dfdbd974894d1a25f3fd62638699a3 GIT binary patch literal 41709 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 literal 0 HcmV?d00001 diff --git a/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/AsyncDispatcher.kt b/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/AsyncDispatcher.kt index b7baa3c7dc..2308a1cc42 100644 --- a/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/AsyncDispatcher.kt +++ b/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/AsyncDispatcher.kt @@ -1,6 +1,5 @@ package com.naviappmockserver.dispatchers -import com.facebook.stetho.server.http.HttpStatus import com.google.common.collect.ImmutableMap import com.google.gson.Gson import com.naviappmockserver.contract.AadhaarInitVerificationDetails @@ -372,7 +371,7 @@ class AsyncDispatcher( apiTracker.computeIfAbsent(apiPath) { CountDownLatch(latchCount) } private fun pathNotFound(request: RecordedRequest) = MockResponse() - .setResponseCode(HttpStatus.HTTP_NOT_FOUND) + .setResponseCode(404) .setBody( gson.toJson( ImmutableMap.of("Path not found", request.path ?: "") diff --git a/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/ServerDispatcher.kt b/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/ServerDispatcher.kt index 064ce92b55..9a60cf8305 100644 --- a/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/ServerDispatcher.kt +++ b/app/src/androidTestMockServer/java/com/naviappmockserver/dispatchers/ServerDispatcher.kt @@ -1,6 +1,5 @@ package com.naviappmockserver.dispatchers -import com.facebook.stetho.server.http.HttpStatus import com.google.common.collect.ImmutableMap import com.google.gson.Gson import com.naviappmockserver.contract.* @@ -65,7 +64,7 @@ abstract class ServerDispatcher( protected fun notFoundPath(request: RecordedRequest) = MockResponse() - .setResponseCode(HttpStatus.HTTP_NOT_FOUND) + .setResponseCode(404) .setBody( gson.toJson( ImmutableMap.of( diff --git a/app/src/main/assets/success.json b/app/src/main/assets/success.json new file mode 100644 index 0000000000..ffdcd461dd --- /dev/null +++ b/app/src/main/assets/success.json @@ -0,0 +1,3866 @@ +{ + "v": "5.1.7", + "fr": 30, + "ip": 25, + "op": 69, + "w": 600, + "h": 600, + "nm": "success", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Layer 4 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 115.68, + 468.673, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 26.859, + 26.86, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.859, + 20.86 + ], + [ + 20.859, + -20.86 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 26.859, + 26.86 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 100 + ], + "e": [ + 0 + ] + }, + { + "t": 22 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Layer 5 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 467.82, + 115.827, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 26.86, + 26.859, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.86, + 20.859 + ], + [ + 20.86, + -20.859 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 26.86, + 26.859 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 22 + } + ], + "ix": 1 + }, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Layer 6 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 115.327, + 116.18, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 26.859, + 26.859, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.859, + -20.86 + ], + [ + 20.859, + 20.86 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 26.859, + 26.86 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 100 + ], + "e": [ + 0 + ] + }, + { + "t": 22 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Layer 7 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 468.174, + 468.32, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 26.86, + 26.86, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -20.86, + -20.86 + ], + [ + 20.86, + 20.86 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 26.86, + 26.86 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 22 + } + ], + "ix": 1 + }, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Layer 8 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 42.5, + 292.5, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 35.5, + 6, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 6, + 6 + ], + [ + 65, + 6 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 100 + ], + "e": [ + 0 + ] + }, + { + "t": 22 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Layer 9 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 541, + 292, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 35.5, + 6, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 6, + 6 + ], + [ + 65, + 6 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 22 + } + ], + "ix": 1 + }, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Layer 10 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 292, + 541.5, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 6, + 35.5, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 6, + 65 + ], + [ + 6, + 6 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 0, + "k": 0, + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 100 + ], + "e": [ + 0 + ] + }, + { + "t": 22 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "Layer 11 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 291.5, + 43, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 6, + 35.5, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 6, + 65 + ], + [ + 6, + 6 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 12, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 4, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 22 + } + ], + "ix": 1 + }, + "e": { + "a": 0, + "k": 100, + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 0, + "op": 28, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 300, + 300, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { + "a": 0, + "k": [ + 367.859, + 367.859 + ], + "ix": 2 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 25, + "s": [ + 0 + ], + "e": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.089 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.655 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p089_1_0p655_0" + ], + "t": 36, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 50 + } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.333 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.829 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p333_1_0p829_0" + ], + "t": 25, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 39 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.893382352941, + 0.893382352941, + 0.893382352941, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 20, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 1.93, + -10.07 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 4, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 25, + "op": 50, + "st": 25, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 300, + 300, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { + "a": 0, + "k": [ + 367.859, + 367.859 + ], + "ix": 2 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 3 + }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0_1_0p333_0" + ], + "t": 0, + "s": [ + 0 + ], + "e": [ + 0 + ] + }, + { + "i": { + "x": [ + 0.089 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.655 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p089_1_0p655_0" + ], + "t": 11, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 25 + } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.333 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.829 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p333_1_0p829_0" + ], + "t": 0, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "t": 14 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 0.893382352941, + 0.893382352941, + 0.893382352941, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 20, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 4, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 1.93, + -10.07 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 4, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 25, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 0, + "nm": "Pre-comp 1", + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "n": [ + "0p833_0p833_0p167_0p167" + ], + "t": 54, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.833 + ], + "y": [ + 0.833 + ] + }, + "o": { + "x": [ + 0.167 + ], + "y": [ + 0.167 + ] + }, + "n": [ + "0p833_0p833_0p167_0p167" + ], + "t": 56, + "s": [ + 100 + ], + "e": [ + 100 + ] + }, + { + "t": 62 + } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 300, + 300, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 300, + 300, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.833, + 0.833, + 0.833 + ], + "y": [ + 0.833, + 0.833, + 0.833 + ] + }, + "o": { + "x": [ + 0.167, + 0.167, + 0.167 + ], + "y": [ + 0.167, + 0.167, + 0.167 + ] + }, + "n": [ + "0p833_0p833_0p167_0p167", + "0p833_0p833_0p167_0p167", + "0p833_0p833_0p167_0p167" + ], + "t": 54, + "s": [ + 86, + 86, + 100 + ], + "e": [ + 94, + 94, + 100 + ] + }, + { + "t": 62 + } + ], + "ix": 6 + } + }, + "ao": 0, + "w": 600, + "h": 600, + "ip": 54, + "op": 354, + "st": 54, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Layer 2 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 300, + 300, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 137.378, + 109.309, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + -84.878, + 0.669 + ], + [ + -28.738, + 56.809 + ], + [ + 84.878, + -56.809 + ] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [ + 1, + 1, + 1, + 1 + ], + "ix": 3 + }, + "o": { + "a": 0, + "k": 100, + "ix": 4 + }, + "w": { + "a": 0, + "k": 21, + "ix": 5 + }, + "lc": 1, + "lj": 1, + "ml": 10, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 137.378, + 109.308 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.185 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p185_1_0p333_0" + ], + "t": 59, + "s": [ + 0 + ], + "e": [ + 6 + ] + }, + { + "i": { + "x": [ + 0.306 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p306_1_0p333_0" + ], + "t": 62, + "s": [ + 6 + ], + "e": [ + 0 + ] + }, + { + "t": 66 + } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.35 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p35_1_0p333_0" + ], + "t": 54, + "s": [ + 0 + ], + "e": [ + 100 + ] + }, + { + "i": { + "x": [ + 0.032 + ], + "y": [ + 1 + ] + }, + "o": { + "x": [ + 0.333 + ], + "y": [ + 0 + ] + }, + "n": [ + "0p032_1_0p333_0" + ], + "t": 62, + "s": [ + 100 + ], + "e": [ + 94 + ] + }, + { + "t": 66 + } + ], + "ix": 2 + }, + "o": { + "a": 0, + "k": 0, + "ix": 3 + }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 54, + "op": 354, + "st": 54, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Layer 1 Outlines", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100, + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10 + }, + "p": { + "a": 0, + "k": [ + 299.988, + 299.91, + 0 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 190.878, + 189.014, + 0 + ], + "ix": 1 + }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [ + 0.046, + 0.046, + 0.667 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.333, + 0.333, + 0.333 + ], + "y": [ + 0, + 0, + 0 + ] + }, + "n": [ + "0p046_1_0p333_0", + "0p046_1_0p333_0", + "0p667_1_0p333_0" + ], + "t": 50, + "s": [ + 0, + 0, + 100 + ], + "e": [ + 116, + 116, + 100 + ] + }, + { + "i": { + "x": [ + 0.019, + 0.019, + 0.667 + ], + "y": [ + 1, + 1, + 1 + ] + }, + "o": { + "x": [ + 0.333, + 0.333, + 0.333 + ], + "y": [ + 0.032, + 0.032, + 0 + ] + }, + "n": [ + "0p019_1_0p333_0p032", + "0p019_1_0p333_0p032", + "0p667_1_0p333_0" + ], + "t": 61, + "s": [ + 116, + 116, + 100 + ], + "e": [ + 100, + 100, + 100 + ] + }, + { + "t": 67 + } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [ + -4.067, + -3.573 + ], + [ + 0, + 0 + ], + [ + -2.665, + -0.588 + ], + [ + 0, + 0 + ], + [ + -1.937, + -5.043 + ], + [ + 0, + 0 + ], + [ + -2.087, + -1.753 + ], + [ + 0, + 0 + ], + [ + 0.635, + -5.357 + ], + [ + 0, + 0 + ], + [ + -1.033, + -2.517 + ], + [ + 0, + 0 + ], + [ + 3.063, + -4.444 + ], + [ + 0, + 0 + ], + [ + 0.259, + -2.704 + ], + [ + 0, + 0 + ], + [ + 4.789, + -2.513 + ], + [ + 0, + 0 + ], + [ + 1.492, + -2.273 + ], + [ + 0, + 0 + ], + [ + 5.418, + -0.007 + ], + [ + 0, + 0 + ], + [ + 2.383, + -1.32 + ], + [ + 0, + 0 + ], + [ + 4.806, + 2.501 + ], + [ + 0, + 0 + ], + [ + 2.727, + -0.064 + ], + [ + 0, + 0 + ], + [ + 3.093, + 4.437 + ], + [ + 0, + 0 + ], + [ + 2.448, + 1.205 + ], + [ + 0, + 0 + ], + [ + 0.67, + 5.356 + ], + [ + 0, + 0 + ], + [ + 1.607, + 2.198 + ], + [ + 0, + 0 + ], + [ + -1.904, + 5.047 + ], + [ + 0, + 0 + ], + [ + 0.399, + 2.689 + ], + [ + 0, + 0 + ], + [ + -4.043, + 3.583 + ], + [ + 0, + 0 + ], + [ + -0.901, + 2.564 + ], + [ + 0, + 0 + ], + [ + -5.257, + 1.298 + ], + [ + 0, + 0 + ], + [ + -1.995, + 1.85 + ], + [ + 0, + 0 + ], + [ + -5.265, + -1.284 + ], + [ + 0, + 0 + ], + [ + -2.632, + 0.713 + ], + [ + 0, + 0 + ] + ], + "o": [ + [ + 0, + 0 + ], + [ + 2.049, + 1.8 + ], + [ + 0, + 0 + ], + [ + 5.292, + 1.166 + ], + [ + 0, + 0 + ], + [ + 0.976, + 2.539 + ], + [ + 0, + 0 + ], + [ + 4.146, + 3.481 + ], + [ + 0, + 0 + ], + [ + -0.32, + 2.698 + ], + [ + 0, + 0 + ], + [ + 2.05, + 4.998 + ], + [ + 0, + 0 + ], + [ + -1.542, + 2.239 + ], + [ + 0, + 0 + ], + [ + -0.514, + 5.372 + ], + [ + 0, + 0 + ], + [ + -2.412, + 1.266 + ], + [ + 0, + 0 + ], + [ + -2.961, + 4.512 + ], + [ + 0, + 0 + ], + [ + -2.728, + 0.003 + ], + [ + 0, + 0 + ], + [ + -4.73, + 2.62 + ], + [ + 0, + 0 + ], + [ + -2.42, + -1.26 + ], + [ + 0, + 0 + ], + [ + -5.416, + 0.129 + ], + [ + 0, + 0 + ], + [ + -1.557, + -2.233 + ], + [ + 0, + 0 + ], + [ + -4.861, + -2.393 + ], + [ + 0, + 0 + ], + [ + -0.338, + -2.697 + ], + [ + 0, + 0 + ], + [ + -3.192, + -4.367 + ], + [ + 0, + 0 + ], + [ + 0.959, + -2.542 + ], + [ + 0, + 0 + ], + [ + -0.792, + -5.339 + ], + [ + 0, + 0 + ], + [ + 2.036, + -1.805 + ], + [ + 0, + 0 + ], + [ + 1.789, + -5.09 + ], + [ + 0, + 0 + ], + [ + 2.647, + -0.653 + ], + [ + 0, + 0 + ], + [ + 3.961, + -3.674 + ], + [ + 0, + 0 + ], + [ + 2.651, + 0.646 + ], + [ + 0, + 0 + ], + [ + 5.226, + -1.416 + ] + ], + "v": [ + [ + 49.728, + -183.893 + ], + [ + 75.948, + -160.861 + ], + [ + 83.134, + -157.221 + ], + [ + 117.251, + -149.704 + ], + [ + 128.834, + -139.758 + ], + [ + 141.329, + -107.249 + ], + [ + 146, + -100.704 + ], + [ + 172.734, + -78.264 + ], + [ + 178.36, + -64.104 + ], + [ + 174.265, + -29.568 + ], + [ + 175.352, + -21.617 + ], + [ + 188.578, + 10.606 + ], + [ + 186.957, + 25.734 + ], + [ + 167.211, + 54.389 + ], + [ + 164.465, + 61.924 + ], + [ + 161.152, + 96.546 + ], + [ + 152.657, + 109.178 + ], + [ + 121.785, + 125.385 + ], + [ + 115.833, + 130.78 + ], + [ + 96.742, + 159.871 + ], + [ + 83.317, + 167.112 + ], + [ + 48.39, + 167.159 + ], + [ + 40.598, + 169.176 + ], + [ + 10.101, + 186.072 + ], + [ + -5.177, + 186.263 + ], + [ + -36.157, + 170.138 + ], + [ + -44.005, + 168.317 + ], + [ + -78.921, + 169.146 + ], + [ + -92.553, + 162.244 + ], + [ + -112.489, + 133.642 + ], + [ + -118.596, + 128.399 + ], + [ + -149.931, + 112.972 + ], + [ + -158.793, + 100.558 + ], + [ + -163.119, + 66.033 + ], + [ + -166.084, + 58.567 + ], + [ + -186.661, + 30.418 + ], + [ + -188.724, + 15.336 + ], + [ + -176.447, + -17.206 + ], + [ + -175.593, + -25.182 + ], + [ + -180.697, + -59.604 + ], + [ + -175.488, + -73.898 + ], + [ + -149.422, + -97.001 + ], + [ + -144.943, + -103.66 + ], + [ + -133.405, + -136.47 + ], + [ + -122.117, + -146.703 + ], + [ + -88.233, + -155.074 + ], + [ + -81.156, + -158.891 + ], + [ + -55.62, + -182.572 + ], + [ + -40.839, + -186.4 + ], + [ + -6.899, + -178.12 + ], + [ + 1.156, + -178.22 + ], + [ + 34.84, + -187.349 + ] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0.788000009574, + 0.522000002394, + 1 + ], + "ix": 4 + }, + "o": { + "a": 0, + "k": 100, + "ix": 5 + }, + "r": 1, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { + "a": 0, + "k": [ + 190.878, + 189.015 + ], + "ix": 2 + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ], + "ix": 1 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ], + "ix": 3 + }, + "r": { + "a": 0, + "k": 0, + "ix": 6 + }, + "o": { + "a": 0, + "k": 100, + "ix": 7 + }, + "sk": { + "a": 0, + "k": 0, + "ix": 4 + }, + "sa": { + "a": 0, + "k": 0, + "ix": 5 + }, + "nm": "Transform" + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 50, + "op": 350, + "st": 50, + "bm": 0 + } + ], + "markers": [] +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt b/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt index 0ef2fd7708..2d40bcd1d4 100644 --- a/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt +++ b/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt @@ -248,8 +248,11 @@ class NaviAnalytics private constructor() { fun onCheckBoxClicked() = NaviTrackEvent.trackEvent("bank_details_checkbox") - fun onSetupAutoDebitClicked() = - NaviTrackEvent.trackEvent("setup_autodebit_button_tap") + fun onSetupAutoDebitClicked(type: String?) = + NaviTrackEvent.trackEvent( + "setup_autodebit_button_tap", + mapOf(Pair("type", type.orEmpty())) + ) fun onAccountNumberEdit() = NaviTrackEvent.trackEvent("account_number_edit") @@ -1569,6 +1572,10 @@ class NaviAnalytics private constructor() { } } + inner class EnachTutorial { + fun onPageSelected(pageName: String) = NaviTrackEvent.trackEvent(pageName) + } + companion object { const val SPLASH = "splash" const val PERMISSIONS_SCREEN = "permission" @@ -1706,6 +1713,10 @@ class NaviAnalytics private constructor() { const val EVENT_NAME_BANNER_CARD_CLICK = "Lending_Home_NaviBanner_Clicked" const val EMAIL_ACTIVITY = "email_activity" const val EMAIL_SCREEN = "email_screen" + const val KYC_PHYSICAL_ADDR_VERIFICATION_SCREEN = + "kyc_address_physical_verification_slot_booking_screen" + const val OSV_SLOT_BOOKED_DIALOG = "osv_slot_booked_dialog" + const val OSV_SLOT_CHANGE_BOTTOM_SHEET = "osv_slot_change_bottom_sheet" val naviAnalytics: NaviAnalytics by lazy { Holder.INSTANCE } } diff --git a/app/src/main/java/com/naviapp/common/BaseActivity.kt b/app/src/main/java/com/naviapp/common/BaseActivity.kt index f7fb90a6d7..683bf64f1a 100644 --- a/app/src/main/java/com/naviapp/common/BaseActivity.kt +++ b/app/src/main/java/com/naviapp/common/BaseActivity.kt @@ -599,7 +599,7 @@ abstract class BaseActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListen val uxCamUtil = UxcamUtil.instance uxCamUtil.init(BuildConfig.UXCAM_KEY) val externalUserId = PreferenceManager.getStringPreference(USER_EXTERNAL_ID) - if (externalUserId.isNullOrBlank()) + if (externalUserId.isNullOrBlank().not()) uxCamUtil.setCustomerId(externalUserId.orEmpty()) val name = UserManager.getName() val phone = UserManager.getPhoneNumber() diff --git a/app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt b/app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt new file mode 100644 index 0000000000..317f7f059d --- /dev/null +++ b/app/src/main/java/com/naviapp/common/adapter/RadioRvAdapter.kt @@ -0,0 +1,70 @@ +package com.naviapp.common.adapter + +import android.annotation.SuppressLint +import android.view.ViewGroup +import androidx.lifecycle.MutableLiveData +import androidx.recyclerview.widget.RecyclerView +import com.naviapp.R +import com.naviapp.common.customview.RadioCustomView +import com.naviapp.models.response.RadioButtonResponse +import com.naviapp.utils.orFalse +import kotlinx.android.synthetic.main.view_radio_button.view.* + +class RadioRvAdapter( + private val radioViewList: List, + private val selectedLabelLiveData: MutableLiveData +) : RecyclerView.Adapter() { + init { + setInitialSelectedPosition() + } + + private fun setInitialSelectedPosition() { + selectedLabelLiveData.value = radioViewList.firstOrNull() + radioViewList.forEach { + if (it.checked.orFalse()) selectedLabelLiveData.value = it + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RadioRvViewHolder { + return RadioRvViewHolder( + RadioCustomView(context = parent.context) + ) + } + + @SuppressLint("NotifyDataSetChanged") + override fun onBindViewHolder(holder: RadioRvViewHolder, position: Int) { + val radioViewData = radioViewList[position] + holder.setData(radioViewData) + holder.view.radio_btn.setOnClickListener { + if (radioViewData.checked.orFalse()) return@setOnClickListener + clearRadioButtonAndSetNewSelection(position) + selectedLabelLiveData.value = radioViewData + notifyDataSetChanged() + } + } + + private fun clearRadioButtonAndSetNewSelection(position: Int) { + radioViewList.forEachIndexed { index, radioButtonData -> + radioButtonData.checked = index == position + } + } + + override fun getItemCount(): Int { + return radioViewList.size + } + +} + +class RadioRvViewHolder(val view: RadioCustomView) : RecyclerView.ViewHolder(view) { + + fun setData(radioButtonResponse: RadioButtonResponse) { + view.setProperties( + radioButtonResponse.radioButtonText, + radioButtonResponse.iconCode, + radioButtonResponse.description, + radioButtonResponse.checked, + radioButtonResponse.enabled, + R.drawable.radio_custom_view_selector + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/customview/DobEditText.kt b/app/src/main/java/com/naviapp/common/customview/DobEditText.kt index 53c5b8c255..51290caef7 100644 --- a/app/src/main/java/com/naviapp/common/customview/DobEditText.kt +++ b/app/src/main/java/com/naviapp/common/customview/DobEditText.kt @@ -56,6 +56,7 @@ class DobEditText(context: Context, attrs: AttributeSet) : RelativeLayout(contex } fun setText(dob: String) { + if(dob.isBlank()) return dob.split(DELIMITER).forEachIndexed { index, data -> if (index == 0 && data.length == YEAR_LENGTH) binding.yearEt.setText(data) if (index == 1 && data.length == MONTH_LENGTH) binding.monthEt.setText(data) diff --git a/app/src/main/java/com/naviapp/common/customview/HorizontalLabelRecyclerView.kt b/app/src/main/java/com/naviapp/common/customview/HorizontalLabelRecyclerView.kt new file mode 100644 index 0000000000..89fabfe3b1 --- /dev/null +++ b/app/src/main/java/com/naviapp/common/customview/HorizontalLabelRecyclerView.kt @@ -0,0 +1,101 @@ +package com.naviapp.common.customview + +import android.annotation.SuppressLint +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.naviapp.R +import com.naviapp.common.decorator.LeftMarginItemDecoration +import com.naviapp.databinding.ViewLabelBinding +import com.naviapp.models.LabelViewResponse + +class HorizontalLabelRecyclerView(context: Context, attrs: AttributeSet?) : + RecyclerView(context, attrs) { + + private val _selectedLabelLiveData = MutableLiveData() + val selectedLabelLiveData: LiveData get() = _selectedLabelLiveData + + init { + layoutManager = LinearLayoutManager(context, HORIZONTAL, false) + } + + fun setProperties( + labelViewResponseList: List, + leftMarginItemDecoration: LeftMarginItemDecoration = LeftMarginItemDecoration( + resources.getDimension( + R.dimen.layout_dp_12 + ) + ) + ) { + addItemDecoration(leftMarginItemDecoration) + adapter = HorizontalLabelAdapter(labelViewResponseList, _selectedLabelLiveData) + setPadding(0, 0, context.resources.getDimension(R.dimen.layout_dp_20).toInt(), 0) + clipToPadding = false + } + + fun getSelectedLabelData(): LabelViewResponse? { + return (adapter as? HorizontalLabelAdapter)?.getSelectedItem() + } +} + +class HorizontalLabelAdapter( + private val labelViewResponseList: List, + private val selectedLabelLiveData: MutableLiveData +) : + RecyclerView.Adapter() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HorizontalLabelVH { + return HorizontalLabelVH( + ViewLabelBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } + + @SuppressLint("NotifyDataSetChanged") + override fun onBindViewHolder(holder: HorizontalLabelVH, position: Int) { + val labelData = labelViewResponseList[position] + holder.setLabel(labelData.label) + holder.viewLabelBinding.parentLayout.isSelected = labelData.selected + holder.viewLabelBinding.valueTv.isSelected = labelData.selected + holder.viewLabelBinding.root.setOnClickListener { + if (labelData.selected) return@setOnClickListener + resetSelections() + labelData.selected = true + selectedLabelLiveData.value = labelData + notifyDataSetChanged() + } + } + + private fun resetSelections() { + labelViewResponseList.forEach { + it.selected = false + } + } + + override fun getItemCount(): Int { + return labelViewResponseList.size + } + + fun getSelectedItem(): LabelViewResponse? { + labelViewResponseList.forEach { + if (it.selected) return it + } + return null + } + +} + +class HorizontalLabelVH(val viewLabelBinding: ViewLabelBinding) : + RecyclerView.ViewHolder(viewLabelBinding.root) { + + fun setLabel(label: String?) { + viewLabelBinding.label = label + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/customview/NoteView.kt b/app/src/main/java/com/naviapp/common/customview/NoteView.kt index b1114b0f6c..dd4daa2485 100644 --- a/app/src/main/java/com/naviapp/common/customview/NoteView.kt +++ b/app/src/main/java/com/naviapp/common/customview/NoteView.kt @@ -26,7 +26,7 @@ class NoteView(context: Context, attrs: AttributeSet?) : ConstraintLayout(contex } iconCode?.let { IconUtils.updateIcon(it, binding.iconIv) - } + } ?: run { binding.iconIv.visibility = View.GONE } } fun hideViewIcon() { diff --git a/app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt b/app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt new file mode 100644 index 0000000000..04210d04fe --- /dev/null +++ b/app/src/main/java/com/naviapp/common/customview/RadioCustomView.kt @@ -0,0 +1,35 @@ +package com.naviapp.common.customview + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.databinding.DataBindingUtil +import com.naviapp.R +import com.naviapp.databinding.ViewRadioIconCustomBinding +import com.naviapp.models.RadioCustomViewBindingData + +class RadioCustomView(context: Context, attrs: AttributeSet? = null) : + ConstraintLayout(context, attrs) { + private val binding: ViewRadioIconCustomBinding + + init { + val inflater = LayoutInflater.from(context) + binding = DataBindingUtil.inflate(inflater, R.layout.view_radio_icon_custom, this, true) + } + + fun setProperties( + radioButtonText: String?, + iconCode: String? = null, + description: String? = null, + checked: Boolean? = null, + enabled: Boolean? = null, + selectorRadioButton: Int? = R.drawable.radiobutton_selector, + styleDescription: Int? = R.style.TextDescExtraSmallFontStyleOne + ) { + binding.data = RadioCustomViewBindingData( + radioButtonText, iconCode, description, selectorRadioButton, styleDescription, + checked ?: false, enabled ?: false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt b/app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt new file mode 100644 index 0000000000..2ae79c17ac --- /dev/null +++ b/app/src/main/java/com/naviapp/common/customview/RadioRecyclerView.kt @@ -0,0 +1,34 @@ +package com.naviapp.common.customview + +import android.content.Context +import android.util.AttributeSet +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.naviapp.common.adapter.RadioRvAdapter +import com.naviapp.common.decorator.LeftMarginItemDecoration +import com.naviapp.common.decorator.TopMarginItemDecoration +import com.naviapp.models.response.RadioButtonResponse + +class RadioRecyclerView(context: Context, attrs: AttributeSet? = null) : + RecyclerView(context, attrs) { + + private val _selectedLabelLiveData = MutableLiveData() + val selectedLabelLiveData: LiveData get() = _selectedLabelLiveData + fun setProperties( + radioViewList: List, + orientation: Int = VERTICAL, + gap: Float + ) { + layoutManager = LinearLayoutManager(context, orientation, false) + val itemDecoration = if (orientation == HORIZONTAL) { + LeftMarginItemDecoration(gap) + } else { + TopMarginItemDecoration(gap) + } + addItemDecoration(itemDecoration) + adapter = RadioRvAdapter(radioViewList, _selectedLabelLiveData) + } +} + diff --git a/app/src/main/java/com/naviapp/common/fragment/CommonDialogBox.kt b/app/src/main/java/com/naviapp/common/fragment/CommonDialogBox.kt index 5ef5f544ba..51c3234f16 100644 --- a/app/src/main/java/com/naviapp/common/fragment/CommonDialogBox.kt +++ b/app/src/main/java/com/naviapp/common/fragment/CommonDialogBox.kt @@ -39,6 +39,12 @@ class CommonDialogBox : BaseDialogBox() { arguments?.getString(KEY_ICON_CODE)?.let { binding.iconIv.visibility = View.VISIBLE IconUtils.updateIcon(it, binding.iconIv) + } ?: run { + arguments?.getString(KEY_LOTTIE_FILE)?.let { + binding.animationView.visibility = View.VISIBLE + binding.animationView.setAnimation(it) + binding.animationView.playAnimation() + } ?: run { binding.animationView.visibility = View.GONE } } } @@ -49,12 +55,14 @@ class CommonDialogBox : BaseDialogBox() { private const val KEY_DESCRIPTION = "KEY_DESCRIPTION" private const val KEY_CTA = "KEY_CTA" private const val KEY_ICON_CODE = "KEY_ICON_CODE" + private const val KEY_LOTTIE_FILE = "KEY_LOTTIE_FILE" fun newInstance( screenName: String, title: String?, description: String?, ctaData: CtaData? = null, - iconCode: String? = null + iconCode: String? = null, + lottieAnimationFile: String? = null ): CommonDialogBox { return CommonDialogBox().apply { val bundle = Bundle() @@ -63,6 +71,7 @@ class CommonDialogBox : BaseDialogBox() { bundle.putString(KEY_DESCRIPTION, description) bundle.putParcelable(KEY_CTA, ctaData) bundle.putString(KEY_ICON_CODE, iconCode) + bundle.putString(KEY_LOTTIE_FILE, lottieAnimationFile) arguments = bundle } } diff --git a/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt b/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt index c51355f6ae..3aa5186a22 100644 --- a/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt +++ b/app/src/main/java/com/naviapp/common/fragment/OtpBottomSheet.kt @@ -9,6 +9,7 @@ import android.view.WindowManager import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import com.google.android.gms.auth.api.phone.SmsRetriever +import com.navi.common.sharedpref.PreferenceManager import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.customview.BaseBottomSheet @@ -21,7 +22,6 @@ import com.naviapp.models.request.SendOtpForDisbursementRequest import com.naviapp.network.ApiErrorTagType import com.naviapp.receiver.OtpReceiveListener import com.naviapp.receiver.SmsAutoReadReceiver -import com.navi.common.sharedpref.PreferenceManager import com.naviapp.utils.* class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { @@ -228,7 +228,6 @@ class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { ) } NaviAnalytics.OTP_EPFO -> { - startCountDownTimerForApiTimeout(API_TIMEOUT) otpSharedViewModel?.verifyOtpForEPFO( OtpRequest( otp = binding.otpBoxLayout.getText(), @@ -260,25 +259,6 @@ class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { } } - private fun startCountDownTimerForApiTimeout(apiTimeoutInSeconds: Int) { - if (timer != null) { - timer?.cancel() - } - timer = object : CountDownTimer( - apiTimeoutInSeconds * Constants.MILLISECONDS_PER_SECOND.toLong(), - Constants.MILLISECONDS_PER_SECOND.toLong() - ) { - override fun onTick(millisUntilFinished: Long) { - - } - - override fun onFinish() { - safelyDismissDialog() - otpSharedViewModel?.setApiTimeout(false) - } - }.start() - } - override val screenName: String get() = arguments?.getString(KEY_SCREEN_NAME) ?: NaviAnalytics.OTP_BOTTOM_SHEET @@ -289,7 +269,6 @@ class OtpBottomSheet : BaseBottomSheet(), View.OnClickListener { const val KEY_OTP_TOKEN = "KEY_OTP_TOKEN" const val KEY_OTP_SIZE = "KEY_OTP_SIZE" const val KEY_COMPANY_NAME = "KEY_COMPANY_NAME" - const val API_TIMEOUT = 10 fun newInstance(bundle: Bundle): OtpBottomSheet { return OtpBottomSheet().apply { arguments = bundle diff --git a/app/src/main/java/com/naviapp/common/repository/OtpRepository.kt b/app/src/main/java/com/naviapp/common/repository/OtpRepository.kt index ba87dd92b5..23c02b80d3 100644 --- a/app/src/main/java/com/naviapp/common/repository/OtpRepository.kt +++ b/app/src/main/java/com/naviapp/common/repository/OtpRepository.kt @@ -4,7 +4,6 @@ import com.naviapp.models.request.OtpRequest import com.naviapp.models.request.SendOtpForDisbursementRequest import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.utils.retrofitService -import com.naviapp.utils.longRunningRetrofitService class OtpRepository : ResponseCallback() { suspend fun sendOtp(sendOtpForDisbursementRequest: SendOtpForDisbursementRequest) = @@ -17,5 +16,5 @@ class OtpRepository : ResponseCallback() { apiResponseCallback(retrofitService().verifyOtpForDisbursement(otpRequest)) suspend fun verifyOtpForEPFO(otpRequest: OtpRequest) = - apiResponseCallback(longRunningRetrofitService().verifyOtpForEPFO(otpRequest)) + apiResponseCallback(retrofitService().verifyOtpForEPFO(otpRequest)) } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt b/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt index 480f3d0467..db5141beaf 100644 --- a/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt +++ b/app/src/main/java/com/naviapp/errors/fragments/ActionErrorFragment.kt @@ -91,6 +91,7 @@ class ActionErrorFragment : BaseBottomSheet() { BANK_ERROR_ICON -> R.drawable.ic_bank_error_svg PROFILE_ERROR_ICON -> R.drawable.ic_profile_error_svg OTP_ON_CALL_ERROR_ICON -> R.drawable.ic_otp_call_error_svg + INVALID_PAN -> R.drawable.ic_pan_error else -> R.drawable.ic_error_circle_svg } } @@ -110,6 +111,7 @@ class ActionErrorFragment : BaseBottomSheet() { const val USER_ON_HOLD_ERROR_ICON = "USER_ON_HOLD_ERROR_ICON" const val NAVI_ICON = "NAVI_ICON" const val OTP_ON_CALL_ERROR_ICON = "OTP_ON_CALL_ERROR_ICON" + const val INVALID_PAN = "INVALID_PAN" private const val ERROR_DATA = "ERROR_DATA" private const val DIALOG_CANCELABLE = "DIALOG_CANCELABLE" diff --git a/app/src/main/java/com/naviapp/models/KycUiStatusValue.kt b/app/src/main/java/com/naviapp/models/KycUiStatusValue.kt new file mode 100644 index 0000000000..dc5f863930 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/KycUiStatusValue.kt @@ -0,0 +1,17 @@ +/* + * * + * * Copyright (c) 2020 . All rights reserved @Navi + * + */ + +package com.naviapp.models + +enum class KycUiStatusValue { + PENDING, + COMPLETE, + SOFT_REJECT, + IN_REVIEW, + OSV_VERIFICATION, + OSV_VERIFICATION_IN_PROGRESS, + OSV_OPS_VERIFICATION_PENDING +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/models/LabelViewResponse.kt b/app/src/main/java/com/naviapp/models/LabelViewResponse.kt new file mode 100644 index 0000000000..a07dcbff0e --- /dev/null +++ b/app/src/main/java/com/naviapp/models/LabelViewResponse.kt @@ -0,0 +1,10 @@ +package com.naviapp.models + +import com.google.gson.annotations.SerializedName + +data class LabelViewResponse( + @SerializedName("id") val id: String? = null, + @SerializedName("label") val label: String? = null +) { + var selected: Boolean = false +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt b/app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt new file mode 100644 index 0000000000..bcc3826374 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/RadioCustomViewBindingData.kt @@ -0,0 +1,11 @@ +package com.naviapp.models + +data class RadioCustomViewBindingData( + val radioButtonText: String? = null, + val iconCode: String? = null, + val description: String? = null, + val selectorRadioButton: Int?, + val styleDescription: Int?, + var checked: Boolean = false, + val enabled: Boolean +) diff --git a/app/src/main/java/com/naviapp/models/SubPageStatusType.kt b/app/src/main/java/com/naviapp/models/SubPageStatusType.kt index 8b9ba52e74..bcfa30cea9 100644 --- a/app/src/main/java/com/naviapp/models/SubPageStatusType.kt +++ b/app/src/main/java/com/naviapp/models/SubPageStatusType.kt @@ -30,6 +30,7 @@ object SubPageStatusType { const val CREDIT_ANALYSIS = "CREDIT_ANALYSIS" const val TOP_UP_INTRO = "TOP_UP_INTRO" const val TELCO_OTP_VERIFICATION = "TELCO_OTP_VERIFICATION" + const val ADDRESS_PHYSICAL_VERIFICATION = "ADDRESS_PHYSICAL_VERIFICATION" @StringDef( BASIC_DETAILS, @@ -49,7 +50,8 @@ object SubPageStatusType { COUPON, CREDIT_ANALYSIS, TOP_UP_INTRO, - TELCO_OTP_VERIFICATION + TELCO_OTP_VERIFICATION, + ADDRESS_PHYSICAL_VERIFICATION ) @Retention(AnnotationRetention.SOURCE) annotation class SubPageStatusTypeDef diff --git a/app/src/main/java/com/naviapp/models/UiStatusValue.kt b/app/src/main/java/com/naviapp/models/UiStatusValue.kt deleted file mode 100644 index 6187c79239..0000000000 --- a/app/src/main/java/com/naviapp/models/UiStatusValue.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * * - * * Copyright (c) 2020 . All rights reserved @Navi - * - */ - -package com.naviapp.models - -import androidx.annotation.StringDef - -object UiStatusValue { - - const val PENDING = "PENDING" - const val COMPLETE = "COMPLETE" - const val SOFT_REJECT = "SOFT_REJECT" - const val IN_REVIEW = "IN_REVIEW" - - @StringDef(PENDING, COMPLETE, SOFT_REJECT, IN_REVIEW) - @Retention(AnnotationRetention.SOURCE) - annotation class UiStatusValueDef -} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt b/app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt new file mode 100644 index 0000000000..25f6dd808c --- /dev/null +++ b/app/src/main/java/com/naviapp/models/request/AutoPayOptionData.kt @@ -0,0 +1,8 @@ +package com.naviapp.models.request + +import com.google.gson.annotations.SerializedName + +data class AutoPayOptionData( + @SerializedName("autoPayOption") + val autoPayOptionId: String? = null +) diff --git a/app/src/main/java/com/naviapp/models/request/KycRequest.kt b/app/src/main/java/com/naviapp/models/request/KycRequest.kt index a3c415764b..3c501b8a23 100644 --- a/app/src/main/java/com/naviapp/models/request/KycRequest.kt +++ b/app/src/main/java/com/naviapp/models/request/KycRequest.kt @@ -3,13 +3,8 @@ package com.naviapp.models.request import com.google.gson.annotations.SerializedName data class KycRequest( - @SerializedName("address") val address: Address?, - @SerializedName("parentDetails") val parentDetails: ParentDetails? = null -) - -data class ParentDetails( - @SerializedName("fatherName") val fatherName: String? = null, - @SerializedName("motherName") val motherName: String? = null + @SerializedName("address") val address: Address? = null, + @SerializedName("parentDetails") val textField: HashMap? = null ) data class Address( diff --git a/app/src/main/java/com/naviapp/models/request/OsvSlotRequest.kt b/app/src/main/java/com/naviapp/models/request/OsvSlotRequest.kt new file mode 100644 index 0000000000..0d38bfbe55 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/request/OsvSlotRequest.kt @@ -0,0 +1,8 @@ +package com.naviapp.models.request + +import com.google.gson.annotations.SerializedName + +data class OsvSlotRequest( + @SerializedName("bookedDate") val bookedDate: String?, + @SerializedName("bookedTime") val bookedTime: String? +) diff --git a/app/src/main/java/com/naviapp/models/response/AddressVerificationDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/AddressVerificationDetailsResponse.kt index 3dbf930eb3..42c3cd71e4 100644 --- a/app/src/main/java/com/naviapp/models/response/AddressVerificationDetailsResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/AddressVerificationDetailsResponse.kt @@ -12,9 +12,16 @@ data class AddressVerificationDetailsResponse( data class AddressDetails( @SerializedName("addressLabel") val addressLabel: LastUpdateData? = null, @SerializedName("note") val note: LastUpdateData? = null, + @SerializedName("currentAddressMinSize") val currentAddressMinSize: CurrentAddressMinSize? = null, @SerializedName("currentAddress") val currentAddress: CurrentAddress? = null ) +data class CurrentAddressMinSize( + @SerializedName("houseNumberMinChars") val houseNumberMinChars: Int? = null, + @SerializedName("streetMinChars") val streetMinChars: Int? = null, + @SerializedName("localityMinChars") val localityMinChars: Int? = null +) + data class AddressProofResponse( @SerializedName("header") val header: Header? = null, @SerializedName("content") val content: CurrentAddress? = null, diff --git a/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt index 97df996db8..d37ed6a2fc 100644 --- a/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/DisbursementDetailsResponse.kt @@ -11,17 +11,26 @@ data class DisbursementDetailsResponse( @SerializedName("header") val header: Header? = null, @SerializedName("content") val disbursementDetails: DisbursementDetails? = null, @SerializedName("footer") val footer: Footer? = null -): Parcelable +) : Parcelable @Parcelize data class DisbursementDetails( - @SerializedName("netLoanAmount") val netLoanAmount: Amount?, - @SerializedName("emi") val emiAmount: Amount?, - @SerializedName("firstDueDate") val firstDueDate: String?, - @SerializedName("bankDetails") var bankDetails: BankDetail?, - @SerializedName("customerName") val customerName: String?, - @SerializedName("autoDebitStatus") val autoDebitStatus: String?, - @SerializedName("email") val email: String?, - @SerializedName("addBankAccountEnable") val addBankAccountEnable: Boolean?, - @SerializedName("editBankRetriesLeft") val editBankRetriesLeft: Int? = null + @SerializedName("netLoanAmount") val netLoanAmount: Amount? = null, + @SerializedName("emi") val emiAmount: Amount? = null, + @SerializedName("firstDueDate") val firstDueDate: String? = null, + @SerializedName("bankDetails") var bankDetails: BankDetail? = null, + @SerializedName("customerName") val customerName: String? = null, + @SerializedName("autoDebitStatus") var autoDebitStatus: String? = null, + @SerializedName("email") val email: String? = null, + @SerializedName("addBankAccountEnable") val addBankAccountEnable: Boolean? = null, + @SerializedName("editBankRetriesLeft") val editBankRetriesLeft: Int? = null, + @SerializedName("autoPayOptions") val autoPayOptions: List? = null, ) : Parcelable + +enum class AutoPayStatus { + WAITING, + SUCCESS, + PENDING, + AADHAR_PENDING, + FAILURE +} diff --git a/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt b/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt new file mode 100644 index 0000000000..5f10633ee4 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/response/EnachWidgetResponse.kt @@ -0,0 +1,12 @@ +package com.naviapp.models.response + +import com.google.gson.annotations.SerializedName + +data class EnachWidgetResponse( + @SerializedName("headerWidget") + val headerWidget: List? = null, + @SerializedName("contentWidget") + val contentWidget: List>? = null, + @SerializedName("footerWidget") + val footerWidget: List? = null +) diff --git a/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt b/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt index 19f2112f09..41bbe59f19 100644 --- a/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/KycDetailsResponse.kt @@ -22,6 +22,7 @@ data class KycItem( @SerializedName("status") val status: String?, @SerializedName("currentAddress") val currentAddress: CurrentAddress?, @SerializedName("uri") val uri: String?, + @SerializedName("jsonKey") val jsonKey: String? = null, @SerializedName("showOtpOption") val showOtpOption: Boolean?, @SerializedName("isEditable") val isEditable: Boolean? = null, @SerializedName("additionalData") val additionalData: KycItemAdditionalData? = null diff --git a/app/src/main/java/com/naviapp/models/response/KycPhysicalAddressVerificationResponse.kt b/app/src/main/java/com/naviapp/models/response/KycPhysicalAddressVerificationResponse.kt new file mode 100644 index 0000000000..fcbd050cb7 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/response/KycPhysicalAddressVerificationResponse.kt @@ -0,0 +1,19 @@ +package com.naviapp.models.response + +import com.google.gson.annotations.SerializedName +import com.naviapp.models.LabelViewResponse + +data class KycPhysicalAddressVerificationResponse( + @SerializedName("header") val header: Header? = null, + @SerializedName("content") val content: KycPhysicalAddressVerificationDetails? = null, + @SerializedName("footer") val footer: Footer? = null +) + +data class KycPhysicalAddressVerificationDetails( + @SerializedName("completeAddress") val completeAddress: String? = null, + @SerializedName("addressVerificationLabel") val addressVerificationLabel: String? = null, + @SerializedName("addressVerificationDescription") val addressVerificationDescription: String? = null, + @SerializedName("dateTimeLabel") val dateTimeLabel: String? = null, + @SerializedName("osvDateOptionsList") val dateOptions: List? = null, + @SerializedName("osvTimeOptionsList") val timeOptions: List? = null +) diff --git a/app/src/main/java/com/naviapp/models/response/OsvResponse.kt b/app/src/main/java/com/naviapp/models/response/OsvResponse.kt new file mode 100644 index 0000000000..1554e813e6 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/response/OsvResponse.kt @@ -0,0 +1,18 @@ +package com.naviapp.models.response + +import com.google.gson.annotations.SerializedName +import com.navi.common.model.CtaData + +data class OsvResponse( + @SerializedName("greetingDialog") val greetingDialog: GeneralGreetingResponse? = null, + @SerializedName("osvData") val osvData: OsvData? = null +) + +data class OsvData( + @SerializedName("slotEditable") val isSlotEditable: Boolean? = null, + @SerializedName("description") val description: String? = null, + @SerializedName("bookedSlot") val bookedSlot: String? = null, + @SerializedName("action") val action: CtaData? = null, + @SerializedName("title") val title: String? = null, + @SerializedName("iconCode") val iconCode: String? = null +) diff --git a/app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt b/app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt new file mode 100644 index 0000000000..741c078306 --- /dev/null +++ b/app/src/main/java/com/naviapp/models/response/RadioButtonResponse.kt @@ -0,0 +1,15 @@ +package com.naviapp.models.response + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class RadioButtonResponse( + @SerializedName("id") val id: String? = null, + @SerializedName("title") val radioButtonText: String? = null, + @SerializedName("description") val description: String? = null, + @SerializedName("iconCode") val iconCode: String? = null, + @SerializedName("enabled") val enabled: Boolean? = null, + @SerializedName("checked") var checked: Boolean? = null +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt b/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt index adb682902e..0491303926 100644 --- a/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt +++ b/app/src/main/java/com/naviapp/models/response/WidgetGenericResponse.kt @@ -1,5 +1,6 @@ package com.naviapp.models.response +import android.os.Parcelable import com.google.gson.annotations.SerializedName import com.navi.common.model.CtaData import kotlinx.android.parcel.Parcelize @@ -22,11 +23,13 @@ abstract class WidgetConfig( val status: String? = null ) +@Parcelize data class GenericWidgetConfig( @SerializedName("body") val widgetBody: GenericWidgetBody? = null -) : WidgetConfig() +) : WidgetConfig(), Parcelable +@Parcelize open class GenericWidgetBody( @SerializedName("title") val title: String? = null, @@ -42,7 +45,7 @@ open class GenericWidgetBody( val cta: CtaData? = null, @SerializedName("documentUrl") val documentUrl: String? = null -) +) : Parcelable @Parcelize data class GenericWidgetItem( diff --git a/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt b/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt index d10d84ec24..421a351913 100644 --- a/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt +++ b/app/src/main/java/com/naviapp/network/ApiErrorTagType.kt @@ -64,6 +64,7 @@ object ApiErrorTagType { const val VIDEO_KYC_ERROR = "VIDEO_KYC_ERROR" const val OTP_WRONG = "OTP_WRONG" const val SOMETHING_WENT_WRONG = "SOMETHING_WENT_WRONG" + const val INVALID_PAN_DETAILS = "INVALID_PAN_DETAILS" @StringDef( SELFIE_UPLOAD, @@ -103,7 +104,8 @@ object ApiErrorTagType { NO_INTERNET_ERROR, SELFIE_SETTING_API_ERROR, OVD_UPLOAD_ERROR, - PG_REPAYMENT_STATUS_DETAIL_API_ERROR + PG_REPAYMENT_STATUS_DETAIL_API_ERROR, + INVALID_PAN_DETAILS ) @Retention(AnnotationRetention.SOURCE) annotation class ApiErrorTagTypeDef diff --git a/app/src/main/java/com/naviapp/network/models/Action.kt b/app/src/main/java/com/naviapp/network/models/Action.kt index 4a3e7f155a..e0fc4c3424 100644 --- a/app/src/main/java/com/naviapp/network/models/Action.kt +++ b/app/src/main/java/com/naviapp/network/models/Action.kt @@ -1,12 +1,11 @@ package com.naviapp.network.models import android.os.Parcelable -import android.view.View import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize -import kotlinx.android.parcel.RawValue @Parcelize data class Action( - @SerializedName("title") val title: String? + @SerializedName("title") val title: String?, + @SerializedName("subPage") val subPage: String? = null ) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/network/retrofit/LongRunningRetrofitProvider.kt b/app/src/main/java/com/naviapp/network/retrofit/LongRunningRetrofitProvider.kt deleted file mode 100644 index 721cc46f1b..0000000000 --- a/app/src/main/java/com/naviapp/network/retrofit/LongRunningRetrofitProvider.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * * - * * Copyright (c) 2019 . All rights reserved @Navi - * - */ - -package com.naviapp.network.retrofit - -import com.naviapp.app.NaviApplication -import com.naviapp.network.ApiConstants.API_CONNECT_TIMEOUT_VALUE_120 -import com.naviapp.network.util.createRetrofitClient -import com.naviapp.network.util.getNetworkInfo -import retrofit2.Retrofit - -/* -* This is for long running apis which having large timeout -* //TODO Get rid of this after we do DI for personal loan -* */ -class LongRunningRetrofitProvider private constructor() { - val services: RetrofitService = defaultRetrofitClient.create(RetrofitService::class.java) - - private object Holder { - val INSTANCE = LongRunningRetrofitProvider() - } - - companion object { - val instance: LongRunningRetrofitProvider by lazy { Holder.INSTANCE } - val defaultRetrofitClient: Retrofit = - createRetrofitClient( - NaviHttpClient( - getNetworkInfo(API_CONNECT_TIMEOUT_VALUE_120), - NaviApplication.instance.applicationContext - ).httpClientBuilder - ) - } -} diff --git a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt index f18de097bd..b9f2621c05 100644 --- a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt @@ -241,7 +241,10 @@ interface RetrofitService { suspend fun fetchMendateData(@Path("requestId") requestId: String): Response>> @POST("/loan-applications/{loanApplicationId}/auto-debit-registration") - suspend fun fetchMendateRequestId(@Path("loanApplicationId") loanApplicationId: String): Response> + suspend fun fetchMendateRequestId( + @Path("loanApplicationId") loanApplicationId: String, + @Body autoPayOptionData: AutoPayOptionData + ): Response> //Company Names @GET("/master-data/fetch-companies") @@ -342,8 +345,8 @@ interface RetrofitService { @GET("/attach/details/insurance") suspend fun fetchInsuranceDetails(): Response> - @GET("/loan-applications/{loanApplicationId}/auto-debit-instructions ") - suspend fun fetchEnachDetails(@Path("loanApplicationId") loanApplicationId: String): Response> + @GET("/loan-applications/{loanApplicationId}/v2/auto-debit-instructions") + suspend fun fetchEnachDetails(@Path("loanApplicationId") loanApplicationId: String): Response> @POST("/loan-origination-manager/fetch-installments") suspend fun fetchEmiDetails(@Body loanFeeDetailsRequest: LoanFeeDetailsRequest): Response> @@ -615,4 +618,13 @@ interface RetrofitService { @GET("/support-mail") suspend fun fetchCustomerSupportEmailDetails(): Response> + + @GET("/customer-service/customers/me/fetch-osv-details") + suspend fun fetchPhysicalAddressVerificationData(): Response> + + @GET("/customer-service/customers/me/fetch-osv-slot-details") + suspend fun fetchOsvData(): Response> + + @POST("/customer-service/customers/me/save-osv-slot") + suspend fun saveOsvSlot(@Body osvSlotRequest: OsvSlotRequest): Response> } diff --git a/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt b/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt new file mode 100644 index 0000000000..1714cf6606 --- /dev/null +++ b/app/src/main/java/com/naviapp/personalloan/di/PersonalLoanModule.kt @@ -0,0 +1,20 @@ +package com.naviapp.personalloan.di + +import com.naviapp.network.retrofit.RetrofitService +import com.naviapp.personalloan.getloan.kyc.repositories.KycPhysicalAddressVerificationRepository +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ViewModelComponent +import dagger.hilt.android.scopes.ViewModelScoped + +@Module +@InstallIn(ViewModelComponent::class) +class PersonalLoanModule { + + @ViewModelScoped + @Provides + fun providesKycPhysicalAddressVerificationRepository(retrofitService: RetrofitService) = + KycPhysicalAddressVerificationRepository(retrofitService) + +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt b/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt index 543cf451dd..1cccd1e398 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/activities/GetLoanActivity.kt @@ -59,9 +59,11 @@ import com.naviapp.selfiecapture.SelfieVerificationHelper import com.naviapp.utils.* import com.razorpay.PaymentData import com.razorpay.PaymentResultWithDataListener +import dagger.hilt.android.AndroidEntryPoint import org.json.JSONObject import java.util.* +@AndroidEntryPoint class GetLoanActivity : BaseActivity(), FragmentInteractionListener, View.OnClickListener, SelfieCaptureListener, PaymentResultWithDataListener, EnachListener, @@ -222,6 +224,8 @@ class GetLoanActivity : BaseActivity(), FragmentInteractionListener, View.OnClic QUESTIONNAIRE_SCREEN -> currentScreen = NaviAnalytics.QUESTIONNAIRE_SCREEN ADDRESS_VERIFICATION_SCREEN -> currentScreen = NaviAnalytics.KYC_ADDRESS ADDRESS_VERIFICATION_PROOF_SCREEN -> currentScreen = NaviAnalytics.KYC_ADDRESS_PROOF + ADDRESS_PHYSICAL_VERIFICATION -> currentScreen = + NaviAnalytics.KYC_PHYSICAL_ADDR_VERIFICATION_SCREEN } } @@ -479,6 +483,7 @@ class GetLoanActivity : BaseActivity(), FragmentInteractionListener, View.OnClic const val QUESTIONNAIRE_SCREEN = "QUESTIONNAIRE" const val ADDRESS_VERIFICATION_SCREEN = "KYC_ADDRESS_VERIFICATION" const val ADDRESS_VERIFICATION_PROOF_SCREEN = "KYC_ADDRESS_VERIFICATION_PROOF" + const val ADDRESS_PHYSICAL_VERIFICATION = "ADDRESS_PHYSICAL_VERIFICATION" } override fun setProperties(title: String?, subtitle: String?, progress: Int?) { diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressFragment.kt index 076356c177..c0a6239135 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressFragment.kt @@ -25,8 +25,8 @@ import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener import com.navi.common.model.CtaData import com.naviapp.models.FeedbackPageType +import com.naviapp.models.KycUiStatusValue import com.naviapp.models.RedirectPageStatus -import com.naviapp.models.UiStatusValue import com.naviapp.models.request.Address import com.naviapp.models.request.KycRequest import com.naviapp.models.request.SaveCorrespondenceAddressRequest @@ -37,6 +37,9 @@ import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.addressverification.viewmodels.AddressVerificationVM import com.naviapp.personalloan.getloan.kyc.fragments.KycFragment import com.naviapp.utils.* +import com.naviapp.utils.Constants.HOUSE_NUMBER_MIN_SIZE +import com.naviapp.utils.Constants.LOCALITY_MIN_SIZE +import com.naviapp.utils.Constants.STREET_MIN_SIZE class KycAddressFragment : BaseFragment(), View.OnClickListener, View.OnKeyListener, View.OnFocusChangeListener, @@ -132,13 +135,13 @@ class KycAddressFragment : BaseFragment(), View.OnClickListener, View.OnKeyListe hideLoader() it.let { kycInReviewResponse -> when (kycInReviewResponse.content?.kyc) { - UiStatusValue.COMPLETE -> { + KycUiStatusValue.COMPLETE.name -> { navigateToNextScreen() } - UiStatusValue.SOFT_REJECT -> { + KycUiStatusValue.SOFT_REJECT.name -> { gotoSoftReject() } - UiStatusValue.IN_REVIEW -> { + KycUiStatusValue.IN_REVIEW.name -> { navigateToKycInReviewScreen() } else -> { @@ -317,22 +320,43 @@ class KycAddressFragment : BaseFragment(), View.OnClickListener, View.OnKeyListe private fun shouldEnableNextButton(showError: Boolean): Boolean { var enable = true - if (binding.addressLayout.currentAddressLine1.text.toString().isEmpty()) { + val houseNumberMinChars = + viewModel.addressDetailsLiveData.value?.content?.currentAddressMinSize?.houseNumberMinChars.orValue( + HOUSE_NUMBER_MIN_SIZE + ) + val streetMinChars = + viewModel.addressDetailsLiveData.value?.content?.currentAddressMinSize?.streetMinChars.orValue( + STREET_MIN_SIZE + ) + val localityMinChars = + viewModel.addressDetailsLiveData.value?.content?.currentAddressMinSize?.localityMinChars.orValue( + LOCALITY_MIN_SIZE + ) + if (binding.addressLayout.currentAddressLine1.text.toString().length < houseNumberMinChars + ) { enable = false if (showError) { - binding.addressLayout.currentAddressLine1.setError(getString(R.string.min_character_length_1)) + binding.addressLayout.currentAddressLine1.setError( + getString(R.string.min_character_length).appendStrings(" $houseNumberMinChars ", getString(R.string._char)) + ) } } - if (binding.addressLayout.currentAddressLine2.text.toString().length < 5) { + if (binding.addressLayout.currentAddressLine2.text.toString().length < streetMinChars + ) { enable = false if (showError) { - binding.addressLayout.currentAddressLine2.setError(getString(R.string.min_character_length_5)) + binding.addressLayout.currentAddressLine2.setError( + getString(R.string.min_character_length).appendStrings(" $streetMinChars ", getString(R.string._char)) + ) } } - if (binding.addressLayout.currentAddressLine3.text.toString().length < 5) { + if (binding.addressLayout.currentAddressLine3.text.toString().length < localityMinChars + ) { enable = false if (showError) { - binding.addressLayout.currentAddressLine3.setError(getString(R.string.min_character_length_5)) + binding.addressLayout.currentAddressLine3.setError( + getString(R.string.min_character_length).appendStrings(" $localityMinChars ", getString(R.string._char)) + ) } } if (binding.addressLayout.currentAddressPincode.text.toString().length != Constants.PINCODE_SIZE) { diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressProofFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressProofFragment.kt index 8a4453e8f3..f4cf6206eb 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressProofFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/addressverification/fragments/KycAddressProofFragment.kt @@ -136,13 +136,13 @@ class KycAddressProofFragment : BaseFragment(), View.OnClickListener, hideLoader() it.let { kycInReviewResponse -> when (kycInReviewResponse.content?.kyc) { - UiStatusValue.COMPLETE -> { + KycUiStatusValue.COMPLETE.name -> { navigateToNextScreen() } - UiStatusValue.SOFT_REJECT -> { + KycUiStatusValue.SOFT_REJECT.name -> { gotoSoftReject() } - UiStatusValue.IN_REVIEW -> { + KycUiStatusValue.IN_REVIEW.name -> { navigateToKycInReviewScreen() } else -> { diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt index 900632b2d6..4f79d367f0 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/BankDetailsFragment.kt @@ -14,28 +14,28 @@ import android.widget.Toast import androidx.core.widget.addTextChangedListener import androidx.lifecycle.ViewModelProvider import com.navi.analytics.uxcam.UxcamUtil +import com.navi.common.model.CtaData +import com.navi.common.sharedpref.PreferenceManager import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.fragment.BaseFragment import com.naviapp.dashboard.listeners.FragmentInteractionListener import com.naviapp.databinding.BankDetailsFragmentBinding -import com.naviapp.personalloan.getloan.activities.BankAccountVerificationLoaderActivity -import com.naviapp.personalloan.getloan.activities.GetLoanActivity.Companion.IS_FOR_SECOND_LOAN_JOURNEY -import com.naviapp.personalloan.getloan.bankdetails.listeners.FindIfscListener -import com.naviapp.personalloan.getloan.bankdetails.listeners.OnSelectBankListener -import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM import com.naviapp.homeloan.common.listener.CheckBoxClickListener import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener -import com.navi.common.model.CtaData import com.naviapp.models.FeedbackPageType import com.naviapp.models.request.BankDetail import com.naviapp.models.response.* import com.naviapp.network.ApiErrorTagType.FETCH_BANKS_ERROR import com.naviapp.network.ApiErrorTagType.FETCH_DISBURSEMENT_DETAILS_ERROR import com.naviapp.network.ApiErrorTagType.FETCH_LOAN_BASIC_DETAILS_ERROR +import com.naviapp.personalloan.getloan.activities.BankAccountVerificationLoaderActivity import com.naviapp.personalloan.getloan.activities.GetLoanActivity -import com.navi.common.sharedpref.PreferenceManager +import com.naviapp.personalloan.getloan.activities.GetLoanActivity.Companion.IS_FOR_SECOND_LOAN_JOURNEY +import com.naviapp.personalloan.getloan.bankdetails.listeners.FindIfscListener +import com.naviapp.personalloan.getloan.bankdetails.listeners.OnSelectBankListener +import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM import com.naviapp.utils.* import com.naviapp.utils.Constants.BANK_ACCOUNT_NUMBER import com.naviapp.utils.Constants.BANK_IFSC @@ -172,6 +172,7 @@ class BankDetailsFragment : BaseFragment(), View.OnClickListener, FindIfscListen private fun initObservers() { viewModel.loanBasicDetails.observeNonNull(this) { + loanApplicationId = it.loanApplicationId if (!it.loanApplicationId.isNullOrEmpty()) { showLoader() viewModel.fetchDisbursementDetails(it.loanApplicationId) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt index 4981bd5a5d..b940a9c7ce 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/repositories/BankDetailsAutoDebitRepository.kt @@ -1,6 +1,7 @@ package com.naviapp.personalloan.getloan.bankdetailsautodebit.repositories import com.naviapp.models.EnachData +import com.naviapp.models.request.AutoPayOptionData import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.utils.retrofitService @@ -8,8 +9,16 @@ class BankDetailsAutoDebitRepository : ResponseCallback() { suspend fun fetchDisbursementDetails(loanApplicationId: String) = apiResponseCallback(retrofitService().fetchDisbursementDetails(loanApplicationId)) - suspend fun fetchMandateRequestId(loanApplicationId: String) = - apiResponseCallback(retrofitService().fetchMendateRequestId(loanApplicationId)) + suspend fun fetchMandateRequestId( + loanApplicationId: String, + autoPayOptionData: AutoPayOptionData + ) = + apiResponseCallback( + retrofitService().fetchMendateRequestId( + loanApplicationId, + autoPayOptionData + ) + ) suspend fun fetchEnachStatus(requestId: String) = apiResponseCallback(retrofitService().fetchAsyncRequestData(requestId)) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt index 1bc1b0cc18..6fa08529d8 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/activities/EnachTutorialActivity.kt @@ -3,19 +3,20 @@ package com.naviapp.personalloan.getloan.bankdetailsautodebit.view.activities import android.os.Bundle import android.view.View import androidx.databinding.DataBindingUtil -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.BaseActivity -import com.naviapp.common.decorator.TopMarginItemDecoration +import com.naviapp.common.adapter.BaseVPA import com.naviapp.databinding.EnachTutorialActivityBinding -import com.naviapp.personalloan.getloan.bankdetailsautodebit.adapter.EnachDetailsAdapter -import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.BankDetailsAutoDebitVM +import com.naviapp.models.response.EnachWidgetResponse import com.naviapp.models.response.GenericWidgetConfig import com.navi.common.sharedpref.PreferenceManager +import com.naviapp.personalloan.getloan.bankdetailsautodebit.view.fragments.EnachFragment +import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.BankDetailsAutoDebitVM import com.naviapp.utils.Constants import com.naviapp.utils.LOAN_APPLICATION_ID +import com.naviapp.utils.onPageSelected class EnachTutorialActivity : BaseActivity(), View.OnClickListener { private lateinit var binding: EnachTutorialActivityBinding @@ -31,7 +32,6 @@ class EnachTutorialActivity : BaseActivity(), View.OnClickListener { binding = DataBindingUtil.setContentView(this, R.layout.enach_tutorial_activity) super.setContentView(binding.root) initError(viewModel) - initUI() initListener() setUpObservers() val loanType = intent.getStringExtra(KEY_LOAN_TYPE) @@ -47,44 +47,48 @@ class EnachTutorialActivity : BaseActivity(), View.OnClickListener { } private fun setUpObservers() { - viewModel.enachDetails.observe(this, Observer { widgetGenericResponse -> + viewModel.enachDetails.observe(this, { widgetGenericResponse -> hideLoader() widgetGenericResponse?.let { - it.contentWidget?.let { contentWidgetList -> - @Suppress("UNCHECKED_CAST") - binding.contentRv.adapter = - EnachDetailsAdapter(contentWidgetList as List) - } - it.footerWidget?.let { listFooter -> - if (!listFooter.isNullOrEmpty()) { - (listFooter[0] as GenericWidgetConfig).widgetBody?.title?.let { title -> - binding.setupAutoDebitBtn.setProperties( - title, - iconId = R.drawable.ic_arrow_right_svg - ) - } - } - } + setupView(it) } }) } - private fun initListener() { - binding.backIv.setOnClickListener(this) - binding.setupAutoDebitBtn.setOnClickListener(this) + private fun setupView(enachWidgetResponse: EnachWidgetResponse) { + val headerWidgetList: List? = + enachWidgetResponse.headerWidget + val contentWidgetListForAllScreens: List>? = + enachWidgetResponse.contentWidget + val footerWidgetList: List? = + enachWidgetResponse.footerWidget + val adapter = BaseVPA(supportFragmentManager) + contentWidgetListForAllScreens?.forEachIndexed { index, contentWidgetList -> + adapter.addFragment( + EnachFragment.newInstance( + footerWidgetList?.getOrNull(index)?.widgetId, + contentWidgetList, + footerWidgetList?.getOrNull(index)?.widgetBody?.title + ), + headerWidgetList?.getOrNull(index)?.widgetBody?.title.orEmpty() + ) + } + binding.enachViewPager.adapter = adapter + binding.enachViewPager.offscreenPageLimit = 2 + binding.enachTabLayout.setupWithViewPager(binding.enachViewPager) + binding.enachViewPager.onPageSelected { position -> + NaviAnalytics.naviAnalytics.EnachTutorial() + .onPageSelected(headerWidgetList?.getOrNull(position)?.widgetBody?.title.orEmpty()) + } } - private fun initUI() { - binding.contentRv.addItemDecoration(TopMarginItemDecoration(resources.getDimension(R.dimen.layout_dp_40))) + private fun initListener() { + binding.sectionHeading.backIv.setOnClickListener(this) } override fun onClick(v: View?) { when (v?.id) { - binding.backIv.id -> finish() - binding.setupAutoDebitBtn.id -> { - setResult(RESULT_OK) - finish() - } + binding.sectionHeading.backIv.id -> finish() } } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt index 8594fbd199..eec8a5dcc6 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/BankDetailsAutoDebitFragment.kt @@ -9,7 +9,6 @@ import android.os.Handler import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.content.ContextCompat import androidx.lifecycle.ViewModelProvider import com.navi.analytics.uxcam.UxcamUtil import com.naviapp.R @@ -26,6 +25,17 @@ import com.naviapp.firebasedb.FirebaseStatusType.PENDING import com.naviapp.firebasedb.FirebaseStatusType.SUCCESS import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener +import com.naviapp.manager.UserManager +import com.navi.common.model.CtaData +import com.naviapp.models.FeedbackPageType +import com.naviapp.models.request.AutoPayOptionData +import com.naviapp.models.response.AdditionalDataAsyncResponse +import com.naviapp.models.response.AutoPayStatus +import com.naviapp.models.response.EnachMandateDetailsResponse +import com.naviapp.network.ApiErrorTagType +import com.naviapp.network.models.Action +import com.naviapp.network.models.GenericWarningResponse +import com.naviapp.payment.models.ProviderType import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment.Companion.DISBURSEMENT_DETAILS import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment.Companion.EDIT_ACCOUNT @@ -35,30 +45,19 @@ import com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels.EnachSha import com.naviapp.personalloan.getloan.common.listener.EnachListener import com.naviapp.personalloan.getloan.helpers.EnachHelper import com.naviapp.personalloan.getloan.helpers.EnachStub -import com.naviapp.manager.UserManager -import com.navi.common.model.CtaData -import com.naviapp.models.FeedbackPageType -import com.naviapp.models.response.AdditionalDataAsyncResponse -import com.naviapp.models.response.DisbursementDetails -import com.naviapp.models.response.EnachMandateDetailsResponse -import com.naviapp.network.ApiErrorTagType -import com.naviapp.network.models.Action -import com.naviapp.network.models.GenericWarningResponse -import com.naviapp.payment.models.ProviderType import com.navi.common.sharedpref.PreferenceManager import com.naviapp.utils.* +import com.naviapp.utils.Constants.MANDATE_TYPE class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, FooterInteractionListener { private lateinit var binding: BankDetailsAutoDebitFragmentBinding private var listener: FragmentInteractionListener? = null private val viewModel by lazy { ViewModelProvider(this).get(BankDetailsAutoDebitVM::class.java) } - private var apiPollScheduler: ApiPollScheduler? = null private var firebaseHelper: FirebaseDataHelper? = null private var firebaseDataReceiveListener: FirebaseDataReceiveListener? = null private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.BankDetails() - private var editAccountMaxRetry = 0 private var enachListener: EnachListener? = null private var loanApplicationId: String? = null @@ -73,7 +72,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { binding = BankDetailsAutoDebitFragmentBinding.inflate(inflater, container, false) initError() initUi() @@ -158,6 +157,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, private fun observeLoanBasicDetails() { viewModel.loanBasicDetails.observeNonNull(this) { basicDetails -> basicDetails.loanApplicationId?.let { + loanApplicationId = it showLoader() PreferenceManager.setStringPreference(LOAN_APPLICATION_ID, it) viewModel.fetchDisbursementDetails(it) @@ -231,12 +231,12 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } private fun observeDisbursementDetails() { - viewModel.disbursementDetails.observeNonNull(this) { disbursementDetailsResponse -> + viewModel.disbursementDetails.observeNullable(this) { disbursementDetailsResponse -> hideLoader() headerInteractionListener?.setProperties( - disbursementDetailsResponse.header?.title, - disbursementDetailsResponse.header?.subtitle, - disbursementDetailsResponse.header?.progress + disbursementDetailsResponse?.header?.title, + disbursementDetailsResponse?.header?.subtitle, + disbursementDetailsResponse?.header?.progress ) binding.footerView.setProperties( disbursementDetailsResponse?.footer?.backCta, @@ -246,32 +246,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, ), this ) - disbursementDetailsResponse?.disbursementDetails?.let { disbursementDetails -> - setBankDetails( - disbursementDetails.bankDetails?.bankName, - disbursementDetails.bankDetails?.accountNumber - ) - binding.bankDetailsTv.text = getString( - R.string.loan_transfer_info, - disbursementDetails.netLoanAmount?.value?.formatCurrency() - ?: getString(R.string.loan_amount) - ) - binding.autoDebitLayout.detailTv.text = getString( - R.string.enach_first_installment_info, - disbursementDetails.emiAmount?.value?.formatCurrency(), - disbursementDetails.firstDueDate - ) - editAccountMaxRetry = disbursementDetails.editBankRetriesLeft.orZero() - editBtnHandling(disbursementDetails) - disbursementDetails.autoDebitStatus?.let { setAutoDebitState(it, true) } - showAutoDebitLayout() - } - } - } - - private fun editBtnHandling(disbursementDetail: DisbursementDetails) { - if (disbursementDetail.editBankRetriesLeft.orZero() <= 0 || disbursementDetail.autoDebitStatus == SUCCESS) { - binding.editAccountTv.visibility = View.GONE + binding.viewModel = viewModel } } @@ -350,7 +325,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, when (status) { SUCCESS -> { firebaseHelper?.clear() - binding.editAccountTv.visibility = View.GONE + binding.changeBankTv.visibility = View.GONE gotoGetLoan() } FAILURE -> { @@ -396,7 +371,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, showTimeoutErrorScreen( firebaseHelper, apiPollScheduler, - View.OnClickListener { setupAutoDebit() }, + { setupAutoDebit() }, errorTag ) firebaseHelper = null @@ -434,7 +409,12 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, apiPollScheduler = ApiPollScheduler( numberOfRetry = NUMBER_OF_RETRY_MANDATE_STATUS, doOnTimeout = { - activity?.runOnUiThread { handleResponse(WAITING, MANDATE_COMPLETE) } + activity?.runOnUiThread { + handleResponse( + AutoPayStatus.WAITING.name, + MANDATE_COMPLETE + ) + } } ) { viewModel.fetchEnachStatus(requestId) @@ -456,66 +436,16 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, private fun setAutoDebitState(autoDebitStatus: String, isPageLoad: Boolean = false) { if (autoDebitStatus == SUCCESS) naviAnalyticsEventTracker.onAutoDebitSuccessScreen() else if (autoDebitStatus == FAILURE) naviAnalyticsEventTracker.onAutoDebitFailureScreen() - binding.autoDebitLayout.statusTv.visibility = - if (autoDebitStatus == PENDING) View.GONE else View.VISIBLE + viewModel.setAutoDebitState(autoDebitStatus) + binding.notifyChange() binding.footerView.visibility = - if (autoDebitStatus == SUCCESS || autoDebitStatus == WAITING) View.GONE else View.VISIBLE - binding.autoDebitLayout.howToSetupTv.visibility = - if (autoDebitStatus == SUCCESS || autoDebitStatus == WAITING) View.GONE else View.VISIBLE - binding.autoDebitLayout.statusTv.text = getString( - when (autoDebitStatus) { - SUCCESS -> R.string.auto_debit_success - WAITING -> R.string.auto_debit_pending - else -> R.string.auto_debit_failed - } - ) - - if (autoDebitStatus == WAITING) { - binding.autoDebitLayout.autoDebitTv.text = getString(R.string.auto_debit_pending_title) - binding.autoDebitLayout.detailTv.text = getString(R.string.auto_debit_pending_status) - } else { - binding.autoDebitLayout.autoDebitTv.text = - getString(R.string.setup_auto_debit_for_emi_s) - } - - context?.let { context -> - binding.autoDebitLayout.statusTv.setTextColor( - ContextCompat.getColor( - context, - when (autoDebitStatus) { - SUCCESS -> R.color.green - FAILURE -> R.color.red - else -> R.color.title_color_one - } - ) - ) - binding.autoDebitLayout.statusTv.setCompoundDrawablesWithIntrinsicBounds( - ContextCompat.getDrawable( - context, - when (autoDebitStatus) { - SUCCESS -> R.drawable.ic_tick_svg - FAILURE -> R.drawable.ic_alert_svg - else -> R.drawable.ic_pending_svg - } - ), - null, null, null - ) - } - - if (editAccountMaxRetry > 0 && autoDebitStatus == FAILURE) { - if (binding.editAccountTv.visibility != View.VISIBLE) - binding.editAccountTv.visibility = View.VISIBLE - } - if (isPageLoad && autoDebitStatus == SUCCESS) showNextBtn() + if (autoDebitStatus == SUCCESS || autoDebitStatus == AutoPayStatus.WAITING.name) View.GONE else View.VISIBLE + if (isPageLoad && autoDebitStatus == SUCCESS) binding.footerView.visibility = View.VISIBLE } private fun initUi() { - val isForSecondLoanJourney = - arguments?.getBoolean(GetLoanActivity.IS_FOR_SECOND_LOAN_JOURNEY).orFalse() - binding.bankDisclaimerView.bankDisclaimerCv.visibility = - if (isForSecondLoanJourney) View.GONE else View.VISIBLE - - UxcamUtil.instance.occludeSensitiveView(binding.accountNumberTv) + binding.footerInteractionListener = this + UxcamUtil.instance.occludeSensitiveView(binding.bankAccountNumberTv) initObservers() val id = loanApplicationId if (!id.isNullOrEmpty()) { @@ -526,49 +456,37 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } } - private fun showAutoDebitLayout() { - if (binding.autoDebitLayout.root.visibility == View.VISIBLE) return - Handler().postDelayed({ - binding.autoDebitLayout.root.visibility = View.VISIBLE - binding.divider.visibility = View.VISIBLE - binding.verifiedBadge.visibility = View.VISIBLE - setEaseInAnimation(binding.autoDebitLayout.root, binding.divider, binding.verifiedBadge) - }, AUTO_DEBIT_LAYOUT_DELAY) - } - - private fun setBankDetails(bankName: String?, accountNumber: String?) { - ifLet(bankName, accountNumber) { (bankName, accountNumber) -> - binding.bankNameTv.text = bankName - binding.accountNumberTv.text = accountNumber - } - } - private fun initListeners() { - binding.autoDebitLayout.howToSetupTv.setOnClickListener(this) - binding.editAccountTv.setOnClickListener(this) + binding.selectManadateView.howToSetupTv.setOnClickListener(this) + binding.changeBankTv.setOnClickListener(this) } - private fun setupAutoDebit() { + private fun setupAutoDebit(autoPayTypeId: String? = binding.selectManadateView.mandateOptionsRv.selectedLabelLiveData.value?.id) { if (!isAdded && activity?.isFinishing.orTrue()) return - showLoader() - naviAnalyticsEventTracker.onSetupAutoDebitClicked() + naviAnalyticsEventTracker.onSetupAutoDebitClicked(autoPayTypeId) val id = loanApplicationId if (!id.isNullOrEmpty()) { - viewModel.fetchMandateRequestId(id) + showLoader() + viewModel.fetchMandateRequestId(id, AutoPayOptionData(autoPayOptionId = autoPayTypeId)) } } override fun onClick(view: View?) { when (view?.id) { R.id.how_to_setup_tv -> navigateToEnachTutorial() - R.id.edit_account_tv -> handleEditAccountClick() + R.id.change_bank_tv -> handleEditAccountClick() } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if (requestCode != ENACH_TUTORIAL_SETUP_AUTO_DEBIT || resultCode != RESULT_OK) return - setupAutoDebit() + if (resultCode == RESULT_OK) { + when (requestCode) { + ENACH_TUTORIAL_SETUP_AUTO_DEBIT -> { + setupAutoDebit(arguments?.getString(MANDATE_TYPE)) + } + } + } } private fun navigateToEnachTutorial() { @@ -617,15 +535,6 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, }) } - private fun showNextBtn() { - binding.footerView.visibility = View.VISIBLE - binding.footerView.setProperties( - viewModel.disbursementDetails.value?.footer?.backCta, - viewModel.disbursementDetails.value?.footer?.nextCta, - this - ) - } - override fun onAttach(context: Context) { super.onAttach(context) listener = context as? FragmentInteractionListener @@ -650,9 +559,7 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { - if (ctaData?.url == Constants.SETUP_AUTO_DEBIT) { - setupAutoDebit() - } else { + if (viewModel.isAutoPaySuccess()) { ctaData?.url?.let { listener?.navigateTo( it, Bundle().apply { @@ -660,6 +567,8 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, } ) } + } else { + setupAutoDebit() } } @@ -668,11 +577,9 @@ class BankDetailsAutoDebitFragment : BaseFragment(), View.OnClickListener, companion object { const val TAG = "BANK_DETAILS_AUTO_DEBIT_FRAGMENT" - private const val AUTO_DEBIT_LAYOUT_DELAY = 500L private const val DELAY_AFTER_ENACH_SUCCESS = 4000L private const val NUMBER_OF_RETRY_MANDATE_CREATION = 2 private const val NUMBER_OF_RETRY_MANDATE_STATUS = 6 - private const val WAITING = "WAITING" private const val EDIT_BANK_CONFIRM_DELAY = 200L private const val ENACH_TUTORIAL_SETUP_AUTO_DEBIT = 100 private const val EMANDATE_CANCEL_CODE = 0 diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt new file mode 100644 index 0000000000..5f2e01bb56 --- /dev/null +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/view/fragments/EnachFragment.kt @@ -0,0 +1,82 @@ +package com.naviapp.personalloan.getloan.bankdetailsautodebit.view.fragments + +import android.app.Activity.RESULT_OK +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.naviapp.R +import com.naviapp.common.decorator.TopMarginItemDecoration +import com.naviapp.common.fragment.BaseFragment +import com.naviapp.databinding.FragmentEnachBinding +import com.naviapp.models.response.GenericWidgetConfig +import com.naviapp.personalloan.getloan.bankdetailsautodebit.adapter.EnachDetailsAdapter +import com.naviapp.utils.Constants.EMPTY +import java.util.* + +class EnachFragment : BaseFragment() { + private lateinit var binding: FragmentEnachBinding + + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentEnachBinding.inflate(inflater, container, false) + initUi() + return binding.root + } + + private fun initUi() { + arguments?.getParcelableArrayList(CONTENT_DATA)?.let { + binding.contentRv.adapter = EnachDetailsAdapter( + it + ) + binding.contentRv.addItemDecoration(TopMarginItemDecoration(resources.getDimension(R.dimen.layout_dp_40))) + } + arguments?.getString(FOOTER_TITLE)?.let { + binding.setupAutoDebitBtn.visibility = View.VISIBLE + binding.footerDivider.visibility = View.VISIBLE + binding.setupAutoDebitBtn.setProperties( + it, + iconId = R.drawable.ic_arrow_right_svg + ) + } ?: run { + binding.setupAutoDebitBtn.visibility = View.GONE + binding.footerDivider.visibility = View.GONE + } + + binding.setupAutoDebitBtn.setOnClickListener { + val intent = Intent() + intent.putExtra(MANDATE_TYPE, arguments?.getString(MANDATE_TYPE)) + activity?.setResult(RESULT_OK, intent) + activity?.finish() + } + } + + companion object { + const val TAG = "EnachFragment" + private const val CONTENT_DATA = "content_data" + private const val MANDATE_TYPE = "mandate_type" + private const val FOOTER_TITLE = "footer_title" + fun newInstance( + mandateType: String?, + contentWidgetList: List, + footerTitle: String? + ) = EnachFragment().apply { + val args = Bundle() + args.putParcelableArrayList( + CONTENT_DATA, + contentWidgetList as? ArrayList + ) + args.putString(MANDATE_TYPE, mandateType) + args.putString(FOOTER_TITLE, footerTitle) + arguments = args + } + } + + override val screenName: String + get() = EMPTY +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt index 7477cf5c06..a4794656f8 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetailsautodebit/viewmodels/BankDetailsAutoDebitVM.kt @@ -2,18 +2,23 @@ package com.naviapp.personalloan.getloan.bankdetailsautodebit.viewmodels import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import com.navi.naviinsurancesdk.util.orZero import com.naviapp.common.viewmodel.BaseVM -import com.naviapp.personalloan.getloan.bankdetailsautodebit.repositories.BankDetailsAutoDebitRepository import com.naviapp.models.EnachData +import com.naviapp.models.request.AutoPayOptionData import com.naviapp.models.response.* import com.naviapp.network.ApiErrorTagType import com.naviapp.network.models.GenericErrorResponse +import com.naviapp.personalloan.getloan.bankdetailsautodebit.repositories.BankDetailsAutoDebitRepository +import com.naviapp.utils.formatCurrency import kotlinx.coroutines.launch class BankDetailsAutoDebitVM : BaseVM() { private val repository by lazy { BankDetailsAutoDebitRepository() } - val disbursementDetails = MutableLiveData() + private val _disbursementDetails = MutableLiveData() + val disbursementDetails: LiveData + get() = _disbursementDetails private val _mandateId = MutableLiveData() val mandateId: LiveData @@ -40,15 +45,15 @@ class BankDetailsAutoDebitVM : BaseVM() { val mandateFailure: LiveData get() = _mandateFailure - private val _enachDetails = MutableLiveData() - val enachDetails: LiveData + private val _enachDetails = MutableLiveData() + val enachDetails: LiveData get() = _enachDetails fun fetchDisbursementDetails(loanApplicationId: String) { coroutineScope.launch { val response = repository.fetchDisbursementDetails(loanApplicationId) if (response.error == null) { - disbursementDetails.value = response.data + _disbursementDetails.value = response.data } else { updateErrorMessage( response.error, @@ -59,9 +64,9 @@ class BankDetailsAutoDebitVM : BaseVM() { } } - fun fetchMandateRequestId(loanApplicationId: String) { + fun fetchMandateRequestId(loanApplicationId: String, autoPayOptionData: AutoPayOptionData) { coroutineScope.launch { - val response = repository.fetchMandateRequestId(loanApplicationId) + val response = repository.fetchMandateRequestId(loanApplicationId, autoPayOptionData) if (response.error == null) { _notificationPath.value = response.data?.notificationPath _mandateId.value = response.data @@ -132,4 +137,49 @@ class BankDetailsAutoDebitVM : BaseVM() { } } } + + fun isAutoPaySuccess(): Boolean { + return disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.SUCCESS.name + } + + fun isAutoPayAadharPending(): Boolean { + return disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.AADHAR_PENDING.name + } + + fun isAutoPayPending(): Boolean { + return disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.PENDING.name + } + + fun getBankName(): String? { + return disbursementDetails.value?.disbursementDetails?.bankDetails?.bankName + } + + fun getAccountNumber(): String? { + return disbursementDetails.value?.disbursementDetails?.bankDetails?.accountNumber + } + + fun canChangeBank(): Boolean { + return (disbursementDetails.value?.disbursementDetails?.editBankRetriesLeft.orZero() <= 0 || + disbursementDetails.value?.disbursementDetails?.autoDebitStatus == AutoPayStatus.SUCCESS.name).not() + } + + fun getAutoPayFooterData(): Footer? { + return disbursementDetails.value?.footer + } + + fun getAutoPayOptions(): List? { + return disbursementDetails.value?.disbursementDetails?.autoPayOptions + } + + fun getEmiAmount(): String? { + return disbursementDetails.value?.disbursementDetails?.emiAmount?.value?.formatCurrency() + } + + fun getEmiStartDate(): String? { + return disbursementDetails.value?.disbursementDetails?.firstDueDate + } + + fun setAutoDebitState(autoDebitStatus: String) { + disbursementDetails.value?.disbursementDetails?.autoDebitStatus = autoDebitStatus + } } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/helper/GetLoanViewHelper.kt b/app/src/main/java/com/naviapp/personalloan/getloan/helper/GetLoanViewHelper.kt index 573a491d07..e71fa6fbc6 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/helper/GetLoanViewHelper.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/helper/GetLoanViewHelper.kt @@ -8,17 +8,18 @@ package com.naviapp.personalloan.getloan.helper import androidx.fragment.app.Fragment import com.naviapp.common.fragment.QuestionnaireFragment +import com.naviapp.models.SubPageStatusType import com.naviapp.personalloan.getloan.activities.GetLoanActivity +import com.naviapp.personalloan.getloan.addressverification.fragments.KycAddressFragment +import com.naviapp.personalloan.getloan.addressverification.fragments.KycAddressProofFragment import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment import com.naviapp.personalloan.getloan.bankdetailsautodebit.view.fragments.BankDetailsAutoDebitFragment import com.naviapp.personalloan.getloan.kyc.fragments.KycFragment +import com.naviapp.personalloan.getloan.kyc.fragments.KycInReviewFragment +import com.naviapp.personalloan.getloan.kyc.fragments.KycPhysicalAddressVerificationFragment import com.naviapp.personalloan.getloan.loandetails.fragments.LoanDetailsFragment import com.naviapp.personalloan.getloan.summary.fragments.SummaryFragment import com.naviapp.utils.Constants -import com.naviapp.models.SubPageStatusType -import com.naviapp.personalloan.getloan.addressverification.fragments.KycAddressFragment -import com.naviapp.personalloan.getloan.addressverification.fragments.KycAddressProofFragment -import com.naviapp.personalloan.getloan.kyc.fragments.KycInProgressFragment class GetLoanViewHelper(isSecondLoanJourney: Boolean = false) { @@ -36,10 +37,11 @@ GetLoanViewHelper(isSecondLoanJourney: Boolean = false) { GetLoanActivity.BANK_DETAILS_SCREEN -> BankDetailsFragment.TAG GetLoanActivity.SUMMARY_SCREEN -> SummaryFragment.TAG GetLoanActivity.BANK_DETAILS_AUTO_DEBIT_SCREEN -> BankDetailsAutoDebitFragment.TAG - GetLoanActivity.KYC_IN_REVIEW -> KycInProgressFragment.TAG + GetLoanActivity.KYC_IN_REVIEW -> KycInReviewFragment.TAG GetLoanActivity.QUESTIONNAIRE_SCREEN -> QuestionnaireFragment.TAG GetLoanActivity.ADDRESS_VERIFICATION_SCREEN -> KycAddressFragment.TAG GetLoanActivity.ADDRESS_VERIFICATION_PROOF_SCREEN -> KycAddressProofFragment.TAG + GetLoanActivity.ADDRESS_PHYSICAL_VERIFICATION -> KycPhysicalAddressVerificationFragment.TAG else -> LoanDetailsFragment.TAG } } @@ -51,10 +53,11 @@ GetLoanViewHelper(isSecondLoanJourney: Boolean = false) { GetLoanActivity.BANK_DETAILS_SCREEN -> BankDetailsFragment() GetLoanActivity.SUMMARY_SCREEN -> SummaryFragment() GetLoanActivity.BANK_DETAILS_AUTO_DEBIT_SCREEN -> BankDetailsAutoDebitFragment() - GetLoanActivity.KYC_IN_REVIEW -> KycInProgressFragment() + GetLoanActivity.KYC_IN_REVIEW -> KycInReviewFragment() GetLoanActivity.QUESTIONNAIRE_SCREEN -> QuestionnaireFragment.newInstance(Constants.TYPE_PERSONAL_LOAN) GetLoanActivity.ADDRESS_VERIFICATION_SCREEN -> KycAddressFragment() GetLoanActivity.ADDRESS_VERIFICATION_PROOF_SCREEN -> KycAddressProofFragment() + GetLoanActivity.ADDRESS_PHYSICAL_VERIFICATION -> KycPhysicalAddressVerificationFragment() else -> LoanDetailsFragment() } } @@ -88,6 +91,9 @@ GetLoanViewHelper(isSecondLoanJourney: Boolean = false) { SubPageStatusType.ADDRESS_VERIFICATION_PROOF -> { GetLoanActivity.ADDRESS_VERIFICATION_PROOF_SCREEN } + SubPageStatusType.ADDRESS_PHYSICAL_VERIFICATION -> { + GetLoanActivity.ADDRESS_PHYSICAL_VERIFICATION + } else -> { GetLoanActivity.LOAN_DETAILS_SCREEN } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt b/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt index 9c34b9c264..8709b78182 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/helpers/EnachHelper.kt @@ -7,10 +7,13 @@ package com.naviapp.personalloan.getloan.helpers import android.app.Activity +import android.text.TextUtils import androidx.appcompat.app.AppCompatActivity import com.digio.`in`.esign2sdk.Digio import com.digio.`in`.esign2sdk.DigioConfig import com.digio.`in`.esign2sdk.DigioEnvironment +import com.naviapp.BuildConfig +import com.naviapp.utils.PROD import com.naviapp.utils.log class EnachHelper { @@ -25,7 +28,9 @@ class EnachHelper { digio = Digio() val digioConfig = DigioConfig() // digioConfig.logo = "url for company logo" //TODO; company logo - digioConfig.environment = DigioEnvironment.PRODUCTION //Stage is sandbox + if (TextUtils.equals(BuildConfig.FLAVOR, PROD)) + digioConfig.environment = DigioEnvironment.PRODUCTION + else digioConfig.environment = DigioEnvironment.SANDBOX try { digio?.init(activity as AppCompatActivity, digioConfig) } catch (e: Exception) { diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt index 727a16c72a..71f29b13c2 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/adapter/KycItemsAdapter.kt @@ -3,6 +3,7 @@ package com.naviapp.personalloan.getloan.kyc.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.widget.doAfterTextChanged import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.naviapp.R @@ -66,6 +67,15 @@ class KycItemsAdapter( ) ) } + KycItemType.TEXTFIELD.ordinal -> { + TextFieldViewHolder( + ItemTextFieldViewBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } KycItemType.PAN.ordinal -> { PanKycOptionsViewHolder( ItemPanKycViewBinding.inflate( @@ -111,6 +121,9 @@ class KycItemsAdapter( is AddressKycOptionsViewHolder -> { setupAddressView(holder.binding, position) } + is TextFieldViewHolder -> { + setupTextFieldView(holder.binding, position) + } is PanKycOptionsViewHolder -> { setupPanView(holder.binding, position) } @@ -125,6 +138,7 @@ class KycItemsAdapter( KycItemType.SELFIE.name -> KycItemType.SELFIE.ordinal KycItemType.AADHAR.name -> KycItemType.AADHAR.ordinal KycItemType.CURRENT_ADDRESS.name -> KycItemType.CURRENT_ADDRESS.ordinal + KycItemType.TEXTFIELD.name -> KycItemType.TEXTFIELD.ordinal KycItemType.PAN.name -> KycItemType.PAN.ordinal KycItemType.VIDEO_KYC.name -> KycItemType.VIDEO_KYC.ordinal else -> -1 @@ -171,6 +185,20 @@ class KycItemsAdapter( } } + private fun setupTextFieldView(binding: ItemTextFieldViewBinding, position: Int) { + val testFieldKycOption = kycItemList[position] + binding.fathersNameStatusView.setProperties( + (position + 1).toString().plus(DOT), + testFieldKycOption.title + ?: run { binding.root.resources.getString(R.string.father_s_name) } + ) + binding.textFieldEt.hint = testFieldKycOption.subTitle + ?: run { binding.root.resources.getString(R.string.type_here) } + binding.textFieldEt.doAfterTextChanged { + viewModel.setTextFieldData(it?.trim()?.toString()) + } + } + private fun setupAadharView(binding: ItemAadharKycViewBinding, position: Int) { val aadharKycOption = kycItemList[position] binding.idProofStatusView.setProperties( @@ -342,6 +370,9 @@ class AadharKycOptionsViewHolder(val binding: ItemAadharKycViewBinding) : class AddressKycOptionsViewHolder(val binding: ItemAddressKycViewBinding) : KycOptionsBaseViewHolder(binding.root) +class TextFieldViewHolder(val binding: ItemTextFieldViewBinding) : + KycOptionsBaseViewHolder(binding.root) + class PanKycOptionsViewHolder(val binding: ItemPanKycViewBinding) : KycOptionsBaseViewHolder(binding.root) @@ -349,5 +380,5 @@ class VideoKycOptionsViewHolder(val binding: ItemVideoKycViewBinding) : KycOptionsBaseViewHolder(binding.root) enum class KycItemType { - SELFIE, AADHAR, CURRENT_ADDRESS, PAN, VIDEO_KYC + SELFIE, AADHAR, CURRENT_ADDRESS, PAN, VIDEO_KYC, TEXTFIELD } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt index 1c723000f6..575aec8a0d 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycFragment.kt @@ -43,8 +43,9 @@ import com.naviapp.manager.PermissionsManager.Companion.CAMERA_PERMISSION import com.naviapp.manager.PermissionsManager.Companion.STORAGE_PERMISSION import com.navi.common.model.CtaData import com.naviapp.models.FeedbackPageType +import com.naviapp.models.KycUiStatusValue import com.naviapp.models.RedirectPageStatus -import com.naviapp.models.UiStatusValue +import com.naviapp.models.request.KycRequest import com.naviapp.models.request.SelfieSetting import com.naviapp.models.request.SelfieUploadRequestData import com.naviapp.models.response.KycAaadharActionType @@ -69,10 +70,12 @@ import com.naviapp.personalloan.getloan.kyc.viewmodels.KycSharedVM import com.naviapp.personalloan.getloan.kyc.viewmodels.KycVM import com.naviapp.utils.* import com.naviapp.utils.Constants.PL_KYC_LOCATION +import kotlinx.android.synthetic.main.transaction_history_fragment.* import java.io.ByteArrayOutputStream import java.io.File import java.io.FileInputStream import java.util.* +import kotlin.collections.HashMap class KycFragment : BaseFragment(), FooterInteractionListener, KycItemsListener { @@ -103,7 +106,7 @@ class KycFragment : BaseFragment(), FooterInteractionListener, inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { binding = KycFragmentBinding.inflate(inflater, container, false) initError() initUi() @@ -170,6 +173,34 @@ class KycFragment : BaseFragment(), FooterInteractionListener, observeSupportedPANOvdsUploadAsyncResponse() observeVideoKycData() observeVideoKycUploadAsyncResponse() + observeTextFieldData() + observeTextFieldSubmitResponse() + } + + private fun observeFathersNameSubmitSuccess() { + viewModel.fathersNameSubmitSuccess.observeNonNull(this) { + onFooterNextPress(viewModel.kycDetailsLiveData.value?.footer?.nextCta) + } + } + + private fun observeTextFieldData() { + viewModel.textFieldData.observeNonNull(this) { + enableNextButton(it) + } + } + + private fun observeTextFieldSubmitResponse() { + viewModel.textFieldSubmitAsyncResponse.observeNonNull(this) { data -> + data.requestId?.let { requestId -> + firebaseRequestId = requestId + firebaseInit( + requestId, + UPDATE_KYC_DETAILS, + data.notificationPath.orEmpty() + ) + apiPollInit(requestId, UPDATE_KYC_DETAILS) + } + } } private fun observeVideoKycData() { @@ -297,12 +328,10 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } else { (binding.kycRecyclerView.adapter as? KycItemsAdapter)?.updateData(it) } - } - if (kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { + + if (!viewModel.isTextFieldPresent() && kycDetailsResponse.kycDetails?.kycDetailsComplete.orFalse()) { binding.footerView.enableNextButton(true) - } else { - binding.footerView.enableNextButton(false) } handleVideoKycDeeplink(kycDetailsResponse.kycDetails?.kycItemList) } @@ -670,7 +699,9 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } UPDATE_KYC_DETAILS -> { if (TextUtils.equals(status, SUCCESS)) { - viewModel.fetchKycDetails() + viewModel.setFathersNameSubmitSuccess(true) + hideLoader() + observeFathersNameSubmitSuccess() } } OVD_UPLOAD -> { @@ -854,15 +885,18 @@ class KycFragment : BaseFragment(), FooterInteractionListener, it?.let { kycInReviewResponse -> hideLoader() when (kycInReviewResponse.content?.kyc) { - UiStatusValue.COMPLETE -> { + KycUiStatusValue.COMPLETE.name -> { navigateToNextScreen() } - UiStatusValue.SOFT_REJECT -> { + KycUiStatusValue.SOFT_REJECT.name -> { gotoSoftReject() } - UiStatusValue.IN_REVIEW -> { + KycUiStatusValue.IN_REVIEW.name, KycUiStatusValue.OSV_VERIFICATION_IN_PROGRESS.name, KycUiStatusValue.OSV_OPS_VERIFICATION_PENDING.name -> { navigateToKycInReviewScreen() } + KycUiStatusValue.OSV_VERIFICATION.name -> { + navigateToKycPhysicalVerificationScreen() + } else -> { context?.toast(R.string.something_went_wrong) } @@ -871,6 +905,10 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } } + private fun navigateToKycPhysicalVerificationScreen() { + listener?.navigateTo(GetLoanActivity.ADDRESS_PHYSICAL_VERIFICATION) + } + private fun navigateToKycInReviewScreen() { listener?.navigateTo(GetLoanActivity.KYC_IN_REVIEW) } @@ -987,6 +1025,14 @@ class KycFragment : BaseFragment(), FooterInteractionListener, } ?: onPANDocumentCaptureError() } + private fun enableNextButton(textField: String) { + if (textField.isNotEmpty()) { + binding.footerView.enableNextButton(true) + } else { + binding.footerView.enableNextButton(false) + } + } + override fun onPause() { super.onPause() permissionDeniedFragment?.dismiss() @@ -1002,20 +1048,21 @@ class KycFragment : BaseFragment(), FooterInteractionListener, override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { locationUpdateListener?.updateLocation(PL_KYC_LOCATION) - var moveToAddressPage = true - viewModel.kycDetailsLiveData.value?.kycDetails?.kycItemList?.forEach { kycItem -> - if (kycItem.type == "CURRENT_ADDRESS" && viewModel.kycDetailsLiveData.value?.kycDetails?.kycDetailsComplete.orFalse()) { + if (viewModel.isTextFieldPresent() && viewModel.fathersNameSubmitSuccess.value != true) { + val hashMap = HashMap() + hashMap[viewModel.getJsonKey()] = viewModel.textFieldData.value.toString() + viewModel.updateKycDetails(KycRequest(null, hashMap)) + showLoader() + } else { + if (viewModel.isCurrentAddressFieldPresent()) { viewModel.fetchKycStatus() - moveToAddressPage = false - } - } - - if (moveToAddressPage) { - ctaData?.url?.let { - listener?.navigateTo( - it - ) + } else { + ctaData?.url?.let { + listener?.navigateTo( + it + ) + } } } } @@ -1031,7 +1078,8 @@ class KycFragment : BaseFragment(), FooterInteractionListener, const val VIDEO_KYC_REQUEST_CODE = 103 const val AADHAR_OTP_REQUEST_CODE = 104 const val COMPLETED = "COMPLETED" - private const val CORRESPONDENCE = "CORRESPONDENCE" + const val TEXTFIELD = "TEXTFIELD" + const val CURRENT_ADDRESS = "CURRENT_ADDRESS" private const val HYPERVERGE = "HYPERVERGE" private const val PROVIDER_MOCK = "MOCK" private const val VIDEO_KYC_WEB_VIEW_REQUEST_CODE = 11 diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycInReviewFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycInReviewFragment.kt index 3a5972a3af..0f71cfdb9a 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycInReviewFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycInReviewFragment.kt @@ -6,16 +6,23 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.core.content.ContextCompat import androidx.lifecycle.ViewModelProvider import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.fragment.BaseFragment +import com.naviapp.common.fragment.CommonBottomSheet +import com.naviapp.common.fragment.CommonDialogBox +import com.naviapp.common.listeners.BottomSheetListener import com.naviapp.dashboard.listeners.FragmentInteractionListener import com.naviapp.databinding.FragmentKycVerificationInProgressBinding import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener import com.navi.common.model.CtaData +import com.naviapp.models.KycUiStatusValue import com.naviapp.models.request.AddressProofRequest +import com.naviapp.models.response.GeneralGreetingResponse +import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.kyc.listeners.DocumentUploadListener import com.naviapp.personalloan.getloan.kyc.models.KycInReviewResponse import com.naviapp.personalloan.getloan.kyc.models.KycStatus @@ -23,8 +30,8 @@ import com.naviapp.personalloan.getloan.kyc.utils.getKycDocuments import com.naviapp.personalloan.getloan.kyc.viewmodels.KycInReviewVM import com.naviapp.utils.* -class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInteractionListener, - View.OnClickListener { +class KycInReviewFragment : BaseFragment(), DocumentUploadListener, FooterInteractionListener, + View.OnClickListener, BottomSheetListener { private lateinit var binding: FragmentKycVerificationInProgressBinding private var documentType: String? = null private val viewModel by lazy { ViewModelProvider(this).get(KycInReviewVM::class.java) } @@ -39,14 +46,14 @@ class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInte inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { binding = FragmentKycVerificationInProgressBinding.inflate(inflater, container, false) initUi() initError(viewModel) initWarning(viewModel) initObservers() initListeners() - initData() + fetchKycStatus() return binding.root } @@ -111,7 +118,7 @@ class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInte binding.noteViewUploadDocumentTv.setOnClickListener(this) } - private fun initData() { + private fun fetchKycStatus() { showLoader() viewModel.fetchKycStatus() } @@ -119,6 +126,62 @@ class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInte private fun initObservers() { observeKycInReviewResponse() observeUploadAddressProofData() + observeOsvDataResponse() + } + + private fun observeOsvDataResponse() { + viewModel.osvData.observeNullable(viewLifecycleOwner) { osvResponse -> + hideLoader() + osvResponse?.greetingDialog?.let { + displayGreetingDialog(it) + } + osvResponse?.osvData?.let { osvData -> + osvData.iconCode?.let { IconUtils.updateIcon(it, binding.kycIv) } + binding.titleTv.text = osvData.title + binding.descriptionTv.text = osvData.description + osvData.action?.let { cta -> + binding.actionButton.visibility = View.VISIBLE + cta.title?.let { title -> binding.actionButton.setProperties(title) } + cta.url?.let { url -> + binding.actionButton.setOnClickListener { + listener?.navigateTo(url) + } + } + } ?: run { + binding.actionButton.visibility = View.GONE + } + binding.bookedSlotTv.text = osvData.bookedSlot + if (osvData.isSlotEditable.orFalse()) { + binding.bookedSlotTv.setCompoundDrawablesWithIntrinsicBounds( + null, + null, + context?.let { ContextCompat.getDrawable(it, R.drawable.ic_edit_red_svg) }, + null + ) + binding.bookedSlotTv.compoundDrawablePadding = + resources.getDimension(R.dimen.layout_dp_4).toInt() + binding.bookedSlotTv.setOnClickListener { + val commonBottomSheet = CommonBottomSheet.newInstance( + screenName = NaviAnalytics.OSV_SLOT_CHANGE_BOTTOM_SHEET, + title = resources.getString(R.string.slot_change_title), + description = resources.getString(R.string.slot_change_desc), + ctaData = CtaData(title = resources.getString(R.string.change_slot)), + ctaDataOptional = CtaData(title = resources.getString(R.string.go_back)) + ) + commonBottomSheet.setListener(this) + safelyShowBottomSheet(commonBottomSheet, CommonBottomSheet.TAG) + } + } else { + binding.bookedSlotTv.setCompoundDrawablesWithIntrinsicBounds( + null, + null, + null, + null + ) + binding.bookedSlotTv.setOnClickListener(null) + } + } + } } private fun observeUploadAddressProofData() { @@ -135,12 +198,28 @@ class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInte } private fun observeKycInReviewResponse() { - viewModel.kycStatus.observeNullable(this) { KycInReviewResponse -> - hideLoader() - changeUI(KycInReviewResponse) + viewModel.kycStatus.observeNullable(this) { kycInReviewResponse -> + if ((kycInReviewResponse?.content?.kyc == KycUiStatusValue.OSV_VERIFICATION_IN_PROGRESS.name) + || (kycInReviewResponse?.content?.kyc == KycUiStatusValue.OSV_OPS_VERIFICATION_PENDING.name) + ) { + viewModel.fetchOsvData() + } else hideLoader() + changeUI(kycInReviewResponse) } } + + private fun displayGreetingDialog(generalGreetingResponse: GeneralGreetingResponse) { + val commonDialogBox = CommonDialogBox.newInstance( + screenName = NaviAnalytics.OSV_SLOT_BOOKED_DIALOG, + title = generalGreetingResponse.title, + description = generalGreetingResponse.subTitle, + ctaData = generalGreetingResponse.ctaList?.getOrNull(0), + lottieAnimationFile = "success.json" + ) + safelyShowDialogBox(commonDialogBox, CommonDialogBox.TAG) + } + private fun changeUI(kycInReviewResponse: KycInReviewResponse?) { binding.footerView.enableNextButton(false) headerInteractionListener?.setProperties( @@ -158,12 +237,16 @@ class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInte val kycVerificationType = kycInReviewResponse?.content?.verificationType ?: KycVerificationType.TELE_VERIFICATION.name - when (kycVerificationType) { - KycVerificationType.TELE_VERIFICATION.name -> { - binding.descriptionTv.text = resources.getString(R.string.kyc_verification_on_call) - } - KycVerificationType.PHYSICAL_VERIFICATION.name -> { - binding.descriptionTv.text = resources.getString(R.string.kyc_verification_physical) + if (kycInReviewResponse?.content?.kyc != KycUiStatusValue.OSV_VERIFICATION_IN_PROGRESS.name) { + when (kycVerificationType) { + KycVerificationType.TELE_VERIFICATION.name -> { + binding.descriptionTv.text = + resources.getString(R.string.kyc_verification_on_call) + } + KycVerificationType.PHYSICAL_VERIFICATION.name -> { + binding.descriptionTv.text = + resources.getString(R.string.kyc_verification_physical) + } } } kycInReviewResponse?.content?.customerCareNumber?.let { customerCareNumber -> @@ -235,6 +318,16 @@ class KycInProgressFragment : BaseFragment(), DocumentUploadListener, FooterInte R.id.note_view_edit_document_tv -> openDocumentUploadScreen() } } + + override fun primaryButtonClick() { + listener?.navigateTo( + GetLoanActivity.ADDRESS_PHYSICAL_VERIFICATION + ) + } + + override fun secondaryButtonClick() { + // do nothing + } } enum class KycVerificationType { diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycPhysicalAddressVerificationFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycPhysicalAddressVerificationFragment.kt new file mode 100644 index 0000000000..90809a5c85 --- /dev/null +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/fragments/KycPhysicalAddressVerificationFragment.kt @@ -0,0 +1,115 @@ +package com.naviapp.personalloan.getloan.kyc.fragments + +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.lifecycle.ViewModelProvider +import com.navi.common.model.CtaData +import com.naviapp.analytics.utils.NaviAnalytics +import com.naviapp.common.fragment.BaseFragment +import com.naviapp.dashboard.listeners.FragmentInteractionListener +import com.naviapp.databinding.FragmentKycPhysicalAddressVerificationBinding +import com.naviapp.homeloan.common.listener.FooterInteractionListener +import com.naviapp.homeloan.common.listener.HeaderInteractionListener +import com.naviapp.models.request.OsvSlotRequest +import com.naviapp.personalloan.getloan.kyc.viewmodels.KycPhysicalAddressVerificationViewModel +import com.naviapp.utils.observeNonNull +import com.naviapp.utils.observeNullable +import com.naviapp.utils.orFalse +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class KycPhysicalAddressVerificationFragment : BaseFragment(), FooterInteractionListener { + private lateinit var binding: FragmentKycPhysicalAddressVerificationBinding + private var fragmentInteractionListener: FragmentInteractionListener? = null + private val viewModel by lazy { + ViewModelProvider(this).get( + KycPhysicalAddressVerificationViewModel::class.java + ) + } + + override fun onAttach(context: Context) { + super.onAttach(context) + fragmentInteractionListener = context as? FragmentInteractionListener + headerInteractionListener = context as? HeaderInteractionListener + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentKycPhysicalAddressVerificationBinding.inflate(inflater, container, false) + initError(viewModel) + initWarning(viewModel) + initUi() + initObservers() + fetchPhysicalAddressVerificationData() + return binding.root + } + + private fun initUi() { + binding.footerInteractionListener = this + binding.footerView.enableNextButton(false) + } + + private fun fetchPhysicalAddressVerificationData() { + showLoader() + viewModel.fetchPhysicalAddressVerificationData() + } + + private fun initObservers() { + viewModel.physicalAddressVerificationData.observeNullable(viewLifecycleOwner) { response -> + hideLoader() + response?.let { + binding.response = it + headerInteractionListener?.setProperties( + it.header?.title, + it.header?.subtitle, + it.header?.progress + ) + } + } + binding.dateRv.selectedLabelLiveData.observeNonNull(viewLifecycleOwner) { + if (binding.timingRv.selectedLabelLiveData.value != null) binding.footerView.enableNextButton( + true + ) + } + binding.timingRv.selectedLabelLiveData.observeNonNull(viewLifecycleOwner) { + if (binding.dateRv.selectedLabelLiveData.value != null) binding.footerView.enableNextButton( + true + ) + } + viewModel.saveOsvSlot.observeNullable(viewLifecycleOwner) { + hideLoader() + if (it.orFalse()) viewModel.physicalAddressVerificationData.value?.footer?.nextCta?.url?.let { it1 -> + fragmentInteractionListener?.navigateTo( + it1 + ) + } + } + } + + override val screenName: String + get() = NaviAnalytics.KYC_PHYSICAL_ADDR_VERIFICATION_SCREEN + + override fun onFooterBackPress(ctaData: CtaData?) { + ctaData?.url?.let { fragmentInteractionListener?.navigateTo(it) } + } + + override fun onFooterNextPress(ctaData: CtaData?, skipValidation: Boolean?) { + showLoader() + viewModel.saveOsvSlot( + OsvSlotRequest( + bookedDate = binding.dateRv.selectedLabelLiveData.value?.id, + bookedTime = binding.timingRv.selectedLabelLiveData.value?.id + ) + ) + } + + companion object { + const val TAG = "PHYSICAL_ADDRESS_VERIFICATION_FRAGMENT" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycInReviewRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycInReviewRepository.kt index c6fabd91ad..7cc0446f0d 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycInReviewRepository.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycInReviewRepository.kt @@ -3,14 +3,15 @@ package com.naviapp.personalloan.getloan.kyc.repositories import com.naviapp.models.request.AddressProofRequest import com.naviapp.network.retrofit.ResponseCallback import com.naviapp.utils.retrofitService -import retrofit2.http.Body class KycInReviewRepository : ResponseCallback() { - suspend fun submitAddressProof(@Body kycRequest: AddressProofRequest) = + suspend fun submitAddressProof(kycRequest: AddressProofRequest) = apiResponseCallback(retrofitService().submitAddressProof(kycRequest)) suspend fun fetchKycStatus() = apiResponseCallback(retrofitService().fetchKycStatus()) + suspend fun fetchOsvData() = + apiResponseCallback(retrofitService().fetchOsvData()) } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycPhysicalAddressVerificationRepository.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycPhysicalAddressVerificationRepository.kt new file mode 100644 index 0000000000..2efcaab934 --- /dev/null +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/repositories/KycPhysicalAddressVerificationRepository.kt @@ -0,0 +1,17 @@ +package com.naviapp.personalloan.getloan.kyc.repositories + +import com.naviapp.models.request.OsvSlotRequest +import com.naviapp.network.retrofit.ResponseCallback +import com.naviapp.network.retrofit.RetrofitService +import com.naviapp.utils.retrofitService +import javax.inject.Inject + +class KycPhysicalAddressVerificationRepository @Inject constructor(private val retrofitService: RetrofitService) : + ResponseCallback() { + + suspend fun fetchPhysicalAddressVerificationData() = + apiResponseCallback(retrofitService.fetchPhysicalAddressVerificationData()) + + suspend fun saveOsvSlot(osvSlotRequest: OsvSlotRequest) = + apiResponseCallback(retrofitService().saveOsvSlot(osvSlotRequest)) +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycInReviewVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycInReviewVM.kt index 0b461cea76..eb5c961d7b 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycInReviewVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycInReviewVM.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.naviapp.common.viewmodel.BaseVM import com.naviapp.models.request.AddressProofRequest +import com.naviapp.models.response.OsvResponse import com.naviapp.network.ApiErrorTagType import com.naviapp.personalloan.getloan.kyc.models.KycInReviewResponse import com.naviapp.personalloan.getloan.kyc.repositories.KycInReviewRepository @@ -20,6 +21,10 @@ class KycInReviewVM(private val repository: KycInReviewRepository = KycInReviewR val kycStatus: LiveData get() = _kycStatus + private val _osvData = MutableLiveData() + val osvData: LiveData + get() = _osvData + fun submitAddressProof(kycRequest: AddressProofRequest) { coroutineScope.launch { val response = repository.submitAddressProof(kycRequest) @@ -41,7 +46,18 @@ class KycInReviewVM(private val repository: KycInReviewRepository = KycInReviewR if (response.error == null && response.errors.isNullOrEmpty()) { _kycStatus.value = response.data } else { - setErrorData(response.errors) + setErrorData(response.errors, response.error) + } + } + } + + fun fetchOsvData() { + coroutineScope.launch { + val response = repository.fetchOsvData() + if (response.error == null && response.errors.isNullOrEmpty()) { + _osvData.value = response.data + } else { + setErrorData(response.errors, response.error) } } } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycPhysicalAddressVerificationViewModel.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycPhysicalAddressVerificationViewModel.kt new file mode 100644 index 0000000000..75d4894a2e --- /dev/null +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycPhysicalAddressVerificationViewModel.kt @@ -0,0 +1,51 @@ +package com.naviapp.personalloan.getloan.kyc.viewmodels + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.naviapp.common.viewmodel.BaseVM +import com.naviapp.models.request.OsvSlotRequest +import com.naviapp.models.response.KycPhysicalAddressVerificationResponse +import com.naviapp.personalloan.getloan.kyc.repositories.KycPhysicalAddressVerificationRepository +import com.naviapp.utils.orFalse +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class KycPhysicalAddressVerificationViewModel @Inject constructor(private val repository: KycPhysicalAddressVerificationRepository) : + BaseVM() { + + private val _physicalAddressVerificationData = + MutableLiveData() + val physicalAddressVerificationData: LiveData + get() = _physicalAddressVerificationData + + private val _saveOsvSlot = MutableLiveData() + val saveOsvSlot: LiveData + get() = _saveOsvSlot + + fun fetchPhysicalAddressVerificationData() { + coroutineScope.launch { + val response = repository.fetchPhysicalAddressVerificationData() + if (response.error == null && response.errors.isNullOrEmpty()) { + _physicalAddressVerificationData.value = response.data + } else { + setErrorData( + response.errors, + response.error + ) + } + } + } + + fun saveOsvSlot(osvSlotRequest: OsvSlotRequest) { + coroutineScope.launch { + val response = repository.saveOsvSlot(osvSlotRequest) + if (response.error == null && response.errors.isNullOrEmpty()) { + _saveOsvSlot.value = response.data?.success.orFalse() + } else { + setErrorData(response.errors, response.error) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt index 238cf67bfe..0a1d5d45ce 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/kyc/viewmodels/KycVM.kt @@ -21,8 +21,8 @@ import com.naviapp.network.models.GenericErrorResponse import com.naviapp.payment.models.ProviderType import com.naviapp.personalloan.getloan.common.view.KycPanView import com.naviapp.personalloan.getloan.common.view.StatusIndicatorView -import com.naviapp.personalloan.getloan.kyc.adapter.KycItemType import com.naviapp.personalloan.getloan.kyc.adapter.KycItemsAdapter +import com.naviapp.personalloan.getloan.kyc.fragments.KycFragment import com.naviapp.personalloan.getloan.kyc.models.AadhaarDetailsResponse import com.naviapp.personalloan.getloan.kyc.models.AadhaarVerificationData import com.naviapp.personalloan.getloan.kyc.models.KycInReviewResponse @@ -121,6 +121,18 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() val videoKycAsyncResponse: LiveData get() = _videoKycAsyncResponse + private val _textFieldData = MutableLiveData() + val textFieldData: LiveData + get() = _textFieldData + + private val _textFieldSubmitAsyncResponse = MutableLiveData() + val textFieldSubmitAsyncResponse: LiveData + get() = _textFieldSubmitAsyncResponse + + private val _fathersNameSubmitSuccess = MutableLiveData() + val fathersNameSubmitSuccess: LiveData + get() = _fathersNameSubmitSuccess + fun submitSelfie(bytes: ByteArray, requestData: SelfieUploadRequestData? = null) { var requestBody: RequestBody? = null convertObjectToJsonString(requestData)?.let { @@ -160,6 +172,21 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() } } + fun updateKycDetails(kycRequest: KycRequest) { + coroutineScope.launch { + val response = repository.updateKycDetails(kycRequest) + if (response.error == null && response.errors.isNullOrEmpty()) { + _textFieldSubmitAsyncResponse.value = response.data + } else { + setErrorData( + response.errors, + response.error, + ApiErrorTagType.SUBMIT_KYC_API_ERROR + ) + } + } + } + fun checkApiPollStatus(requestId: String, type: String) { coroutineScope.launch { val response = repository.fetchAsyncRequestData(requestId) @@ -343,6 +370,12 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() _panAadharOvdStatus.value = status } + fun setTextFieldData(name: String?) { + name?.let { + _textFieldData.value = name + } + } + fun isKycItemNotCompleted(type: String, kycItemList: List?): Boolean { kycItemList?.forEach { kycItem -> if (kycItem.type == type && kycItem.status != KycItemsAdapter.COMPLETED) { @@ -352,6 +385,41 @@ class KycVM(private val repository: KycRepository = KycRepository()) : BaseVM() return false } + fun getJsonKey(): String { + if (isTextFieldPresent()) { + _kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == KycFragment.TEXTFIELD) { + return kycItem.jsonKey.toString() + } + } + } + return Constants.EMPTY + } + + fun isCurrentAddressFieldPresent(): Boolean { + var isCurrentAddressFieldPresent = false + _kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == KycFragment.CURRENT_ADDRESS) { + isCurrentAddressFieldPresent = true + } + } + return isCurrentAddressFieldPresent + } + + fun isTextFieldPresent(): Boolean { + var isTextFieldPresent = false + _kycDetails.value?.kycDetails?.kycItemList?.forEach { kycItem -> + if (kycItem.type == KycFragment.TEXTFIELD) { + isTextFieldPresent = true + } + } + return isTextFieldPresent + } + + fun setFathersNameSubmitSuccess(fathersNameSubmitSuccess: Boolean) { + _fathersNameSubmitSuccess.value = fathersNameSubmitSuccess + } + companion object { private const val KYC = "kyc" private const val KYC_FILE_NAME = "kyc.jpg" diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt index e3f19796d3..8df0b64b89 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/viewmodels/LoanDetailsVM.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.navi.common.model.CtaData import com.naviapp.common.viewmodel.BaseVM +import com.naviapp.firebasedb.FirebaseStatusType import com.naviapp.firebasedb.LOAN_APPLY import com.naviapp.firebasedb.OFFER_GENERATE import com.naviapp.firebasedb.PRE_ELIGIBILITY @@ -13,6 +14,7 @@ import com.naviapp.models.request.LoanFeeDetailsRequest import com.naviapp.models.request.LoanRequest import com.naviapp.models.request.MoratoriumRequest import com.naviapp.models.response.* +import com.naviapp.network.ApiErrorTagType.INVALID_PAN_DETAILS import com.naviapp.network.models.GenericErrorResponse import com.naviapp.personalloan.getloan.loandetails.repositories.LoanDetailsRepository import com.navi.common.sharedpref.PreferenceManager @@ -113,6 +115,12 @@ class LoanDetailsVM(private val repository: LoanDetailsRepository = LoanDetailsR val loanDetailsResponse: LiveData get() = _loanDetailsResponse + private var panFailedFromCibilRedirectUrl: String? = null + + private val _generateOfferFailed = MutableLiveData() + val generateOfferFailed: LiveData + get() = _generateOfferFailed + fun fetchLoanProducts() { coroutineScope.launch { val response = repository.fetchLoanProduct() @@ -276,10 +284,29 @@ class LoanDetailsVM(private val repository: LoanDetailsRepository = LoanDetailsR fun fetchLoanRejectionData(requestId: String) { coroutineScope.launch { val response = repository.fetchOfferRejectionData(requestId) - if (response.error == null) { + var errorTag: String? = null + response.errors?.forEach { genericError -> + when (genericError.code) { + INVALID_PAN_DETAILS -> { + _generateOfferFailed.value = FirebaseStatusType.FAILURE + panFailedFromCibilRedirectUrl = genericError.actions?.get(0)?.subPage + errorTag = genericError.code + } + } + } + if (response.error == null && errorTag.isNullOrEmpty()) { _generateOfferError.value = response.errors?.firstOrNull() } else { - updateErrorMessage(response.error) + if (errorTag.isNullOrEmpty()) { + updateErrorMessage(response.error) + } else { + setErrorData( + errors = response.errors, + error = response.error, + tag = errorTag, + cancelable = errorTag == null + ) + } } } } @@ -358,4 +385,6 @@ class LoanDetailsVM(private val repository: LoanDetailsRepository = LoanDetailsR } } } + + fun getPanFailedRedirectUrl() = panFailedFromCibilRedirectUrl } diff --git a/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt b/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt index f4b92b462f..8ff99c1c91 100644 --- a/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt +++ b/app/src/main/java/com/naviapp/personalloan/useridentification/activities/LoanEligibilityLoaderActivity.kt @@ -6,6 +6,7 @@ import android.text.TextUtils import android.view.View import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider +import com.navi.common.model.CtaData import com.naviapp.R import com.naviapp.analytics.neoeyed.viewmodel.NeoEyedVM import com.naviapp.analytics.utils.NaviAnalytics @@ -25,6 +26,7 @@ import com.naviapp.firebasedb.FirebaseStatusType.FAILURE import com.naviapp.firebasedb.FirebaseStatusType.SUCCESS import com.naviapp.manager.viewmodel.UserDataViewModel import com.naviapp.models.RedirectPageStatus +import com.naviapp.network.ApiErrorTagType import com.naviapp.permission.viewmodel.PermissionViewModel import com.naviapp.personalloan.getloan.activities.GetLoanActivity import com.naviapp.personalloan.getloan.loandetails.viewmodels.LoanDetailsVM @@ -56,7 +58,7 @@ class LoanEligibilityLoaderActivity : BaseActivity(), super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.loan_eligibility_loader_activity) super.setContentView(binding.root) - initError(loanDetailsVM) + initError() binding.loader.setProgressCompletedListener(this) sendUserData() sendNeoEyedData() @@ -65,6 +67,17 @@ class LoanEligibilityLoaderActivity : BaseActivity(), initAnimation() } + private fun initError() { + initError( + viewModel = loanDetailsVM, + actions = listOf( + Pair( + handlePanDetailsFailedFromCibil, ApiErrorTagType.INVALID_PAN_DETAILS + ) + ) + ) + } + private fun sendUserData() { userDataViewModel.sendUserData() } @@ -121,6 +134,10 @@ class LoanEligibilityLoaderActivity : BaseActivity(), loanDetailsVM.statusGenerateOffer.observeNullable(this) { it?.let { fetchOfferIdAndStopApiPoll(it) } } + loanDetailsVM.generateOfferFailed.observeNonNull(this) { + binding.loader.pause() + statusHandling(it) + } loanDetailsVM.offerIdResponse.observeNonNull(this) { offerIdResponse -> if (offerIdResponse.details?.inReview.orFalse()) { @@ -409,6 +426,16 @@ class LoanEligibilityLoaderActivity : BaseActivity(), } } + private val handlePanDetailsFailedFromCibil: View.OnClickListener = View.OnClickListener { + loanDetailsVM.getPanFailedRedirectUrl()?.let { url -> + NaviDeepLinkNavigator.navigate( + activity = this, + ctaData = CtaData(url = url), + finish = true + ) + } + } + override val screenName: String get() = LOAN_ELIGIBILITIY_LOADER diff --git a/app/src/main/java/com/naviapp/personalloan/useridentification/employmentverification/fragment/EmploymentVerificationFragment.kt b/app/src/main/java/com/naviapp/personalloan/useridentification/employmentverification/fragment/EmploymentVerificationFragment.kt index fdb91040ab..075bb1d417 100644 --- a/app/src/main/java/com/naviapp/personalloan/useridentification/employmentverification/fragment/EmploymentVerificationFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/useridentification/employmentverification/fragment/EmploymentVerificationFragment.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import com.navi.common.model.CtaData import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.common.adapter.IconTextAdapter @@ -18,19 +19,14 @@ import com.naviapp.common.decorator.TopMarginItemDecoration import com.naviapp.common.fragment.BaseFragment import com.naviapp.common.fragment.OtpBottomSheet import com.naviapp.common.fragment.SearchFragment -import com.naviapp.common.fragment.TimeoutBottomSheet -import com.naviapp.common.fragment.TimeoutBottomSheet.Companion.SCREEN_TIMEOUT_SEC import com.naviapp.common.viewmodel.OtpSharedViewModel import com.naviapp.common.viewmodel.SearchViewModel import com.naviapp.dashboard.listeners.FragmentInterchangeListener import com.naviapp.databinding.EmploymentVerificationFragmentBinding -import com.naviapp.errors.utils.getApiTimeoutData import com.naviapp.homeloan.common.listener.FooterInteractionListener import com.naviapp.homeloan.common.listener.HeaderInteractionListener -import com.navi.common.model.CtaData import com.naviapp.models.response.EPFODetails import com.naviapp.models.response.SendDisbursementOtpResponse -import com.naviapp.network.ApiConstants.API_CONNECT_TIMEOUT_VALUE_120 import com.naviapp.network.ApiErrorTagType import com.naviapp.personalloan.useridentification.employmentverification.viewmodel.EmploymentVerificationVM import com.naviapp.utils.* @@ -188,25 +184,6 @@ class EmploymentVerificationFragment : BaseFragment(), View.OnClickListener, ) } } - otpSharedViewModel?.apiTimeout?.observeNonNull(this) { - it?.let { - hideLoader() - if (it) { - viewModel.setWarning(getApiTimeoutData(), ApiErrorTagType.EPFO) - } else { - naviAnalyticsEventTracker.onLoaderShown() - val bundle = Bundle() - bundle.putLong( - SCREEN_TIMEOUT_SEC, - viewModel.employmentVerificationResponse.value?.content?.otpVerificationTimeoutInSec.orValue( - API_CONNECT_TIMEOUT_VALUE_120 - ) - ) - val bottomSheet = TimeoutBottomSheet.newInstance(bundle) - safelyShowBottomSheet(bottomSheet, TimeoutBottomSheet.TAG) - } - } - } } private fun handleDisbursementOtpResponse(sendDisbursementOtpResponse: SendDisbursementOtpResponse?) { diff --git a/app/src/main/java/com/naviapp/personalloan/useridentification/pan/fragments/PanFragment.kt b/app/src/main/java/com/naviapp/personalloan/useridentification/pan/fragments/PanFragment.kt index 80d1d80700..5e5b744cdb 100644 --- a/app/src/main/java/com/naviapp/personalloan/useridentification/pan/fragments/PanFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/useridentification/pan/fragments/PanFragment.kt @@ -89,29 +89,34 @@ class PanFragment : BaseFragment(), FooterInteractionListener, DobEditText.DOBLi } private fun initObservers() { - viewModel.panDataResponse.observeNonNull(this) { data -> + viewModel.panDataResponse.observeNullable(this) { hideLoader() - if (data.content?.isPinCodeEnabled.orTrue().not()) { - binding.pincodeLayout.root.visibility = View.GONE - } - data.content?.panNumber?.let { populateData(data.content) } - data.footer?.nextCta?.let { ctaData -> - binding.footerView.visibility = View.VISIBLE - binding.footerView.setProperties( - data.footer.backCta, - ctaData, - this, - nextButtonIconId = null + it?.let { data -> + if (data.content?.isPinCodeEnabled.orTrue().not()) { + binding.pincodeLayout.root.visibility = View.GONE + } + if(data.content?.dateOfBirth.isNullOrBlank().not()){ + binding.dobLayout.dobEt.setText(data.content?.dateOfBirth.orEmpty()) + } + data.content?.panNumber?.let { populateData(data.content) } + data.footer?.nextCta?.let { ctaData -> + binding.footerView.visibility = View.VISIBLE + binding.footerView.setProperties( + data.footer.backCta, + ctaData, + this, + nextButtonIconId = null + ) + } + if (data.header?.progress == null) { + headerInteractionListener?.hideHeaderProgress() + } + headerInteractionListener?.setProperties( + data.header?.title, + data.header?.subtitle, + data.header?.progress ) } - if (data.header?.progress == null) { - headerInteractionListener?.hideHeaderProgress() - } - headerInteractionListener?.setProperties( - data.header?.title, - data.header?.subtitle, - data.header?.progress - ) } viewModel.uiStatusData.observeNonNull(this) { hideLoader() diff --git a/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt b/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt index 6fd996a895..c8f756239a 100644 --- a/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt +++ b/app/src/main/java/com/naviapp/utils/BindingAdapterUtil.kt @@ -8,7 +8,10 @@ import android.graphics.Color import android.view.View import android.widget.AdapterView import android.widget.ImageView +import android.widget.RadioButton import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.widget.TextViewCompat import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.RecyclerView import com.navi.common.model.CtaData @@ -247,7 +250,7 @@ object BindingAdapterUtil { iconCode?.let { imageView.visibility = View.VISIBLE IconUtils.updateIcon(it, imageView) - } + } ?: run { imageView.visibility = View.GONE } } @BindingAdapter("populateLineItems") @@ -282,7 +285,7 @@ object BindingAdapterUtil { ) { greetingCardData?.let { greetingCardView.visibility = View.VISIBLE - greetingCardView.setProperties(it.title, it.iconCode, CtaData(url = "HOME")) + greetingCardView.setProperties(it.title, it.iconCode) } ?: run { greetingCardView.visibility = View.GONE } } @@ -443,4 +446,61 @@ object BindingAdapterUtil { } } } + + @BindingAdapter("setDataToHorizontalLabelRecyclerView") + @JvmStatic + fun setDataToHorizontalLabelRecyclerView( + horizontalLabelRecyclerView: HorizontalLabelRecyclerView, + labelViewResponseList: List? + ) { + if (labelViewResponseList.isNullOrEmpty()) return + horizontalLabelRecyclerView.setProperties(labelViewResponseList) + } + + + @BindingAdapter("setNoteText") + @JvmStatic + fun setNoteText( + noteView: NoteView, + text: String? + ) { + text?.let { noteView.setProperties(it) } + } + + @BindingAdapter("setRadioDataList") + @JvmStatic + fun setRadioDataList( + radioRecyclerView: RadioRecyclerView, + radioButtonList: List? + ) { + if (radioButtonList.isNullOrEmpty()) return + radioRecyclerView.setProperties( + radioButtonList, + gap = radioRecyclerView.resources.getDimension(R.dimen.layout_dp_20) + ) + } + + @BindingAdapter("setStyleToTextView") + @JvmStatic + fun setStyleToTextView( + textView: TextView, + styleId: Int? + ) { + styleId?.let { + TextViewCompat.setTextAppearance(textView, it) + } + } + + @BindingAdapter("setColorStateListToRadioText") + @JvmStatic + fun setColorStateListToRadioText( + radioButton: RadioButton, + colorStateList: Int? + ) { + colorStateList?.let { + radioButton.setTextColor(ContextCompat.getColorStateList(radioButton.context, it)) + } + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/utils/Constants.kt b/app/src/main/java/com/naviapp/utils/Constants.kt index 3238af7886..6d34a7b567 100644 --- a/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/app/src/main/java/com/naviapp/utils/Constants.kt @@ -59,6 +59,9 @@ object Constants { const val HL_MAX_AGE = 55 const val PL_MIN_AGE = 21 const val PL_MAX_AGE = 60 + const val HOUSE_NUMBER_MIN_SIZE = 1 + const val STREET_MIN_SIZE = 5 + const val LOCALITY_MIN_SIZE = 5 const val TYPE_HOME_LOAN = "HOME_LOAN" const val TRUE = "true" const val YES = "Yes" @@ -128,4 +131,6 @@ object Constants { const val AMC = "amc" const val LEGAL_DOC_TYPE_TNC = "tnc" const val LEGAL_DOC_TYPE_PRIVACY_POLICY = "privacy-policy" + const val CURRENT_ADDRESS ="CURRENT_ADDRESS" + const val MANDATE_TYPE = "MANDATE_TYPE" } \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/utils/Ext.kt b/app/src/main/java/com/naviapp/utils/Ext.kt index c3fe5db863..39e3d22e26 100644 --- a/app/src/main/java/com/naviapp/utils/Ext.kt +++ b/app/src/main/java/com/naviapp/utils/Ext.kt @@ -28,7 +28,6 @@ import com.naviapp.app.NaviApplication import com.naviapp.common.customview.CustomTypefaceSpan import com.naviapp.models.Money import com.naviapp.models.response.StyledTextWithIconCode -import com.naviapp.network.retrofit.LongRunningRetrofitProvider import com.naviapp.network.retrofit.RetrofitProvider import com.naviapp.network.retrofit.RetrofitService import com.naviapp.superapp.NaviSuperAppRetrofitProvider @@ -75,11 +74,6 @@ fun superAppRetrofitService(): RetrofitService { return NaviSuperAppRetrofitProvider.instance.services } -//TOTO we will remove this service in next release and make EPFO otp verify api async call -fun longRunningRetrofitService(): RetrofitService { - return LongRunningRetrofitProvider.instance.services -} - fun Boolean?.orFalse() = this ?: false fun Boolean?.orTrue() = this ?: true @@ -209,12 +203,20 @@ fun TextView.underline(text: String) { } } -fun TextView.makePartOfTextBold(text: String, boldTexts: List) { +fun String.appendStrings(vararg string: String): String { + var result = this + for (item in string) { + result = result.plus(item) + } + return result +} + +fun TextView.makePartOfTextBold(text: String, boldTexts: List?) { try { val naviBold = ResourcesCompat.getFont(this.context, R.font.navi_bold) naviBold?.let { naviBoldTypeFace -> val content = SpannableString(text) - boldTexts.forEach { boldText -> + boldTexts?.forEach { boldText -> val naviBoldSpan = CustomTypefaceSpan(naviBoldTypeFace) val startIndex = text.indexOf(boldText) content.setSpan( diff --git a/app/src/main/java/com/naviapp/utils/IconUtils.kt b/app/src/main/java/com/naviapp/utils/IconUtils.kt index 0115d30d5f..dbbcc2c62e 100644 --- a/app/src/main/java/com/naviapp/utils/IconUtils.kt +++ b/app/src/main/java/com/naviapp/utils/IconUtils.kt @@ -57,6 +57,10 @@ object IconUtils { private const val BUY_ORDER_ICON = "BUY_ORDER_ICON" private const val SELL_ORDER_ICON = "SELL_ORDER_ICON" private const val INVESTMENT_ICON = "INVESTMENT_ICON" + private const val KYC_IN_PROGRESS_ICON = "KYC_IN_PROGRESS_ICON" + private const val VERIFICATION_ERROR_ICON = "VERIFICATION_ERROR_ICON" + private const val LIGHTNING_RECOMMENDED = "LIGHTNING_RECOMMENDED" + private const val LIGHTNING = "LIGHTNING" const val FORM_RELATION = "FORM_RELATION" const val FORM_EMPLOYMENT_TYPE = "FORM_EMPLOYMENT_TYPE" const val FORM_SERVICE_TYPE = "FORM_SERVICE_TYPE" @@ -177,6 +181,10 @@ object IconUtils { BUY_ORDER_ICON -> R.drawable.ic_buy_order SELL_ORDER_ICON -> R.drawable.ic_sell_order INVESTMENT_ICON -> R.drawable.ic_investment + KYC_IN_PROGRESS_ICON -> R.drawable.ic_kyc_in_progress + VERIFICATION_ERROR_ICON -> R.drawable.ic_verification_fail + LIGHTNING_RECOMMENDED -> R.drawable.ic_recommended_lightning + LIGHTNING -> R.drawable.ic_lightning else -> -1 } } diff --git a/app/src/main/res/color/selector_black_white.xml b/app/src/main/res/color/selector_black_white.xml new file mode 100644 index 0000000000..2ddad09891 --- /dev/null +++ b/app/src/main/res/color/selector_black_white.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_label_view.xml b/app/src/main/res/drawable/bg_label_view.xml new file mode 100644 index 0000000000..5bbbd1120d --- /dev/null +++ b/app/src/main/res/drawable/bg_label_view.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_rounded_rect_deepbluegray_4.xml b/app/src/main/res/drawable/bg_rounded_rect_deepbluegray_4.xml new file mode 100644 index 0000000000..29ca0618f0 --- /dev/null +++ b/app/src/main/res/drawable/bg_rounded_rect_deepbluegray_4.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_rounded_rect_gray_4.xml b/app/src/main/res/drawable/bg_rounded_rect_gray_4.xml new file mode 100644 index 0000000000..a530296ba6 --- /dev/null +++ b/app/src/main/res/drawable/bg_rounded_rect_gray_4.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bank_verified.xml b/app/src/main/res/drawable/ic_bank_verified.xml new file mode 100644 index 0000000000..71057a6445 --- /dev/null +++ b/app/src/main/res/drawable/ic_bank_verified.xml @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_green_tick_circle_16.xml b/app/src/main/res/drawable/ic_green_tick_circle_16.xml new file mode 100644 index 0000000000..418d28b15c --- /dev/null +++ b/app/src/main/res/drawable/ic_green_tick_circle_16.xml @@ -0,0 +1,15 @@ + + + + diff --git a/app/src/main/res/drawable/ic_lightning.xml b/app/src/main/res/drawable/ic_lightning.xml new file mode 100644 index 0000000000..8bdff70538 --- /dev/null +++ b/app/src/main/res/drawable/ic_lightning.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_pan_error.xml b/app/src/main/res/drawable/ic_pan_error.xml new file mode 100644 index 0000000000..eb0aec46d4 --- /dev/null +++ b/app/src/main/res/drawable/ic_pan_error.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_recommended_lightning.xml b/app/src/main/res/drawable/ic_recommended_lightning.xml new file mode 100644 index 0000000000..c2731607fa --- /dev/null +++ b/app/src/main/res/drawable/ic_recommended_lightning.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_verification_fail.xml b/app/src/main/res/drawable/ic_verification_fail.xml new file mode 100644 index 0000000000..ca39372988 --- /dev/null +++ b/app/src/main/res/drawable/ic_verification_fail.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/radio_custom_view_selector.xml b/app/src/main/res/drawable/radio_custom_view_selector.xml new file mode 100644 index 0000000000..38b41d8174 --- /dev/null +++ b/app/src/main/res/drawable/radio_custom_view_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/radio_icon_tint_selector.xml b/app/src/main/res/drawable/radio_icon_tint_selector.xml new file mode 100644 index 0000000000..72d9d6f995 --- /dev/null +++ b/app/src/main/res/drawable/radio_icon_tint_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bank_details_auto_debit_fragment.xml b/app/src/main/res/layout/bank_details_auto_debit_fragment.xml index a9c336ee81..636a093ed5 100644 --- a/app/src/main/res/layout/bank_details_auto_debit_fragment.xml +++ b/app/src/main/res/layout/bank_details_auto_debit_fragment.xml @@ -1,145 +1,160 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> - + + + + + + + + + + + + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_above="@+id/footer_view" + android:paddingStart="@dimen/layout_dp_20" + android:paddingTop="@dimen/layout_dp_28" + android:paddingEnd="@dimen/layout_dp_20" + android:paddingBottom="@dimen/layout_dp_20" + app:layout_constraintBottom_toTopOf="@id/footer_view" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + android:layout_height="wrap_content"> - - - + app:layout_constraintTop_toTopOf="parent"> - + - + - + - + - - - + + app:layout_constraintTop_toBottomOf="@id/auto_pay_view" /> - + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/bank_verified_iv" + app:setNoteText="@{@string/same_bank_account_will_be_used_to_get_loan_to_setup_auto_debit}" /> - + app:layout_constraintStart_toStartOf="parent" + app:setFooterData="@{viewModel.getAutoPayFooterData()}" + app:setFooterInteractionListener="@{footerInteractionListener}" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_box_common.xml b/app/src/main/res/layout/dialog_box_common.xml index de810344c7..ea1678d3bd 100644 --- a/app/src/main/res/layout/dialog_box_common.xml +++ b/app/src/main/res/layout/dialog_box_common.xml @@ -1,14 +1,13 @@ - + + android:visibility="gone" + tools:ignore="ContentDescription" /> + + diff --git a/app/src/main/res/layout/enach_tutorial_activity.xml b/app/src/main/res/layout/enach_tutorial_activity.xml index a7f6589a45..b52efbbc4b 100644 --- a/app/src/main/res/layout/enach_tutorial_activity.xml +++ b/app/src/main/res/layout/enach_tutorial_activity.xml @@ -2,50 +2,47 @@ - + android:background="@color/view_background_color_six" + android:orientation="vertical" + android:paddingBottom="10dp"> - - - - - + android:background="@color/view_background_color_six" + app:liftOnScroll="true"> - + - + + + + + - + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + + diff --git a/app/src/main/res/layout/fragment_enach.xml b/app/src/main/res/layout/fragment_enach.xml new file mode 100644 index 0000000000..0679370216 --- /dev/null +++ b/app/src/main/res/layout/fragment_enach.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kyc_physical_address_verification.xml b/app/src/main/res/layout/fragment_kyc_physical_address_verification.xml new file mode 100644 index 0000000000..2cddc68770 --- /dev/null +++ b/app/src/main/res/layout/fragment_kyc_physical_address_verification.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kyc_verification_in_progress.xml b/app/src/main/res/layout/fragment_kyc_verification_in_progress.xml index 4a34d6da03..0c7540a0a4 100644 --- a/app/src/main/res/layout/fragment_kyc_verification_in_progress.xml +++ b/app/src/main/res/layout/fragment_kyc_verification_in_progress.xml @@ -5,20 +5,22 @@ + android:layout_height="match_parent"> + app:srcCompat="@drawable/ic_kyc_in_progress" + tools:ignore="ContentDescription" /> + + + + + android:visibility="visible" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/action_button"> @@ -147,7 +180,9 @@ style="@style/DescriptionFontStyle" android:layout_width="@dimen/layout_dp_0" android:layout_height="wrap_content" + android:layout_marginStart="@dimen/container_margin" android:layout_marginTop="@dimen/layout_dp_10" + android:layout_marginEnd="@dimen/container_margin" android:paddingTop="@dimen/layout_dp_10" android:textAlignment="center" android:textColorLink="@color/red" @@ -160,10 +195,9 @@ diff --git a/app/src/main/res/layout/item_text_field_view.xml b/app/src/main/res/layout/item_text_field_view.xml new file mode 100644 index 0000000000..a1307e94f7 --- /dev/null +++ b/app/src/main/res/layout/item_text_field_view.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/section_heading_layout.xml b/app/src/main/res/layout/section_heading_layout.xml index f0eefe6e96..c872df8aef 100644 --- a/app/src/main/res/layout/section_heading_layout.xml +++ b/app/src/main/res/layout/section_heading_layout.xml @@ -10,9 +10,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_auto_pay_pending_aadhar.xml b/app/src/main/res/layout/view_auto_pay_pending_aadhar.xml new file mode 100644 index 0000000000..dd708c37fd --- /dev/null +++ b/app/src/main/res/layout/view_auto_pay_pending_aadhar.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_auto_pay_success.xml b/app/src/main/res/layout/view_auto_pay_success.xml new file mode 100644 index 0000000000..c489bacffa --- /dev/null +++ b/app/src/main/res/layout/view_auto_pay_success.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_label.xml b/app/src/main/res/layout/view_label.xml new file mode 100644 index 0000000000..ed3433d0f6 --- /dev/null +++ b/app/src/main/res/layout/view_label.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_radio_icon_custom.xml b/app/src/main/res/layout/view_radio_icon_custom.xml new file mode 100644 index 0000000000..a2f193776e --- /dev/null +++ b/app/src/main/res/layout/view_radio_icon_custom.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_select_mandate.xml b/app/src/main/res/layout/view_select_mandate.xml new file mode 100644 index 0000000000..9f1dc3c3a3 --- /dev/null +++ b/app/src/main/res/layout/view_select_mandate.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index 4557ca498a..7207268dc3 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -3332,6 +3332,12 @@ "uri": "https://s3.ap-south-1.amazonaws.com/navi-d5a6c37adb7e06d06401aba47fe07bf3/prod/b6879988-0022-4dd7-94e4-6d80ee735c7f?X-Amz-Security-Token\u003dFwoGZXIvYXdzEBcaDEbeLF6v9%2BBCTd9v9SLKAXnruh6Vz4ubOX%2BQ6BRz6ytEoW6lcFj%2BRsEiMIo1H74UnHxlbJ8Mq0nFAud9djqEK4qy07vZBWnhRfMJZpYWyRBgeVNmfBW6pg7AQKATZXLxi2P9wzWNa67G4uLKBsjPurVrkegpLfy0SdWWaRSPQXFaWf50i6wgvAei18leryu5pkssjb%2FDFMV6mDgzdHzz3c%2BCMi%2Bzzf60QPPJ72S1rMFqhMIVkt2rz8620s2hQfLJjSxBXeswACm0zGJtdWcHrEX1In675oD6UhAotZ%2BXiQYyLShluwKRXHpvGKeqoRieOI5zPBZMM3RjaLeAIW%2BU9b0CRzwoweilmnwyXoySaA%3D%3D\u0026X-Amz-Algorithm\u003dAWS4-HMAC-SHA256\u0026X-Amz-Date\u003d20210825T054733Z\u0026X-Amz-SignedHeaders\u003dhost\u0026X-Amz-Expires\u003d36000\u0026X-Amz-Credential\u003dASIAYKBIIH2NLZHHQ7WK%2F20210825%2Fap-south-1%2Fs3%2Faws4_request\u0026X-Amz-Signature\u003d9254a117ec5ff3e020c9ac1d6c9b052f769c54a05bddd0de5b5520109f525a1c", "showOtpOption": false, "isEditable": false + }, + { + "type" : "TEXTFIELD", + "subtitle" : "Type here", + "title" : "Father's Name", + "jsonKey" : "fatherName" } ], "kycDetailsComplete": true @@ -3494,10 +3500,12 @@ } }, "kycInReviewStatus": { - "kyc": "IN_REVIEW", - "verificationType": "TELE_VERIFICATION", - "completeAddress": "navi, hosur rd, koramangala, 560034, bangalore, karnataka", - "customerCarePhoneNum": "8010833333" + "content": { + "kyc": "OSV_VERIFICATION_IN_PROGRESS", + "verificationType": "TELE_VERIFICATION", + "completeAddress": "navi, hosur rd, koramangala, 560034, bangalore, karnataka", + "customerCarePhoneNum": "8010833333" + } }, "addressStatusComplete": { "customerReferenceId": "c4bf567f-6130-43c7-b8c4-edd19279c452", @@ -3664,5 +3672,76 @@ } ] } + }, + "physicalAddressVerificationData": { + "header": { + "title": "Personal Loan", + "subtitle": "Address Verification", + "progress": 40 + }, + "content": { + "completeAddress": "1st street, address line 1, address line 2, 560034, address line 1, bangalore, karnataka", + "addressVerificationLabel": "Address Verification", + "addressVerificationDescription": "Our agent will capture Aadhaar at your address.Please select a slot to schedule a visit:", + "dateTimeLabel": "Select Date & Time:", + "dateOptions": [ + { + "id": "1", + "label": "12 Jun" + }, + { + "id": "2", + "label": "13 Jun" + }, + { + "id": "3", + "label": "14 Jun" + }, + { + "id": "4", + "label": "15 Jun" + }, + { + "id": "5", + "label": "16 Jun" + }, + { + "id": "6", + "label": "17 Jun" + }, + { + "id": "7", + "label": "18 Jun" + } + ], + "timeOptions": [ + { + "id": "1", + "label": "8 AM-12 PM" + }, + { + "id": "2", + "label": "12PM -4 PM" + }, + { + "id": "3", + "label": "4 PM- 8 PM" + }, + { + "id": "4", + "label": "8 PM- 10 PM" + } + ] + }, + "footer": { + "backCta": { + "title": "", + "url": "KYC" + }, + "nextCta": { + "title": "Next", + "url": "KYC_IN_REVIEW" + } + } } -} \ No newline at end of file +} diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7b7ab91f1a..85639f83eb 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -179,6 +179,7 @@ 160dp 86dp 5dp + 54dp 2dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d999d346d..5b8c737826 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -306,12 +306,13 @@ No Transactions! Transactions related to EMI(s)\nwill show here Please select your primary email - EMI of %1$s will be auto-debited starting %2$s + EMI of %1$s will be auto-paid starting %2$s Auto-debit setup failed. Please retry. Pending Your auto-debit setup is pending confirmation. It may take upto 10 mins. Please wait... Auto-debit setup done + Auto-pay setup done Select valid Bank Kindly reach out to us for any questions\nregarding your loan or the app We will get back to you within 24 hours @@ -430,7 +431,7 @@ Voter ID Capture PAN Capture ID Capture - Same bank account will be used to get loan & to setup auto-debit of EMIs + Same bank account will be used to get loan & to setup auto-pay of EMIs Change Bank? Leave a feedback…(optional) It seems you are leaving! @@ -672,12 +673,14 @@ PAN Card Photo Please retry the submission PAN Upload Failed - AMIPI2731G + Enter your 10-digit PAN PAN card verification failed. Please retry the submission Select City Select Company Search for company No results found + Please insert at least + char Please insert at least 1 char Please insert at least 5 char Current Residence\nAddress @@ -758,4 +761,11 @@ privacy policy Go to Home Dismiss + Do you want to change the slot? + You can only do this once + Change Slot + Your auto-pay setup with Aadhar OTP is signed + Setup auto-pay for EMIs + Your auto-pay setup is pending confirmation. It may take up to 10 mins. + Setup Auto-pay diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 78459a11f1..8998f8c204 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -603,11 +603,13 @@ @color/title_text_color 0.02 + + + diff --git a/app/src/test/java/com/naviapp/dashboard/viewmodels/DashboardSharedVMTest.kt b/app/src/test/java/com/naviapp/dashboard/viewmodels/DashboardSharedVMTest.kt index c3f7f5a508..05bd92f4af 100644 --- a/app/src/test/java/com/naviapp/dashboard/viewmodels/DashboardSharedVMTest.kt +++ b/app/src/test/java/com/naviapp/dashboard/viewmodels/DashboardSharedVMTest.kt @@ -3,13 +3,11 @@ package com.naviapp.dashboard.viewmodels import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.naviapp.common.TestDispatcher import com.naviapp.dashboard.repositories.DashboardRepository -import com.naviapp.models.CustomerSupport import com.naviapp.models.UserProfile import com.naviapp.models.response.Faq import com.naviapp.models.response.FaqContent import com.naviapp.models.response.GroupFaq import com.naviapp.network.models.RepoResult -import com.naviapp.utils.Constants import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.impl.annotations.RelaxedMockK @@ -61,55 +59,27 @@ class DashboardSharedVMTest { Assert.assertTrue( dashboardSharedVM.faqs.value?.size == 2 ) - Assert.assertEquals( - true, - dashboardSharedVM.faqs.value?.get(Constants.FAQ_PERSONAL_LOAN) - ?.isNotEmpty() - ) Assert.assertEquals( - 2, - dashboardSharedVM.faqs.value?.get(Constants.FAQ_PERSONAL_LOAN)?.size ?: 0 + true, + dashboardSharedVM.faqs.value?.get(0)?.faqs?.isNotEmpty() ) Assert.assertEquals( true, - dashboardSharedVM.faqs.value?.get(Constants.FAQ_HOME_LOAN)?.isNotEmpty() + dashboardSharedVM.faqs.value?.get(1)?.faqs?.isNotEmpty() ) Assert.assertEquals( - 1, - dashboardSharedVM.faqs.value?.get(Constants.FAQ_HOME_LOAN)?.size ?: 0 - ) - } - - @InternalCoroutinesApi - @Test - fun fetchContactUsShouldReturnExpectedResponse() = - runBlocking(testDispatcher) { - val dashboardSharedVM = - DashboardSharedVM(dashboardRepository) - dashboardSharedVM.updateCoroutineScope(this) - - - val mockData = CustomerSupport( - phoneNumber = "+918010833333", - email = "support@navisandbox.freshdesk.com" - ) - val response = RepoResult(mockData) - coEvery { dashboardRepository.fetchCustomerSupportData() } returns response - dashboardSharedVM.fetchCustomerSupportData() - - - Assert.assertEquals( - "+918010833333", - dashboardSharedVM.customerSupport.value?.phoneNumber + "Personal Loan", + dashboardSharedVM.faqs.value?.get(0)?.sectionName ) Assert.assertEquals( - "support@navisandbox.freshdesk.com", - dashboardSharedVM.customerSupport.value?.email + "Home Loan", + dashboardSharedVM.faqs.value?.get(1)?.sectionName ) + } @InternalCoroutinesApi @@ -150,7 +120,7 @@ class DashboardSharedVMTest { } private fun getGroupFaqs(): MutableList { - val groupFaqs: MutableList = mutableListOf() + val groupFaqs: MutableList = mutableListOf() val faqRepaymentContents = mutableListOf() faqRepaymentContents.add( diff --git a/app/src/test/java/com/naviapp/personalloan/eligibility/viewmodel/PersonalLoanPanVMTest.kt b/app/src/test/java/com/naviapp/personalloan/eligibility/viewmodel/PersonalLoanPanVMTest.kt index b647c7b862..93b290f7f5 100644 --- a/app/src/test/java/com/naviapp/personalloan/eligibility/viewmodel/PersonalLoanPanVMTest.kt +++ b/app/src/test/java/com/naviapp/personalloan/eligibility/viewmodel/PersonalLoanPanVMTest.kt @@ -3,7 +3,7 @@ package com.naviapp.personalloan.eligibility.viewmodel import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.naviapp.common.TestDispatcher import com.navi.common.model.CtaData -import com.navi.analytics.model.UserDetail +import com.naviapp.models.UserDetail import com.naviapp.models.request.PanRequest import com.naviapp.models.response.Footer import com.naviapp.models.response.Header diff --git a/navi-amc/src/main/AndroidManifest.xml b/navi-amc/src/main/AndroidManifest.xml index 306660605c..ee07b8a852 100644 --- a/navi-amc/src/main/AndroidManifest.xml +++ b/navi-amc/src/main/AndroidManifest.xml @@ -15,6 +15,9 @@ android:hardwareAccelerated="true" android:largeHeap="true" android:supportsRtl="true"> + @@ -93,7 +96,7 @@ android:name=".ui.investment.MyInvestmentActivity" android:parentActivityName=".ui.home.HomeActivity" android:screenOrientation="portrait" /> - + android:windowSoftInputMode="stateHidden|adjustResize" /> + + + @@ -134,35 +142,6 @@ - \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt index a052148267..dfba549c81 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/constants/AnalyticsConstant.kt @@ -41,6 +41,7 @@ object AnalyticsConstant { const val OtpVerificationActivity = "OtpVerificationActivity" const val VerifyPanCardActivity = "AMC_Pan_Page" const val VerifyPanLoaderScreen = "VerifyPanLoaderScreen" + const val OnBoardingLoaderScreen = "OnBoardingLoaderScreen" const val PaymentSuccessActivity = "PaymentSuccessActivity" const val SelectPaymentModeActivity = "SelectPaymentModeActivity" const val AboutIncomeActivity = "AMC_Personal_Details" @@ -53,6 +54,7 @@ object AnalyticsConstant { const val SetupYourActivity = "AMC_Setup_Account" const val SIPPaymentActivity = "SIPPaymentActivity" const val SipActivity = "SipActivity" + const val KycDocumentsActivity = "KycDocumentsActivity" class HomeScreen { fun onHomeScreenInvestNowClick() = NaviTrackEvent.trackEvent("AMC_HomeScreen_InvestNow") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt index a3a8f53c32..d1dd987a1d 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/navigator/NaviAmcDeeplinkNavigator.kt @@ -5,9 +5,13 @@ import android.content.Intent import android.os.Bundle import com.navi.amc.investorapp.constants.Constant import com.navi.amc.investorapp.constants.EXTRA_FROM +import com.navi.amc.investorapp.ui.activity.OnBoardingLoadingActivity import com.navi.amc.investorapp.ui.home.HomeActivity import com.navi.amc.investorapp.ui.investment.MyInvestmentActivity +import com.navi.amc.investorapp.ui.panCard.VerifyPanCardActivity import com.navi.amc.investorapp.ui.profile.MyLumpsumOrdersActivity +import com.navi.amc.investorapp.ui.setup_account.KycDocumentsActivity +import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity import com.navi.amc.investorapp.util.orFalse import com.navi.amc.investorapp.util.orZero import com.navi.common.model.CtaData @@ -20,6 +24,11 @@ object NaviAmcDeeplinkNavigator { private const val SELL_ORDER = "sell_order" private const val BUY_ORDER = "buy_order" private const val INVESTMENT = "investment" + private const val ONBOARD_LOADING = "loading" + private const val KYC_COMPLIANT_INTRO = "kyc-intro" + private const val KYC_NON_COMPLIANT_INTRO = "non-kyc-intro" + private const val PAN = "pan" + fun navigate( activity: Activity?, ctaData: CtaData, @@ -44,13 +53,19 @@ object NaviAmcDeeplinkNavigator { intent?.putExtra(EXTRA_FROM, Constant.AMC_BUY_ORDER_PAGE) } INVESTMENT -> intent = Intent(activity, MyInvestmentActivity::class.java) + ONBOARD_LOADING -> intent = + Intent(activity, OnBoardingLoadingActivity::class.java) + KYC_COMPLIANT_INTRO -> intent = Intent(activity, SetupYourActivity::class.java) + KYC_NON_COMPLIANT_INTRO -> intent = Intent(activity, KycDocumentsActivity::class.java) + PAN -> intent = Intent(activity, VerifyPanCardActivity::class.java) + } ctaData.parameters?.forEach { keyValue -> bundle.putString(keyValue.key, keyValue.value) } intent?.let { intent -> intent.putExtras(bundle) - intent.putExtra(Constants.SECOND_IDENTIFIER, it.getOrNull(1)) + intent.putExtra(Constants.SECOND_IDENTIFIER, it.getOrNull(2)) if (needsResult.orFalse()) { activity?.startActivityForResult(intent, requestCode.orZero()) } else activity?.startActivity(intent) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt index 334bd371d6..36cb9db655 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/Fund.kt @@ -1,7 +1,9 @@ package com.navi.amc.investorapp.response +import androidx.annotation.Keep import com.google.gson.annotations.SerializedName +@Keep data class Fund( @SerializedName("aum") val aum: String? = null, @@ -73,5 +75,20 @@ data class Fund( val ter: Double? = null, @SerializedName("type") - val type: String? = null -) \ No newline at end of file + val type: String? = null, + + @SerializedName("cagr") + var cagr: CAGR? = null, +) + +@Keep +data class CAGR( + @SerializedName("max") + var max: String? = "", // 03.99% + @SerializedName("1") + var x1: String? = "", // NA + @SerializedName("3") + var x3: String? = "", // NA + @SerializedName("5") + var x5: String? = "" // NA +) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt index 4a1b5d7ce4..2525eb8ca2 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseCommon.kt @@ -27,7 +27,7 @@ data class ResponseCommon( @SerializedName("personal_details_to_ask") var personalDetailsToAsk: List? = null, @SerializedName("options") - var options: ArrayList? = ArrayList(), // null + var options: ArrayList? = null, // null @SerializedName("refresh_token") var refreshToken: String? = "", @SerializedName("x-amc-access-token") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt index 75c0e114d3..8f3f522db6 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseInvestmentDetails.kt @@ -21,7 +21,7 @@ data class ResponseInvestmentDetails( @SerializedName("current_amount") var currentAmount: String? = "", // 130000 @SerializedName("diff") - var diff: String? = "", // 30000 + var diff: Double? = 0.0, // 30000 @SerializedName("invested_amount") var investedAmount: String? = "", // 100000 @SerializedName("percentage_diff") diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt new file mode 100644 index 0000000000..8851f1d06e --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/response/ResponseKycDocuments.kt @@ -0,0 +1,28 @@ +package com.navi.amc.investorapp.response + + +import androidx.annotation.Keep +import com.google.gson.annotations.SerializedName +import com.navi.common.model.CtaData + +@Keep +data class ResponseKycDocuments( + @SerializedName("cta") + var cta: CtaData? = null, + @SerializedName("documents") + var documents: ArrayList? = ArrayList(), + @SerializedName("iconCode") + var iconCode: String? = "", // ICON_DOCUMENT + @SerializedName("title") + var title: String? = "" // Keep the following documents handy +) + +@Keep +data class Document( + @SerializedName("iconCode") + var iconCode: String? = "", // ICON_PAN + @SerializedName("subTitle") + var subTitle: String? = "", // To upload the image of PAN Card + @SerializedName("title") + var title: String? = ""// PAN Card +) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt index ced38c886d..737101d196 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiErrorHandler.kt @@ -7,15 +7,15 @@ import retrofit2.Converter import retrofit2.HttpException import retrofit2.Response import java.net.SocketTimeoutException +import java.net.UnknownHostException object ApiErrorHandler { - - fun handleException(exception: Exception): String { exception.printStackTrace() return when (exception) { is HttpException -> handleHttpException(exception) + is UnknownHostException -> "Internet Connection issue, Please check your internet connection" is SocketTimeoutException -> "Socket Timeout Exception" else -> "Something went wrong" } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt index cff7eaeeb1..833d3fe69f 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ApiUtils.kt @@ -212,7 +212,7 @@ object ApiUtils { suspend fun fetchKycStatus( accessToken: String, - p0: (KycBaseResponse) -> Unit, + p0: (BankVerificationResponse) -> Unit, p1: (Exception) -> Unit ) { try { @@ -224,21 +224,20 @@ object ApiUtils { withContext(Dispatchers.Main) { p1(e) } } } - suspend fun submitBankDetails( accessToken: String, bankDetails: BankDetails, p0: (KycBaseResponse) -> Unit, - p1: (String) -> Unit + p1: (Exception) -> Unit ) { - val response = amcService.submitBankDetails( - accessToken, - bankDetails - ) - if (response.isSuccessful) { - withContext(Dispatchers.Main) { p0(response.body()!!) } - } else { - withContext(Dispatchers.Main) { p1(response.errorBody()?.toString().orEmpty()) } + try { + val response = amcService.submitBankDetails( + accessToken, + bankDetails + ) + withContext(Dispatchers.Main) { p0(response) } + } catch (e: Exception) { + withContext(Dispatchers.Main) { p1(e) } } } @@ -979,6 +978,19 @@ object ApiUtils { } } + suspend fun hitKycDocumentsApi( + p0: (ResponseKycDocuments) -> Unit, + p1: (Exception) -> Unit + ) { + try { + val response = amcService.hitKycDocumentsApi() + withContext(Dispatchers.Main) { p0(response) } + } catch (e: Exception) { + withContext(Dispatchers.Main) { p1(e) } + } + } + + fun logOut(context: Context) { SharedPreferencesWriter.getInstance(context) .clearPreferenceValues() diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt index 68bc684f38..a1d23fca5e 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/retrofit/ServicesInterface.kt @@ -40,7 +40,7 @@ interface ServicesInterface { @GET("/amc-core/api/investor/v1/bankaccount") suspend fun fetchKycStatus( @Header("x-amc-access-token") accessToken: String? = "" - ): KycBaseResponse + ): BankVerificationResponse @Headers("Content-Type: application/json") @GET("/kyc/v1/investor-info") @@ -96,7 +96,7 @@ interface ServicesInterface { suspend fun submitBankDetails( @Header("x-amc-access-token") accessToken: String, @Body bankDetails: BankDetails - ): Response + ): KycBaseResponse @GET("/amc-core/api/investor/v1/bank-details/{ifscCode}") suspend fun submitIFSCData( @@ -376,4 +376,7 @@ interface ServicesInterface { @Body refreshToken: RefreshBeam ): RefreshResponse + @GET("amc-core/api/static/kyc/promptitems.json") + suspend fun hitKycDocumentsApi( + ): ResponseKycDocuments } \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt index 20fc936b86..12e84133ad 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/sharedpreference/SharedPreferencesKeys.kt @@ -35,4 +35,9 @@ object SharedPreferencesKeys { const val GENDER_LABEL = "GENDER" const val FATHER_NAME = "FATHER_NAME" const val MARTIAL_STATUS = "MARITAL_STATUS" - const val RESIDENTIAL_STATUS = "RESIDENTIAL_STATUS"} \ No newline at end of file + const val RESIDENTIAL_STATUS = "RESIDENTIAL_STATUS" + const val ASK_OPTIONS = "ASK_OPTIONS" + const val OPTIONS_MOBILE = "OPTIONS_MOBILE" + const val CURRENT_TIME = "CURRENT_TIME" + const val FIRST_TIME = "FIRST_TIME" +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt new file mode 100644 index 0000000000..b9f239f569 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/OnBoardingLoadingActivity.kt @@ -0,0 +1,58 @@ +package com.navi.amc.investorapp.ui.activity + +import android.os.Bundle +import androidx.lifecycle.lifecycleScope +import com.navi.amc.investorapp.R +import com.navi.amc.investorapp.base.BaseActivity +import com.navi.amc.investorapp.constants.AnalyticsConstant +import com.navi.amc.investorapp.databinding.ActivityVerifyPanLoaderBinding +import com.navi.amc.investorapp.extension.* +import com.navi.amc.investorapp.navigator.NaviAmcDeeplinkNavigator +import com.navi.amc.investorapp.ui.panCard.OnBoardingLoadingVM +import com.navi.common.model.CtaData +import com.navi.common.utils.Constants +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +class OnBoardingLoadingActivity : + BaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + statusBarTransparent() + bindViewModel() + init() + initControl() + lifecycleScope.launch { + delay(3000) + navigateToNextScreen() + } + } + + private fun navigateToNextScreen() { + val screen = intent.getStringExtra(Constants.SECOND_IDENTIFIER) + NaviAmcDeeplinkNavigator.navigate( + this, + CtaData(url = NaviAmcDeeplinkNavigator.AMC.plus("/").plus(screen)), + true + ) + } + + override val layoutRes: Int + get() = R.layout.activity_onboarding_loading + override val viewModelClass: Class + get() = OnBoardingLoadingVM::class.java + + override fun bindViewModel() { + } + + override fun init() { + } + + override fun initControl() { + } + + override val screenName: String + get() = AnalyticsConstant.OnBoardingLoaderScreen +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/WebViewActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/WebViewActivity.kt index 1d6013933e..10f03ea83b 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/WebViewActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/activity/WebViewActivity.kt @@ -19,9 +19,9 @@ import com.navi.amc.investorapp.constants.* import com.navi.amc.investorapp.databinding.AmcActivityWebViewBinding import com.navi.amc.investorapp.dialogs.CustomProgressDialog import com.navi.amc.investorapp.extension.* -import com.navi.amc.investorapp.ui.e_mandate.EMandateResultActivity import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter +import com.navi.amc.investorapp.ui.e_mandate.EMandateResultActivity import com.navi.amc.investorapp.ui.home.HomeActivity import com.navi.amc.investorapp.ui.kyc.activities.KycActivity import com.navi.amc.investorapp.ui.payment.PaymentSuccessActivity @@ -39,6 +39,8 @@ class WebViewActivity : AppCompatActivity() { get() = intent.getStringExtra(EXTRA_DATA) private val paymentID: String? get() = intent.getStringExtra(EXTRA_ID) + private val fundType: String? + get() = intent.getStringExtra(EXTRA_MESSAGE) private val amount: String? get() = intent.getStringExtra(EXTRA_AMOUNT) private val nextInstallment: String? @@ -112,8 +114,6 @@ class WebViewActivity : AppCompatActivity() { viewModel.checkPaymentStatus() } else { binding.investedAccountText.gone() - Log.e("###", "Term and condition") - Log.e("###", "url: $loadedUrl") } } } @@ -131,6 +131,7 @@ class WebViewActivity : AppCompatActivity() { putExtra(EXTRA_AMOUNT, amount.toString()) putExtra(EXTRA_FROM, extraFrom) putExtra(EXTRA_POS, 1) + putExtra(EXTRA_MESSAGE, fundType) }) } else if (its.state == "failed") { @@ -141,7 +142,7 @@ class WebViewActivity : AppCompatActivity() { putExtra(EXTRA_FROM, extraFrom) putExtra(EXTRA_AMOUNT, amount.toString()) putExtra(EXTRA_POS, 2) - + putExtra(EXTRA_MESSAGE, fundType) }) } } else if (extraFrom == 2) { @@ -154,6 +155,8 @@ class WebViewActivity : AppCompatActivity() { putExtra(EXTRA_FROM, extraFrom) putExtra(NEXT_INSTALLMENT, nextInstallment) putExtra(EXTRA_POS, 1) + putExtra(EXTRA_MESSAGE, fundType) + }) } else if (its.state == "failed") { @@ -165,7 +168,7 @@ class WebViewActivity : AppCompatActivity() { putExtra(NEXT_INSTALLMENT, nextInstallment) putExtra(EXTRA_AMOUNT, amount.toString()) putExtra(EXTRA_POS, 2) - + putExtra(EXTRA_MESSAGE, fundType) }) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt index 92282f8fa6..7d5ef43859 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/home/HomeScreenFragment.kt @@ -5,8 +5,8 @@ import android.os.Bundle import android.os.CountDownTimer import android.os.Handler import android.os.Looper -import android.util.Log import android.view.View +import androidx.core.content.ContextCompat import com.navi.amc.investorapp.R import com.navi.amc.investorapp.base.BaseFragment import com.navi.amc.investorapp.constants.* @@ -31,20 +31,22 @@ import com.navi.amc.investorapp.ui.investment.MyInvestmentActivity import com.navi.amc.investorapp.ui.kyc.activities.KycActivity import com.navi.amc.investorapp.ui.mutual_fund.MFListingActivity import com.navi.amc.investorapp.ui.mutual_fund.MutualFundActivity +import com.navi.amc.investorapp.ui.otpVerification.OtpVerificationActivity import com.navi.amc.investorapp.ui.panCard.VerifyPanCardActivity import com.navi.amc.investorapp.ui.personalDetails.AboradErrorActivity import com.navi.amc.investorapp.ui.profile.MyLumpsumOrdersAdapter import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity +import com.navi.amc.investorapp.util.orFalse +import com.navi.amc.investorapp.util.orZero import com.navi.amc.investorapp.utils.DateUtils import com.navi.analytics.utils.NaviTrackEvent import com.navi.common.deeplink.DeepLinkManager import com.navi.common.deeplink.util.DeeplinkConstants import com.navi.common.model.CtaData import com.navi.common.utils.Constants +import kotlin.math.abs class HomeScreenFragment : BaseFragment() { - - var status: String? = null var isin: String? = null var sipAmount: Double? = null @@ -119,34 +121,52 @@ class HomeScreenFragment : BaseFragment { requireActivity().goto(KycActivity::class.java) } - R.id.ivProgressDownArrow -> { pendingOrderCounter++ if (pendingOrderCounter == 1) { @@ -240,19 +258,16 @@ class HomeScreenFragment : BaseFragment with(binding) { - NaviTrackEvent.setUserAttributes( name = its.name, phoneNumber = its.mobile, email = its.email, gender = its.gender ) - sharedPreferences.writeStringValue( SharedPreferencesKeys.ON_BOARDING_STATUS, its.status ) - if (its.status == Constant.ONBOARDED) { binding.isLogin = false @@ -309,19 +324,15 @@ class HomeScreenFragment : BaseFragment with(binding) { - tvInvestedAmtPrice.text = "₹ ${its.investmentsOverview?.investedAmount}" tvCurrentValuePrice.text = "₹ ${its.investmentsOverview?.currentAmount}" - var diff = its.investmentsOverview?.diff - yourInvPercentage.text = " (${its.investmentsOverview?.percentageDiff} %)" - if (diff?.trim()?.indexOf("-") != -1) { - yourInvPrice.text = "- ₹ ${diff?.substring(diff?.indexOf("-") + 1)}" - yourInvPercentage.setTextAppearance( - activity, - R.style.Textview_FF3333_regular_12sp + val diff = its.investmentsOverview?.diff + if (diff.orZero() < 0) { + yourInvPrice.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_A3A3AB + ) ) + yourInvPercentage.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_FF3333 + ) + ) + yourInvPercentage.text = + "( - ${its.investmentsOverview?.percentageDiff} %)" + yourInvPrice.text = + "- ${view.context.getString(R.string.rupees)} ${abs(diff.orZero())}" + } else { - yourInvPrice.text = "+ ₹ ${diff}" - yourInvPercentage.setTextAppearance( - activity, - R.style.Textview_14BC51_regular_12sp + yourInvPrice.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_14BC51 + ) ) + yourInvPercentage.setTextColor( + ContextCompat.getColor( + view.context, + R.color.color_14BC51 + ) + ) + yourInvPercentage.text = + "( + ${its.investmentsOverview?.percentageDiff} %)" + yourInvPrice.text = + "+ ${view.context.getString(R.string.rupees)} ${abs(diff.orZero())}" } if (its.investmentsOverview?.investedAmount!!.toDouble() > 0) { ConstraintBeforeInvestment.visibility = View.GONE @@ -492,13 +524,10 @@ class HomeScreenFragment : BaseFragment redeemAmount.toDouble()) { + } else if (amountTotal.getString().toDouble() > redeemAmount) { root.showSnackBar("Redeemable Amount cannot be more than maximum redeemable amount") return false } @@ -244,33 +241,17 @@ class SellMyFundActivity : BaseActivity { - - } - R.id.stayInvestedBtn -> { - - } } }) viewModel.responseOTP.observe(this, { it.let { its -> + this.transactionId = its.transactionId.toString() with(binding) { hideProgressAtTime() - transactionId = its.transactionId.toString() disableUI() isOtpVerifyPage = true startTimer() -// goto(Intent(this@SellMyFundActivity, SellMyFundOTPActivity::class.java).apply { -// putExtra(EXTRA_FLAG, its.transactionId) -// putExtra(EXTRA_DATA, folioNumber) -// putExtra(EXTRA_ID, isin) -// val amount = amountTotal.getString() -// putExtra(EXTRA_FROM, amount.toDouble()) -// putExtra("FUND_NAME", fundNameSelected) -// putExtra("REDEEM_TIME", redeemTime) -// }) - } } }) @@ -278,7 +259,7 @@ class SellMyFundActivity : BaseActivity with(binding) { - minRedeemAmount = its.minRedeemAmount + minRedeemAmount = its.minRedeemAmount.orZero() minInvestmentText.text = "${getString(R.string.min_redeemable_rupees)} ${its.minRedeemAmount.toString()}" timeRedemption.text = @@ -289,7 +270,7 @@ class SellMyFundActivity : BaseActivity= 4) bankNumber.substring( @@ -302,9 +283,10 @@ class SellMyFundActivity : BaseActivity - transactionId = its.transactionId.toString() + this.transactionId = its.transactionId.toString() binding.root.showSnackBar("Otp resend") startTimer() + clearOtp() } }) @@ -350,6 +332,13 @@ class SellMyFundActivity : BaseActivity { - if (isValidDetails()) { - val accessToken = - sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() - val bankDetails = BankDetails( - ifscCode = binding.ifscEv.text.toString().trim(), - bankName = binding.bankNameEv.text.toString(), - accountNumber = binding.accountNoEv.text.toString().trim(), - ) - viewModel.submitData(accessToken, bankDetails) + if (context?.let { checkInternetSnackBar(it, binding.root) } == true) { + if (isValidDetails()) { + val accessToken = + sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() + val bankDetails = BankDetails( + ifscCode = binding.ifscEv.text.toString().trim(), + bankName = binding.bankNameEv.text.toString(), + accountNumber = binding.accountNoEv.text.toString().trim(), + ) + viewModel.submitData(accessToken, bankDetails) + } } } R.id.bank_name_ev -> { if (binding.bankNameEv.text.toString().isBlank()) { if (binding.ifscEv.text.toString().isBlank()) { binding.root.showSnackBar(getString(R.string.please_enter_ifsc)) - } else { + } else if (binding.ifscEv.text.toString().length != 11) { binding.root.showSnackBar(getString(R.string.please_enter_valid_ifsc)) + } else { + openBanksSpinner() } + } else if (viewModel.ifscResponse.value?.bankName.isNullOrEmpty()) { + openBanksSpinner() } } } } + private fun openBanksSpinner() { + viewModel.fetchResponse.value?.banks?.let { banks -> + context?.let { + showMenu( + it, + banks, + binding.bankNameEv, + object : AMCSpinnerListener { + override fun onSelect(text: String) { + binding.bankNameEv.text = text + enableNextButton() + } + }) + } + } + } + private fun isValidDetails(): Boolean { if (binding.ifscEv.text.toString().isBlank()) { binding.root.showSnackBar(getString(R.string.please_enter_ifsc)) @@ -243,7 +268,7 @@ class BankDetailsFragment : return false } if (binding.bankNameEv.text.toString().isBlank()) { - binding.root.showSnackBar(getString(R.string.please_enter_valid_ifsc)) + binding.root.showSnackBar(getString(R.string.please_enter_bank_name)) return false } if (binding.accountNoEv.text.toString().isBlank()) { @@ -311,7 +336,9 @@ class BankDetailsFragment : private fun submitIFSCData(ifscCode: String) { val accessToken = sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() - viewModel.submitIFSCData(accessToken, ifscCode) + if (context?.let { checkInternetSnackBar(it, binding.root) } == true) { + viewModel.submitIFSCData(accessToken, ifscCode) + } } private fun sendEvent() { @@ -326,5 +353,7 @@ class BankDetailsFragment : } override val screenName: String - get() = if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC).orFalse()) AnalyticsConstant.NonKycBankDetailsScreen else AnalyticsConstant.KycBankDetailsScreen + get() = if (arguments?.getBoolean(Constant.IS_FROM_NON_KYC) + .orFalse() + ) AnalyticsConstant.NonKycBankDetailsScreen else AnalyticsConstant.KycBankDetailsScreen } \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt index 520e668db6..7e2ec54ad9 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/BankVerificationFragment.kt @@ -14,6 +14,7 @@ import com.navi.amc.investorapp.constants.Constant import com.navi.amc.investorapp.constants.Constant.FAILED import com.navi.amc.investorapp.constants.Constant.VERIFIED import com.navi.amc.investorapp.databinding.FragmentKycVerifyingBinding +import com.navi.amc.investorapp.extension.showSnackBar import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter import com.navi.amc.investorapp.ui.kyc.listeners.FragmentInterchangeListener @@ -124,6 +125,7 @@ class BankVerificationFragment : getString(R.string.looks_like_we_were_not_able_to_verify_your_bank_account) binding.subTitleTv.text = getString(R.string.check_your_details_again_and_confirm) } + binding.root.showSnackBar(it.message) }) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/model/BankVerificationResponse.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/model/BankVerificationResponse.kt new file mode 100644 index 0000000000..bb62acca61 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/model/BankVerificationResponse.kt @@ -0,0 +1,10 @@ +package com.navi.amc.investorapp.ui.kyc.model + +import com.google.gson.annotations.SerializedName + +data class BankVerificationResponse( + @SerializedName("id") var id: Int? = null, + @SerializedName("message") var message: String? = null, + @SerializedName("status") var status: String? = null, + @SerializedName("statusCode") var statusCode: Int? = null +) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt index 6e39ff6dab..385d7d481d 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankDetailsVM.kt @@ -12,6 +12,7 @@ import com.navi.amc.investorapp.ui.kyc.model.BankDetails import com.navi.amc.investorapp.ui.kyc.model.KycBaseResponse import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import retrofit2.HttpException class BankDetailsVM : BaseViewModel() { @@ -24,6 +25,19 @@ class BankDetailsVM : BaseViewModel() { private val _ifscResponse = MutableLiveData() val ifscResponse: LiveData = _ifscResponse + private val _fetchResponse = MutableLiveData() + val fetchResponse: LiveData = _fetchResponse + + fun fetchBanks(accessToken: String) { + viewModelScope.launch(Dispatchers.IO) { + ApiUtils.getOnBoardingOptionApi(accessToken, { + _fetchResponse.value = it + }, { + + }) + } + } + fun fetchBankDetails(accessToken: String) { viewModelScope.launch(Dispatchers.IO) { ApiUtils.fetchBankDetails(accessToken, { @@ -39,10 +53,15 @@ class BankDetailsVM : BaseViewModel() { ApiUtils.submitBankDetails(accessToken, bankDetails, { _response.value = it hideProgress() - }) { + }, { hideProgress() - showError(ApiErrorHandler.handleErrorException(it)) - } + val message = ApiErrorHandler.handleException(it) + if (message.isNullOrEmpty() || (it as HttpException).code() == 500) { + showError("Something went wrong, please try again") + } else { + showError(message) + } + }) } } @@ -53,9 +72,8 @@ class BankDetailsVM : BaseViewModel() { _ifscResponse.value = it hideProgress() }) { - _ifscResponse.value = BankDetails(bankName = "") + _ifscResponse.value = BankDetails() hideProgress() - showError("Please enter valid ifsc") } } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankVerificationVM.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankVerificationVM.kt index 85d90605cf..f8fa0cf7a1 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankVerificationVM.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/viewmodel/BankVerificationVM.kt @@ -5,14 +5,15 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.navi.amc.investorapp.base.BaseViewModel import com.navi.amc.investorapp.retrofit.ApiUtils +import com.navi.amc.investorapp.ui.kyc.model.BankVerificationResponse import com.navi.amc.investorapp.ui.kyc.model.KycBaseResponse import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch class BankVerificationVM : BaseViewModel() { - private val _response = MutableLiveData() - val response: LiveData = _response + private val _response = MutableLiveData() + val response: LiveData = _response fun fetchData(accessToken: String) { viewModelScope.launch(Dispatchers.IO) { @@ -20,7 +21,7 @@ class BankVerificationVM : BaseViewModel() { _response.value = it }) { hideProgressAndShowError(it) - _response.value = KycBaseResponse(status = "FAILED") + _response.value = BankVerificationResponse(status = "FAILED") } } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/BuyingflowSIPActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/BuyingflowSIPActivity.kt index daf8e9b214..2ee7173025 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/BuyingflowSIPActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/mutual_fund/BuyingflowSIPActivity.kt @@ -29,6 +29,7 @@ class BuyingflowSIPActivity : BaseActivity() { + private var cagr: CAGR? = null + var stampedCount: Int = 0 var investmentCount: Int = 0 var schemaCount: Int = 0 @@ -245,6 +246,35 @@ class MutualFundActivity : BaseActivity { openSchemaLink() } + R.id.firstYear -> { + if (!cagr?.x1.isNullOrEmpty()) { + setCAGRData(cagr?.x1, 1) + } else { + setCAGRData("", 1) + } + } + R.id.thirdYear -> { + if (!cagr?.x3.isNullOrEmpty()) { + setCAGRData(cagr?.x3, 3) + } else { + setCAGRData("", 3) + } + + } + R.id.fifthYear -> { + if (!cagr?.x5.isNullOrEmpty()) { + setCAGRData(cagr?.x5, 5) + } else { + setCAGRData("", 5) + } + } + R.id.maxYear -> { + if (!cagr?.max.isNullOrEmpty()) { + setCAGRData(cagr?.max, 0) + } else { + setCAGRData("", 0) + } + } } }) @@ -260,6 +290,36 @@ class MutualFundActivity : BaseActivity { + firstYear1.visible() + thirdYear1.gone() + fifthYear1.gone() + maxYear1.gone() + } + 3 -> { + thirdYear1.visible() + firstYear1.gone() + fifthYear1.gone() + maxYear1.gone() + } + 5 -> { + fifthYear1.visible() + firstYear1.gone() + thirdYear1.gone() + maxYear1.gone() + } + 0 -> { + maxYear1.visible() + thirdYear1.gone() + firstYear1.gone() + fifthYear1.gone() + } + } + } + private fun openSchemaLink() { if (scheme_info_link != null) { val intent = Intent(Intent.ACTION_VIEW) @@ -294,17 +354,21 @@ class MutualFundActivity : BaseActivity= 4) numb.substring( + if (isPanMobile) { + numb = sharedPreferences.getString(SharedPreferencesKeys.OPTIONS_MOBILE) + viewModel.hitReSentOTPPanVerifyApi( + numb, false + ) + } else { + numb = sharedPreferences.getString(SharedPreferencesKeys.MOBILE) + } + val phoneNumber = if (numb?.length.orZero() >= 4) numb?.substring( numb.length - 4 ) else "" mobileNumber.text = "******$phoneNumber" @@ -148,7 +156,7 @@ class OtpVerificationActivity : binding.isOtpTimer = false if (isPanMobile) { viewModel.hitReSentOTPPanVerifyApi( - sharedPreferences.getString(SharedPreferencesKeys.MOBILE) + sharedPreferences.getString(SharedPreferencesKeys.OPTIONS_MOBILE) .toString(), true ) @@ -191,7 +199,29 @@ class OtpVerificationActivity : } }) + viewModel.responsePanMobileOTP.observe(this, { + it.let { its -> + sharedPreferences.writeStringValue( + SharedPreferencesKeys.ON_BOARDING_STATUS, + its.investor?.status + ) + var com = sharedPreferences.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT) + com?.investor = its.investor + sharedPreferences.writeObjectValue( + SharedPreferencesKeys.COMMON_RESPONSE_OBJECT, + com!! + ) + sharedPreferences.writeBooleanInt( + SharedPreferencesKeys.ASK_OPTIONS, + false + ) + Log.e("status", "" + its.investor?.status) + + // gotoNewTask(HomeActivity::class.java) + gotoNewTask(SetupYourActivity::class.java) + } + }) viewModel.errorresponse.observe(this, { it.let { its -> @@ -217,7 +247,6 @@ class OtpVerificationActivity : SharedPreferencesKeys.TRANSACTION_ID, its?.transactionId ) - binding.otpRoot.showSnackBar("Otp resend") startTimer() } }) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt index 63134b2a97..55eceb0acc 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/otpVerification/OtpVerificationViewModel.kt @@ -41,6 +41,9 @@ class OtpVerificationViewModel : BaseViewModel() { private val _responsePanOTP = MutableLiveData() val responsePanOTP: LiveData = _responsePanOTP + private val _responsePanMobileOTP = MutableLiveData() + val responsePanMobileOTP: LiveData = _responsePanMobileOTP + var isResend: Boolean? = false @@ -106,7 +109,7 @@ class OtpVerificationViewModel : BaseViewModel() { ) viewModelScope.launch(Dispatchers.IO) { ApiUtils.panMobileVerify(userData, accessToken, { - _response.value = it + _responsePanMobileOTP.value = it hideProgress() }, { _errorresponse.value=it @@ -118,7 +121,7 @@ class OtpVerificationViewModel : BaseViewModel() { fun hitReSentOTPPanVerifyApi(selectedInvestorMobile: String?, is_resend: Boolean) { showProgress() val userData = ResponsePanMobileVerification( - action = "update_mobile", + action = "verify_cvl_mobile", mobile = selectedInvestorMobile, isResend = is_resend ) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt new file mode 100644 index 0000000000..97e93100d1 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/OnBoardingLoadingVM.kt @@ -0,0 +1,7 @@ +package com.navi.amc.investorapp.ui.panCard + +import com.navi.amc.investorapp.base.BaseViewModel + +class OnBoardingLoadingVM : BaseViewModel() { + +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt index b176ae93e2..dadbf445de 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanCardActivity.kt @@ -1,5 +1,6 @@ package com.navi.amc.investorapp.ui.panCard +import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher @@ -23,9 +24,12 @@ import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys.RESIDENTI import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter import com.navi.amc.investorapp.ui.home.HomeActivity import com.navi.amc.investorapp.ui.kyc.activities.KycActivity +import com.navi.amc.investorapp.ui.otpVerification.OtpVerificationActivity import com.navi.amc.investorapp.ui.personalDetails.AboutIncomeActivity import com.navi.amc.investorapp.ui.setup_account.SetupYourActivity import com.navi.amc.investorapp.util.initDobListeners +import com.navi.amc.investorapp.util.orFalse +import com.navi.analytics.utils.NaviTrackEvent import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.util.* @@ -43,13 +47,45 @@ class VerifyPanCardActivity : BaseActivity + with(binding) + { + NaviTrackEvent.setUserAttributes( + name = its.name, + phoneNumber = its.mobile, + email = its.email, + gender = its.gender + ) + sharedPreferences.writeStringValue( + SharedPreferencesKeys.ON_BOARDING_STATUS, + its.status + ) + + if (its.name != null) { + + sharedPreferences.writeStringValue( + SharedPreferencesKeys.USER_NAME, + its.name + ) + } + sharedPreferences.writeStringValue( + SharedPreferencesKeys.USER_KYC_STATUS, + its.normalised_kyc_status + ) + } + } + }) + } + override val screenName: String get() = AnalyticsConstant.VerifyPanCardActivity @@ -263,11 +299,22 @@ class VerifyPanCardActivity : BaseActivity - analyticsEventTracker.onPanVerified() sharedPreferences.writeStringValue( SharedPreferencesKeys.ON_BOARDING_STATUS, its.investor?.status ) + its.options?.let { it -> + sharedPreferences.writeStringValue( + SharedPreferencesKeys.OPTIONS_MOBILE, + its.options?.getOrNull(0)?.mobile + ).toString() + sharedPreferences.writeBooleanInt( + SharedPreferencesKeys.ASK_OPTIONS, + true + ) + + } + its.personalDetailsToAsk?.let { it -> if (it.contains(EMAIL)) { sharedPreferences.writeBooleanInt( @@ -305,13 +352,28 @@ class VerifyPanCardActivity : BaseActivity, @@ -353,10 +415,18 @@ class VerifyPanCardActivity : BaseActivity { + if (sharedPreferences.getBoolean( + SharedPreferencesKeys.ASK_OPTIONS, + false + ) + .orFalse() - gotoFinish(VerifyPanLoaderScreen::class.java) + ) { + gotoFinish(SetupYourActivity::class.java) + } else { + gotoFinish(VerifyPanLoaderScreen::class.java) + } } - Constant.KYC_NON_COMPLIANT -> { gotoFinish(KycActivity::class.java) } @@ -393,9 +463,7 @@ class VerifyPanCardActivity : BaseActivity { - //gotoFinish(LoginActivity::class.java) - - gotoFinish(HomeActivity::class.java) + viewModel.hitInvestorApi() } } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanViewModel.kt index b9e9aa1f06..ea4d011a58 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/panCard/VerifyPanViewModel.kt @@ -6,7 +6,9 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.navi.amc.investorapp.base.BaseViewModel +import com.navi.amc.investorapp.base.SingleLiveEvent import com.navi.amc.investorapp.extension.getString +import com.navi.amc.investorapp.response.Investor import com.navi.amc.investorapp.response.ResponseCommon import com.navi.amc.investorapp.retrofit.ApiUtils import kotlinx.coroutines.Dispatchers @@ -21,6 +23,8 @@ class VerifyPanViewModel : BaseViewModel() { _onClick.value = view } + private val _investorResponse = SingleLiveEvent() + val investorResponse: SingleLiveEvent = _investorResponse private val pan_response = MutableLiveData() val panDetailsResponse: LiveData = pan_response @@ -78,4 +82,17 @@ class VerifyPanViewModel : BaseViewModel() { } } + fun hitInvestorApi() { + showProgress() + viewModelScope.launch(Dispatchers.IO) { + ApiUtils.callInvestorApi(accessToken, { + _investorResponse.setValue(it) + hideProgress() + }, { + hideProgressAndShowError(it) + }) + + } + } + } \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt index de9413ad1d..e8c7d4a378 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentResultResponse.kt @@ -6,8 +6,6 @@ import com.google.gson.annotations.SerializedName @Keep data class PaymentResultResponse( - @SerializedName("allotted_units") - var allottedUnits: Int? = 0, // 15 @SerializedName("payment") var payment: PaymentBody? = null, // 15 diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentSuccessActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentSuccessActivity.kt index 756a26f4ab..a243192336 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentSuccessActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/payment/PaymentSuccessActivity.kt @@ -31,6 +31,9 @@ class PaymentSuccessActivity : BaseActivity get() = PaymentModeViewModel::class.java + private val fundType: String? + get() = intent.getStringExtra(EXTRA_MESSAGE) + override fun bindViewModel() { binding.paymentModeViewModel = viewModel binding.lifecycleOwner = this @@ -129,6 +132,11 @@ class PaymentSuccessActivity : BaseActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + statusBarTransparent() + bindViewModel() + init() + initControl() + } + + override val screenName: String + get() = AnalyticsConstant.KycDocumentsActivity + + private val sharedPreferences by lazy { + SharedPreferencesWriter.getInstance(this) + } + + override fun onStart() { + super.onStart() + if (checkInternetSnackBar(this, binding.root)) { + viewModel.hitKycDocumentsApi() + } + } + + override val layoutRes: Int + get() = R.layout.activity_kyc_documents + override val viewModelClass: Class + get() = SetupYouAcountViewModel::class.java + + override fun bindViewModel() { + binding.kycDocumentsViewModel = viewModel + binding.lifecycleOwner = this + } + + override fun init() { + viewModel.accessToken = + sharedPreferences.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)!!.accessToken.toString() + } + + override fun initControl() { + inItLiveDataObserver() + } + + private fun inItLiveDataObserver() { + viewModel.onCLick.observe(this, { + when (it.id) { + R.id.btnContinue -> { + goto(KycActivity::class.java) + } + R.id.backButton -> { + finish() + } + } + }) + viewModel.response.observe(this, { + it.let { its -> + with(binding) + { + title.text = its.title + btnContinue.text = its.cta?.title + its.iconCode?.let { it1 -> IconUtils.updateIcon(it1, binding.iconCode) } + } + if (its.documents?.size!! > 0) { + mDocumentsListAdapter(its.documents) + } + } + }) + } + + private fun mDocumentsListAdapter(documents: ArrayList?) { + val adp = MyDocumentsListAdapter() + binding.rvDocumentList.adapter = adp + documents?.let { adp.setData(it) } + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt new file mode 100644 index 0000000000..59fba115ee --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/MyDocumentsListAdapter.kt @@ -0,0 +1,43 @@ +package com.navi.amc.investorapp.ui.setup_account + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.navi.amc.investorapp.databinding.LayoutKycDocumentsListBinding +import com.navi.amc.investorapp.response.Document +import com.navi.amc.investorapp.response.ResponseKycDocuments +import com.navi.amc.investorapp.util.IconUtils + +class MyDocumentsListAdapter : RecyclerView.Adapter() { + + var list: ArrayList = ArrayList() + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { + val inflater = LayoutInflater.from(parent.context) + return MyViewHolder(LayoutKycDocumentsListBinding.inflate(inflater, parent, false)) + } + + override fun getItemCount(): Int { + return list.size + } + + override fun onBindViewHolder(holder: MyViewHolder, position: Int) = holder.bind(position) + + fun setData( + list: ArrayList + ) { + this.list = list + } + + inner class MyViewHolder(val binding: LayoutKycDocumentsListBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(pos: Int) { + val model = list[pos] + with(binding) { + title.text = model.title + description.text = model.subTitle + model.iconCode?.let { it1 -> IconUtils.updateIcon(it1, binding.ivPersonalDetails) } + } + } + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt index ac5e4bd58d..1828eb63be 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYouAcountViewModel.kt @@ -10,6 +10,7 @@ import com.navi.amc.investorapp.base.BaseViewModel import com.navi.amc.investorapp.base.SingleLiveEvent import com.navi.amc.investorapp.response.HomePageResponse import com.navi.amc.investorapp.response.Investor +import com.navi.amc.investorapp.response.ResponseKycDocuments import com.navi.amc.investorapp.retrofit.ApiUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -19,9 +20,8 @@ class SetupYouAcountViewModel : BaseViewModel() { private val _onClick = MutableLiveData() val onCLick: LiveData = _onClick - private val _response = SingleLiveEvent() - val response: SingleLiveEvent = _response - + private val _response = SingleLiveEvent() + val response: SingleLiveEvent = _response private val _investorResponse = SingleLiveEvent() val investorResponse: SingleLiveEvent = _investorResponse @@ -33,10 +33,10 @@ class SetupYouAcountViewModel : BaseViewModel() { _onClick.value = view } - fun hitHomePageApi() { + fun hitKycDocumentsApi() { showProgress() viewModelScope.launch(Dispatchers.IO) { - ApiUtils.callHomePageApi(accessToken, { + ApiUtils.hitKycDocumentsApi({ _response.setValue(it) hideProgress() }, { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt index bba4d120ea..84bd91fb45 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/setup_account/SetupYourActivity.kt @@ -37,9 +37,7 @@ class SetupYourActivity : BaseActivity - with(binding) - { - - sharedPreferences.writeStringValue( - SharedPreferencesKeys.ON_BOARDING_STATUS, - its.investor?.status - ) - - status = its.investor?.status - checkGreenTick() - } - } - }) - viewModel.investorResponse.observe(this, { it.let { its -> with(binding) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SIPPaymentActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SIPPaymentActivity.kt index 4d4ec5d890..e4ef81093c 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SIPPaymentActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SIPPaymentActivity.kt @@ -44,6 +44,9 @@ class SIPPaymentActivity : BaseActivity with(binding) { -// "created_at":"23-08-2021 05:00:46" in Buying Flow -// "created_at":"2021-08-23 04:07 AM" in Redeem Order + if (fundType.isNullOrEmpty()) index.invisible() + else { + index.visible() + index.text = fundType + } investmentAmount.text = "${getString(R.string.rupees)} ${its.amount.toString()}" fundName.text = its.schemeName.toString() @@ -167,7 +173,6 @@ class SIPPaymentActivity : BaseActivity dateConversion(it1) } @@ -175,13 +180,6 @@ class SIPPaymentActivity : BaseActivity() { binding.lifecycleOwner = this } - private val spiId: Int - get() = intent.getIntExtra(EXTRA_DATA, 0) + get() = intent.getIntExtra(EXTRA_ID, 0) + + private val fundType: String? + get() = intent.getStringExtra(EXTRA_DATA) private val sharedPreferences by lazy { SharedPreferencesWriter.getInstance(this) @@ -68,6 +70,7 @@ class SipActivity : BaseActivity() { override fun onStart() { super.onStart() binding.isModifyEnable = false + binding.index.text = fundType if (checkInternetSnackBar(this, binding.sipRoot)) { viewModel.spiId = spiId.toString() binding.minInvestmentText.text = "${getString(R.string.min_investment_rupees)} 500" @@ -168,7 +171,6 @@ class SipActivity : BaseActivity() { viewModel.response.observe(this, { it.let { its -> if (its.installments.size > 0) { - binding.isSipAutoPayFailed = false binding.isSipAutoPayFailed = !(its.installments[0].state.toString() == "confirmed" || its.installments[0].state.toString() == "CONFIRMED" @@ -182,7 +184,7 @@ class SipActivity : BaseActivity() { this.schemeId = its.installments[0].scheme.toString() this.amount = its.installments[0].amount.toString() this.nextInstallment = its.nextInstallment.toString() - viewModel.paymentID = its.installments[0].id.toString() + viewModel.paymentID = its.installments[0].id } else { binding.isSipAutoPayFailed = false } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt index 02c9ebe7ab..c1a8c1aaa3 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/sip/SipViewModel.kt @@ -53,7 +53,7 @@ class SipViewModel : BaseViewModel() { var amount: Double? = 0.0 var accessToken: String? = "" var spiId: String? = "" - var paymentID: String? = "" + var paymentID: Int? = 0 fun hitGetSip() { showProgress() @@ -128,7 +128,7 @@ class SipViewModel : BaseViewModel() { fun reTryCreateOrderApi() { showProgress() val userData = SipLumpsumResponse( - order_id = paymentID?.toInt() + order_id = paymentID ) viewModelScope.launch(Dispatchers.IO) { ApiUtils.reTryCreateOrderApi(userData, accessToken, { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt index 93b37a50a5..6cb2a1be51 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt @@ -7,6 +7,7 @@ import com.navi.amc.investorapp.R @Keep object IconUtils { const val ICON_CHAT = "ICON_CHAT" + const val ICON_DOCUMENT = "ICON_DOCUMENT" const val ICON_SINGLE = "ICON_SINGLE" const val ICON_MARRIED = "ICON_MARRIED" const val ICON_OTHER = "ICON_OTHER" @@ -54,6 +55,7 @@ object IconUtils { private fun getImageFromIconCode(iconCode: String): Int { return when (iconCode) { + ICON_DOCUMENT -> R.drawable.ic_kyc_documents ICON_CHAT -> R.drawable.ic_chat_svg ICON_SINGLE -> R.drawable.ic_single_svg ICON_MARRIED -> R.drawable.ic_married_svg diff --git a/navi-amc/src/main/res/drawable/aadhaar.png b/navi-amc/src/main/res/drawable/aadhaar.png new file mode 100644 index 0000000000000000000000000000000000000000..ffec38dc56e1fa4e0dac8776a0009522e5951006 GIT binary patch literal 4620 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 + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/drawable/ic_dropdown.xml b/navi-amc/src/main/res/drawable/ic_dropdown.xml new file mode 100644 index 0000000000..06132f3a4f --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_dropdown.xml @@ -0,0 +1,9 @@ + + + diff --git a/navi-amc/src/main/res/drawable/ic_kyc_documents.xml b/navi-amc/src/main/res/drawable/ic_kyc_documents.xml new file mode 100644 index 0000000000..42db414784 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_kyc_documents.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_my_investment.xml b/navi-amc/src/main/res/drawable/ic_my_investment.xml index 6b254940be..4855224302 100644 --- a/navi-amc/src/main/res/drawable/ic_my_investment.xml +++ b/navi-amc/src/main/res/drawable/ic_my_investment.xml @@ -1,58 +1,44 @@ - - - - - - - - - - - + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_order_in_progress.xml b/navi-amc/src/main/res/drawable/ic_order_in_progress.xml index 769c8f7f46..7f30f9d75b 100644 --- a/navi-amc/src/main/res/drawable/ic_order_in_progress.xml +++ b/navi-amc/src/main/res/drawable/ic_order_in_progress.xml @@ -1,53 +1,53 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> diff --git a/navi-amc/src/main/res/drawable/married_new.xml b/navi-amc/src/main/res/drawable/married_new.xml new file mode 100644 index 0000000000..2fdff1f579 --- /dev/null +++ b/navi-amc/src/main/res/drawable/married_new.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/yellow_line_png.png b/navi-amc/src/main/res/drawable/yellow_line_png.png new file mode 100644 index 0000000000000000000000000000000000000000..2752ba0276fb1aa5e451185c1e23d6d114faa950 GIT binary patch literal 1059 zcmV+;1l;?HP){o zLww=mju!IWF6flC?sx140h~04Q>yUPS&8G*^vK!;YH+9dBX6`%e`F1EImSmgcblHh zxj9F5;NmZ4d3tHWwcb^F1&*vvVFQ) zk`ya3Zz|+08hR~Lw~41i7v^wsIAN03wdKGLt7hR?X)3f+=5M7LacKT*%%MM(jQ)r( ztu#j@6LBg`vEx8f#pBl=;j>Mz=fjoBFV`Q`r2?ppl=3vDkY#NZHKVJeAB5L z!@$-VV0dn_qzT7{CF0Qh(K4KY_+vR5SNHSyJ&Aw`8>M8{nGx;qqQ+{Gxtj^crm-z3 z30GhwHXC_7)IQq%4u8lyJlh`aKEo0% zYcQ``D*TC_n0p2<#&1|49i?u+5ypYN5e8q>7IY!Su}36LO&1h@j@?AxyyM?T`;C+t d`S~^9+JDnl*XjOq0VDtb002ovPDHLkV1m;k>CpfH literal 0 HcmV?d00001 diff --git a/navi-amc/src/main/res/layout/activity_about_income.xml b/navi-amc/src/main/res/layout/activity_about_income.xml index 5ba4b49e14..91ca21fa6e 100644 --- a/navi-amc/src/main/res/layout/activity_about_income.xml +++ b/navi-amc/src/main/res/layout/activity_about_income.xml @@ -200,7 +200,7 @@ android:id="@+id/ivMarried" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/ic_married_svg" + android:src="@drawable/married_new" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml b/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml index 1e7de88c69..6bf14c90a6 100644 --- a/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml +++ b/navi-amc/src/main/res/layout/activity_buyingflow_sip.xml @@ -34,45 +34,46 @@ android:layout_height="match_parent" android:background="@color/white"> - - - + android:layout_height="wrap_content" + android:background="@color/color_FBFBFB"> - - - + + + - + + + + + + + + + app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + - - - - - - - - - - - - + - + + + app:layout_constraintStart_toEndOf="@id/tvSip" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + + + + + + + + android:text="@={buyingFlowViewModel.investmentamount}" + android:textAlignment="viewStart" + android:textColor="@color/color_1A1A1A" + android:textStyle="bold" + app:layout_constraintBottom_toBottomOf="@id/rupeesText" + app:layout_constraintStart_toEndOf="@id/rupeesText" + app:layout_constraintTop_toTopOf="@id/rupeesText" /> + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/tv5000"> + app:layout_constraintTop_toTopOf="parent"> - - + app:layout_constraintTop_toTopOf="parent" /> - - - + - + - + - - - + - + - - - - - - - - - - - + + + + + + + + + + diff --git a/navi-amc/src/main/res/layout/activity_kyc_documents.xml b/navi-amc/src/main/res/layout/activity_kyc_documents.xml new file mode 100644 index 0000000000..dc786af46b --- /dev/null +++ b/navi-amc/src/main/res/layout/activity_kyc_documents.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/activity_onboarding_loading.xml b/navi-amc/src/main/res/layout/activity_onboarding_loading.xml new file mode 100644 index 0000000000..267fb9d9f6 --- /dev/null +++ b/navi-amc/src/main/res/layout/activity_onboarding_loading.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/activity_otp_verification.xml b/navi-amc/src/main/res/layout/activity_otp_verification.xml index 606a15902f..8b07f949be 100644 --- a/navi-amc/src/main/res/layout/activity_otp_verification.xml +++ b/navi-amc/src/main/res/layout/activity_otp_verification.xml @@ -291,8 +291,10 @@ android:id="@+id/verifyBtn" style="@style/Button_FFCC42" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="@dimen/_48dp" android:layout_marginTop="@dimen/_10dp" + android:gravity="center" + android:textAlignment="center" android:layout_marginBottom="@dimen/_20dp" android:alpha="0.5" android:onClick="@{(v)->otpViewModelBinding.onClick(v)}" diff --git a/navi-amc/src/main/res/layout/activity_payment_sucess.xml b/navi-amc/src/main/res/layout/activity_payment_sucess.xml index b8a2d8cc8d..d9dc676b84 100644 --- a/navi-amc/src/main/res/layout/activity_payment_sucess.xml +++ b/navi-amc/src/main/res/layout/activity_payment_sucess.xml @@ -57,9 +57,10 @@ android:layout_width="match_parent" android:layout_height="@dimen/_0dp" android:layout_marginTop="@dimen/_24dp" + android:layout_marginBottom="@dimen/_10dp" android:background="@color/white" android:fillViewport="true" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/goHome" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/backButton"> @@ -140,16 +141,18 @@ app:layout_constraintTop_toBottomOf="@id/view" tools:text="@tools:sample/lorem/random" /> - @@ -494,44 +497,6 @@ - - - - + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/activity_redemption_order.xml b/navi-amc/src/main/res/layout/activity_redemption_order.xml index bee79ca503..0ee40828c9 100644 --- a/navi-amc/src/main/res/layout/activity_redemption_order.xml +++ b/navi-amc/src/main/res/layout/activity_redemption_order.xml @@ -413,7 +413,9 @@ android:id="@+id/goToHome" style="@style/Button_FFCC42" android:layout_width="match_parent" - android:layout_height="wrap_content" + android:gravity="center" + android:textAlignment="center" + android:layout_height="@dimen/_48dp" android:layout_marginTop="@dimen/_30dp" android:layout_marginBottom="@dimen/_20dp" android:onClick="@{(v)->redemptionViewModel.onClick(v)}" diff --git a/navi-amc/src/main/res/layout/activity_sell_my_fund.xml b/navi-amc/src/main/res/layout/activity_sell_my_fund.xml index 2a1c078332..a0ba202cb4 100644 --- a/navi-amc/src/main/res/layout/activity_sell_my_fund.xml +++ b/navi-amc/src/main/res/layout/activity_sell_my_fund.xml @@ -126,13 +126,15 @@ android:id="@+id/fundType" style="@style/TextStyle.tv_size_14sp" android:layout_width="@dimen/_0dp" + android:maxLines="3" + android:layout_height="wrap_content" android:layout_marginTop="@dimen/_4dp" android:textColor="@color/color_A3A3AB" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@id/fundName" app:layout_constraintTop_toBottomOf="@id/fundName" - tools:text="@string/invest_in_top_50_companies_of_india" /> + tools:text="@tools:sample/lorem/random" /> - + app:srcCompat="@drawable/ic_back_button" /> - diff --git a/navi-amc/src/main/res/layout/activity_sippayment.xml b/navi-amc/src/main/res/layout/activity_sippayment.xml index b1b42b5a10..3d15073559 100644 --- a/navi-amc/src/main/res/layout/activity_sippayment.xml +++ b/navi-amc/src/main/res/layout/activity_sippayment.xml @@ -138,17 +138,20 @@ app:layout_constraintTop_toBottomOf="@id/view" tools:text="@tools:sample/lorem/random" /> - - + app:srcCompat="@drawable/ic_back_button" /> @@ -370,7 +370,8 @@ android:layout_marginTop="@dimen/_16dp" android:visibility="visible" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/cardKYC"> + app:layout_constraintTop_toBottomOf="@id/cardKYC" + > @@ -519,7 +520,7 @@ android:id="@+id/ivInvestment" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/investment" + android:src="@drawable/ic_my_investment" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -528,10 +529,11 @@ style="@style/Textview_1A1A1A_bold_14sp" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/_10dp" + android:layout_marginStart="@dimen/_8dp" android:text="@string/your_investment" + app:layout_constraintBottom_toBottomOf="@id/ivInvestment" app:layout_constraintStart_toEndOf="@+id/ivInvestment" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="@id/ivInvestment" /> + tools:text="500000000000000" /> + app:layout_constraintTop_toTopOf="@id/orderText" /> - - + android:padding="@dimen/_10dp"> + app:layout_constraintTop_toTopOf="parent" + tools:text="@tools:sample/lorem/random" /> + app:layout_constraintStart_toEndOf="@id/tvName" + app:layout_constraintTop_toTopOf="parent" /> \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/layout_kyc_documents_list.xml b/navi-amc/src/main/res/layout/layout_kyc_documents_list.xml new file mode 100644 index 0000000000..3ed8d0deb2 --- /dev/null +++ b/navi-amc/src/main/res/layout/layout_kyc_documents_list.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/mflisting_rec_design.xml b/navi-amc/src/main/res/layout/mflisting_rec_design.xml index 59ac7b562a..d1d5614878 100644 --- a/navi-amc/src/main/res/layout/mflisting_rec_design.xml +++ b/navi-amc/src/main/res/layout/mflisting_rec_design.xml @@ -1,132 +1,135 @@ + android:background="@drawable/card_view_backgnd"> - - + tools:text="@tools:sample/lorem/random" /> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/btnIndex" /> - - + android:layout_marginTop="@dimen/_15dp" + android:text="Fund Size" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/view1" /> - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + android:textAlignment="center" + android:paddingHorizontal="@dimen/_6dp" + android:maxLines="1" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/view1" /> @@ -136,25 +139,26 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_20dp" - app:layout_constraintTop_toBottomOf="@id/ConstraintFund" - android:padding="@dimen/_8dp" android:background="@drawable/bg_rectangle_fef3d6" - app:layout_constraintBottom_toBottomOf="parent"> + android:padding="@dimen/_8dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@id/ConstraintFund"> - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> diff --git a/navi-amc/src/main/res/layout/mutualfund_activity.xml b/navi-amc/src/main/res/layout/mutualfund_activity.xml index 534a277de7..7105f809af 100644 --- a/navi-amc/src/main/res/layout/mutualfund_activity.xml +++ b/navi-amc/src/main/res/layout/mutualfund_activity.xml @@ -36,6 +36,10 @@ name="risk" type="Boolean" /> + + @@ -46,7 +50,58 @@ android:id="@+id/mutualfundParent" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#FBFBFB"> + android:background="@color/color_FBFBFB"> + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/toolbar"> + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/_8dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - + app:layout_constraintTop_toTopOf="parent"> - - - - + app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + android:layout_marginTop="@dimen/_8dp" + android:text="Current Nav" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/tvFundSize" + tools:text="\u20B9 100 cr" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginTop="@dimen/_16dp" + android:text="Minimum Investment Amount" + app:layout_constraintStart_toEndOf="@+id/ivMinimumInvestmentAmt" + app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="@+id/tvMinimumInvestmentAmt" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1214,8 +1405,10 @@ android:layout_width="match_parent" android:layout_height="@dimen/_48dp" android:layout_margin="@dimen/_10dp" + android:gravity="center" android:onClick="@{(v)->mutualfundviewmodel.onClick(v)}" android:text="@string/invest_now" + android:textAlignment="center" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml b/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml index dfb928fd9c..5d0c8ddee8 100644 --- a/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml +++ b/navi-amc/src/main/res/layout/navi_nifty_fifty_index_fund_view.xml @@ -57,6 +57,7 @@ style="@style/Textview_22223D_regular_14sp" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:fontFamily="@font/navisans_bold" android:layout_marginTop="@dimen/_24dp" android:drawableEnd="@drawable/ic_right_side_arrow_svg" android:drawablePadding="@dimen/_8dp" diff --git a/navi-amc/src/main/res/layout/view_progress_header.xml b/navi-amc/src/main/res/layout/view_progress_header.xml index ce1f9ede3a..089cab0e00 100644 --- a/navi-amc/src/main/res/layout/view_progress_header.xml +++ b/navi-amc/src/main/res/layout/view_progress_header.xml @@ -7,19 +7,18 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + app:srcCompat="@drawable/ic_back_button" /> #14BC51 #EE7765 #225156 + #FBFBFB #99000000 #E5E5E5 #392D40 diff --git a/navi-amc/src/main/res/values/strings.xml b/navi-amc/src/main/res/values/strings.xml index a24857f843..c4f8a7735c 100644 --- a/navi-amc/src/main/res/values/strings.xml +++ b/navi-amc/src/main/res/values/strings.xml @@ -462,6 +462,7 @@ Your information is 100% safe with us Please enter ifsc Please enter valid ifsc + Please enter bank name Please enter account number Please select verify account number Account number does not match @@ -470,7 +471,7 @@ Please try again This is taking too long to verify - ]]> + Employment Details Please select source of income Please select occupation @@ -544,6 +545,7 @@ Speak the digits below while recording Tips for great video Retake video + Complete your account setup\nto invest in Navi ICICI BANK HDFC BANK diff --git a/navi-analytics/build.gradle b/navi-analytics/build.gradle index d538f474df..d45b3396a0 100644 --- a/navi-analytics/build.gradle +++ b/navi-analytics/build.gradle @@ -52,5 +52,5 @@ dependencies { // Firebase SDK for Google Analytics (Kotlin) implementation 'com.google.firebase:firebase-crashlytics:17.3.0' // NeoEyed SDK - implementation project(":neoeyed-sdk-release-3.3.0") + implementation project(":neoeyed-sdk-release-3.3.1") } \ No newline at end of file diff --git a/navi-analytics/libs/neoeyed-sdk-release-3.3.0.aar b/navi-analytics/libs/neoeyed-sdk-release-3.3.0.aar deleted file mode 100644 index 414b3c7a86ad966f5000b7746ceebd59f15743bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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 diff --git a/neoeyed-sdk-release-3.3.0/build.gradle b/neoeyed-sdk-release-3.3.0/build.gradle deleted file mode 100644 index 9027cec9ec..0000000000 --- a/neoeyed-sdk-release-3.3.0/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -configurations.maybeCreate("default") -artifacts.add("default", file('neoeyed-sdk-release-3.3.0.aar')) \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.0/neoeyed-sdk-release-3.3.0.aar b/neoeyed-sdk-release-3.3.0/neoeyed-sdk-release-3.3.0.aar deleted file mode 100644 index 414b3c7a86ad966f5000b7746ceebd59f15743bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41667 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 diff --git a/neoeyed-sdk-release-3.3.1/build.gradle b/neoeyed-sdk-release-3.3.1/build.gradle new file mode 100644 index 0000000000..cf7115a05a --- /dev/null +++ b/neoeyed-sdk-release-3.3.1/build.gradle @@ -0,0 +1,2 @@ +configurations.maybeCreate("default") +artifacts.add("default", file('neoeyed-sdk-release-3.3.1.aar')) \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.1/neoeyed-sdk-release-3.3.1.aar b/neoeyed-sdk-release-3.3.1/neoeyed-sdk-release-3.3.1.aar new file mode 100644 index 0000000000000000000000000000000000000000..39ec2ec568dfdbd974894d1a25f3fd62638699a3 GIT binary patch literal 41709 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 literal 0 HcmV?d00001 diff --git a/settings.gradle b/settings.gradle index 9eb06c0718..42b8ce75b0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,5 @@ include ':app', ':digio-esign-v2.8.0', ':digio-kyc-1.0.13', ':pulse' -include ':neoeyed-sdk-release-3.3.0' +include ':neoeyed-sdk-release-3.3.1' include ':finoramic-androidx-sdk' rootProject.name='android-customer-app' include ':navi-amc' From 122a0e4ff5db44e485b409f56c6cf6e7f94390db Mon Sep 17 00:00:00 2001 From: Satish Prasad Date: Tue, 26 Oct 2021 20:49:46 +0530 Subject: [PATCH 39/53] fix (#1692) --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 93995603aa..9c436ad170 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,8 +37,8 @@ RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup && \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests && \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup; \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests; \ ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup \ \ elif [ $FLAVOR = DEV ] ; then \ From 734f40b3ba7d75232a9bf5665301b713001a7b22 Mon Sep 17 00:00:00 2001 From: satish_p Date: Tue, 26 Oct 2021 21:00:54 +0530 Subject: [PATCH 40/53] fix --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9c436ad170..18152e3e5a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,7 +39,7 @@ RUN bash -c " \ ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup; \ ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests; \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup; \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ From f2c803323fa62993585bcdbd09745cc1830ae729 Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Wed, 27 Oct 2021 12:13:26 +0530 Subject: [PATCH 41/53] fixed dockerfile --- Dockerfile | 5 +- .../naviapp/homeLoan/BalanceTransferTest.kt | 2 +- .../java/com/naviapp/homeLoan/HomeLoanTest.kt | 2 +- .../naviapp/newPersonalLoan/NewLoanTest.kt | 4 +- .../java/com/naviapp/CustomerDataCleanup.kt | 124 ++++----- .../07950dad510114f06b0ab0254d6fcc02.bin | 0 .../11dd3689dcd1db21444f850793ffcb44.bin | 1 + ...fied-neoeyed-sdk-release-3.3.0-runtime.jar | Bin 0 -> 81984 bytes .../1e2fa81fb8fb06134219be2a78448dec.bin | 1 + .../AndroidManifest.xml | 40 +++ .../build/gradle/aar-metadata.properties | 2 + .../jetified-neoeyed-sdk-release-3.3.0/R.txt | 261 ++++++++++++++++++ .../jars/classes.jar | Bin 0 -> 41569 bytes .../1f5f78d5557c3e326a8ab2589f505ea0.bin | 0 .../2f46d3830fd7946ebbc1e146441e543d.bin | 0 .../38967fc665505e8c540a94462a36c37e.bin | 1 + .../jetified-neoeyed-sdk-release-3.3.0.aar | Bin 0 -> 41667 bytes .../44b33cea5d6604c77ca4d9455680519f.bin | 0 .../4b26b726fd37ed8de3bedc079e5f0c37.bin | 0 .../4cab0bff6107eb794e3b98757b452db1.bin | 0 .../50a3a69edb8682e73bf3c93642b3ea19.bin | 0 .../549d0bfabf1c7f65e595e0e9c9b52548.bin | 0 .../54f42d2ef6ac1f30d729d25bc34fa8f4.bin | 1 + .../com.neoeyed.sdk-r.txt | 218 +++++++++++++++ .../563053da818aec3ec0e6ccd6aec2fef9.bin | 1 + .../592d52135a1d89f0355df3f8612b16ee.bin | 1 + .../5ad67a7f3e2c3eb55e8f6fc9ab233043.bin | 1 + .../jetified-neoeyed-sdk-release-3.3.0.aar | Bin 0 -> 41667 bytes .../5ef082368261c245c087de2937e3c034.bin | 1 + .../6c8d99dc3bc42b494f56987283f891ef.bin | 1 + .../70f43bb24b5daa7744026677ef56376c.bin | 1 + .../com.neoeyed.sdk-r.txt | 218 +++++++++++++++ .../72d39ae23f4eaba603c92baaaa5f14df.bin | 0 .../7499cbc2de8c59eac003122c4b5373c5.bin | 0 .../8d69b51f66a1e9a54c48de0781412442.bin | 0 .../99968062b0dab5a0a22113803a4813fa.bin | 1 + ...jetified-neoeyed-sdk-release-3.3.0-api.jar | Bin 0 -> 99542 bytes .../99db03172cf621bc5dbca122a05a6785.bin | 1 + ...jetified-neoeyed-sdk-release-3.3.0-api.jar | Bin 0 -> 99542 bytes .../a858a74b300777c0a71d508744235191.bin | 1 + .../AndroidManifest.xml | 40 +++ .../build/gradle/aar-metadata.properties | 2 + .../jetified-neoeyed-sdk-release-3.3.0/R.txt | 261 ++++++++++++++++++ .../jars/classes.jar | Bin 0 -> 41569 bytes .../ac5b1bc89ff0ee86ce1d7d616c40e81e.bin | 1 + .../b6714f2b0b8158c20240be596c42d282.bin | 0 .../bcf246c529773fd94f26134acf652247.bin | 0 .../cca7d1af9b62aa5ecdd672144037024d.bin | 1 + .../d18896a375b6eea771b7cae3694493cf.bin | 0 .../dd858794245deb81244da56017988eda.bin | 0 .../df0f1d616d054787dc4a17e42369244d.bin | 1 + .../ee60cae43a34155aa6631687dc917c56.bin | 1 + .../f3a7ab3276b1e57d6541070e58388c67.bin | 1 + ...fied-neoeyed-sdk-release-3.3.0-runtime.jar | Bin 0 -> 81984 bytes 54 files changed, 1114 insertions(+), 83 deletions(-) create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/07950dad510114f06b0ab0254d6fcc02.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44/jetified-neoeyed-sdk-release-3.3.0-runtime.jar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/R.txt create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/1f5f78d5557c3e326a8ab2589f505ea0.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/2f46d3830fd7946ebbc1e146441e543d.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e/jetified-neoeyed-sdk-release-3.3.0.aar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/44b33cea5d6604c77ca4d9455680519f.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4b26b726fd37ed8de3bedc079e5f0c37.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/4cab0bff6107eb794e3b98757b452db1.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/50a3a69edb8682e73bf3c93642b3ea19.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/549d0bfabf1c7f65e595e0e9c9b52548.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4/com.neoeyed.sdk-r.txt create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/563053da818aec3ec0e6ccd6aec2fef9.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/592d52135a1d89f0355df3f8612b16ee.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043/jetified-neoeyed-sdk-release-3.3.0.aar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/5ef082368261c245c087de2937e3c034.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/6c8d99dc3bc42b494f56987283f891ef.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c/com.neoeyed.sdk-r.txt create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/72d39ae23f4eaba603c92baaaa5f14df.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/7499cbc2de8c59eac003122c4b5373c5.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/8d69b51f66a1e9a54c48de0781412442.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa/jetified-neoeyed-sdk-release-3.3.0-api.jar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785/jetified-neoeyed-sdk-release-3.3.0-api.jar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/R.txt create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/ac5b1bc89ff0ee86ce1d7d616c40e81e.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/b6714f2b0b8158c20240be596c42d282.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/bcf246c529773fd94f26134acf652247.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/cca7d1af9b62aa5ecdd672144037024d.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/d18896a375b6eea771b7cae3694493cf.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/dd858794245deb81244da56017988eda.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/df0f1d616d054787dc4a17e42369244d.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/ee60cae43a34155aa6631687dc917c56.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67.bin create mode 100644 neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67/jetified-neoeyed-sdk-release-3.3.0-runtime.jar diff --git a/Dockerfile b/Dockerfile index 93995603aa..ad367b5232 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,10 +36,7 @@ RUN echo ${RELEASE_STORE_FILE} | base64 -d >> app/navi-release-key.jks RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ - - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup && \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests && \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup -PtestType=\"e2e\" executeE2ETests; \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ diff --git a/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt b/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt index 6962c29cea..247de4cfb0 100644 --- a/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt @@ -33,7 +33,7 @@ class BalanceTransferTest: TestBase() { val browserStack: BrowserStack = JsonParser.getData(this.javaClass.getResourceAsStream("/PhoneNumber.json")) - val phoneNumber = browserStack.e2e.phoneNumberBalanceTransfer + val phoneNumber = "5555525528" val basicDetails = newLoanDetails.homeLoanBasicDetails val balanceTransferDetails = newLoanDetails.balanceTransferDetails val homeLoanWorkDetails = newLoanDetails.homeLoanWorkDetails diff --git a/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt b/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt index cdb7e3ac1a..1df4ce5615 100644 --- a/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt @@ -32,7 +32,7 @@ class HomeLoanTest : TestBase() { val browserStack: BrowserStack = JsonParser.getData(this.javaClass.getResourceAsStream("/PhoneNumber.json")) - val phoneNumber = browserStack.e2e.phoneNumberHomeLoan + val phoneNumber = "5555525527" val basicDetails = newLoanDetails.homeLoanBasicDetails val propertyDetails = newLoanDetails.propertyDetails val homeLoanWorkDetails = newLoanDetails.homeLoanWorkDetails diff --git a/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt b/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt index a7f2a835a7..55ca406a3e 100644 --- a/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt @@ -36,8 +36,8 @@ class NewLoanTest : TestBase() { val browserStack: BrowserStack = JsonParser.getData(this.javaClass.getResourceAsStream("/PhoneNumber.json")) - private val phoneNumberNewLoan = browserStack.e2e.phoneNumberNewLoan - private val phoneNumberForeclosureLoan = browserStack.e2e.phoneNumberForeclosureLoan + private val phoneNumberNewLoan = "5555525525" + private val phoneNumberForeclosureLoan = "5555525526" @Test diff --git a/app/src/test/java/com/naviapp/CustomerDataCleanup.kt b/app/src/test/java/com/naviapp/CustomerDataCleanup.kt index 8523b3e2cf..3e9ea109c4 100644 --- a/app/src/test/java/com/naviapp/CustomerDataCleanup.kt +++ b/app/src/test/java/com/naviapp/CustomerDataCleanup.kt @@ -29,34 +29,8 @@ class CustomerDataCleanup { @Test fun cleanUpCustomer() { - val gson = Gson() - for (i in 1..6) { - val phoneNumber = getRandomMockedPhoneNumber() - when (i) { - 1 -> { - browserStack.e2e.phoneNumberNewLoan = phoneNumber - } - 2 -> { - browserStack.e2e.phoneNumberForeclosureLoan = phoneNumber - } - 3 -> { - browserStack.e2e.phoneNumberHomeLoan = phoneNumber - } - 4 -> { - browserStack.e2e.phoneNumberBalanceTransfer = phoneNumber - } - 5 -> { - browserStack.e2e.phoneNumberMockNameMismatch = phoneNumber - } - 6 -> { - browserStack.e2e.phoneNumberMockSameName = phoneNumber - } - } - var jsonString: String = gson.toJson(browserStack) - val writeJsonFilePath = File( - Paths.get(RootDirectory, "src/androidTestDev/resources/PhoneNumber.json").toString() - ) - writeJsonFilePath.writeText(jsonString) + for (counter in 25..33) { + val phoneNumber = "55555255$counter" CustomerReadDbClient.cleanUpCustomerReadData(phoneNumber) val customerId = CustomersDbClient.getCustomerReferenceId(phoneNumber) if (customerId.isNotEmpty() || customerId.isNotBlank()) { @@ -66,55 +40,55 @@ class CustomerDataCleanup { } } - fun getRandomMockedPhoneNumber(): String { - var phoneNumber: String +// fun getRandomMockedPhoneNumber(): String { +// var phoneNumber: String +// +// do phoneNumber = "55555${generateDigits(5)}" +// while (phoneNumber.contains("55555555")) +// +// return phoneNumber +// } - do phoneNumber = "55555${generateDigits(5)}" - while (phoneNumber.contains("55555555")) +// fun generateDigits(n: Int): Long { +// val m = 10.0.pow(n - 1.toDouble()).toLong() +// return m + Random.nextLong(9 * m) +// } - return phoneNumber - } - - fun generateDigits(n: Int): Long { - val m = 10.0.pow(n - 1.toDouble()).toLong() - return m + Random.nextLong(9 * m) - } - - @Test - fun `Mock Data Setup for Name mismatch`() { - val appVersionCode = "73" - val androidVersion = "Android_10" - val phoneNumber = mockDataPhoneNumber.e2e.phoneNumberMockNameMismatch - val newCustomerReferenceId: String = MockReferenceIds.ReferenceIdNameMismatch - val deviceId = generateDigits(16).toString() - val sessionToken: String - with(OtpClient(phoneNumber, deviceId, appVersionCode, androidVersion)) { - registerDevice() - sessionToken = getSessionToken() - } - var customerReferenceId: String = CustomersDbClient.getCustomerReferenceId(phoneNumber) - CustomersDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) - AuthServiceDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) - - } - - @Test - fun `Mock Data Setup for Same Name`() { - val appVersionCode = "73" - val androidVersion = "Android_10" - val phoneNumber = mockDataPhoneNumber.e2e.phoneNumberMockSameName - val newCustomerReferenceId: String = MockReferenceIds.ReferenceIdSameName - val deviceId = generateDigits(16).toString() - var sessionToken: String - with(OtpClient(phoneNumber, deviceId, appVersionCode, androidVersion)) { - registerDevice() - sessionToken = getSessionToken() - } - val customerReferenceId: String = CustomersDbClient.getCustomerReferenceId(phoneNumber) - CustomersDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) - AuthServiceDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) - - } +// @Test +// fun `Mock Data Setup for Name mismatch`() { +// val appVersionCode = "73" +// val androidVersion = "Android_10" +// val phoneNumber = mockDataPhoneNumber.e2e.phoneNumberMockNameMismatch +// val newCustomerReferenceId: String = MockReferenceIds.ReferenceIdNameMismatch +// val deviceId = generateDigits(16).toString() +// val sessionToken: String +// with(OtpClient(phoneNumber, deviceId, appVersionCode, androidVersion)) { +// registerDevice() +// sessionToken = getSessionToken() +// } +// var customerReferenceId: String = CustomersDbClient.getCustomerReferenceId(phoneNumber) +// CustomersDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) +// AuthServiceDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) +// +// } +// +// @Test +// fun `Mock Data Setup for Same Name`() { +// val appVersionCode = "73" +// val androidVersion = "Android_10" +// val phoneNumber = mockDataPhoneNumber.e2e.phoneNumberMockSameName +// val newCustomerReferenceId: String = MockReferenceIds.ReferenceIdSameName +// val deviceId = generateDigits(16).toString() +// var sessionToken: String +// with(OtpClient(phoneNumber, deviceId, appVersionCode, androidVersion)) { +// registerDevice() +// sessionToken = getSessionToken() +// } +// val customerReferenceId: String = CustomersDbClient.getCustomerReferenceId(phoneNumber) +// CustomersDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) +// AuthServiceDbClient.updateCustomerReferenceId(newCustomerReferenceId,customerReferenceId) +// +// } // @Test // fun BrowserStackRun(){ diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/07950dad510114f06b0ab0254d6fcc02.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/07950dad510114f06b0ab0254d6fcc02.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44.bin new file mode 100644 index 0000000000..decd0066b4 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0-runtime.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44/jetified-neoeyed-sdk-release-3.3.0-runtime.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/11dd3689dcd1db21444f850793ffcb44/jetified-neoeyed-sdk-release-3.3.0-runtime.jar new file mode 100644 index 0000000000000000000000000000000000000000..a676d45c96247a7f6a6c96678d1db7584ce28539 GIT binary patch literal 81984 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec.bin new file mode 100644 index 0000000000..f527fe3967 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml new file mode 100644 index 0000000000..e814731d3f --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties new file mode 100644 index 0000000000..d8560bd4e2 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties @@ -0,0 +1,2 @@ +aarFormatVersion=1.0 +aarMetadataVersion=1.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/R.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/R.txt new file mode 100644 index 0000000000..c68b87c7af --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/R.txt @@ -0,0 +1,261 @@ +int anim fragment_close_enter 0x0 +int anim fragment_close_exit 0x0 +int anim fragment_fade_enter 0x0 +int anim fragment_fade_exit 0x0 +int anim fragment_fast_out_extra_slow_in 0x0 +int anim fragment_open_enter 0x0 +int anim fragment_open_exit 0x0 +int attr alpha 0x0 +int attr buttonSize 0x0 +int attr circleCrop 0x0 +int attr colorScheme 0x0 +int attr font 0x0 +int attr fontProviderAuthority 0x0 +int attr fontProviderCerts 0x0 +int attr fontProviderFetchStrategy 0x0 +int attr fontProviderFetchTimeout 0x0 +int attr fontProviderPackage 0x0 +int attr fontProviderQuery 0x0 +int attr fontStyle 0x0 +int attr fontVariationSettings 0x0 +int attr fontWeight 0x0 +int attr imageAspectRatio 0x0 +int attr imageAspectRatioAdjust 0x0 +int attr scopeUris 0x0 +int attr ttcIndex 0x0 +int color common_google_signin_btn_text_dark 0x0 +int color common_google_signin_btn_text_dark_default 0x0 +int color common_google_signin_btn_text_dark_disabled 0x0 +int color common_google_signin_btn_text_dark_focused 0x0 +int color common_google_signin_btn_text_dark_pressed 0x0 +int color common_google_signin_btn_text_light 0x0 +int color common_google_signin_btn_text_light_default 0x0 +int color common_google_signin_btn_text_light_disabled 0x0 +int color common_google_signin_btn_text_light_focused 0x0 +int color common_google_signin_btn_text_light_pressed 0x0 +int color common_google_signin_btn_tint 0x0 +int color notification_action_color_filter 0x0 +int color notification_icon_bg_color 0x0 +int color ripple_material_light 0x0 +int color secondary_text_default_material_light 0x0 +int dimen compat_button_inset_horizontal_material 0x0 +int dimen compat_button_inset_vertical_material 0x0 +int dimen compat_button_padding_horizontal_material 0x0 +int dimen compat_button_padding_vertical_material 0x0 +int dimen compat_control_corner_material 0x0 +int dimen compat_notification_large_icon_max_height 0x0 +int dimen compat_notification_large_icon_max_width 0x0 +int dimen notification_action_icon_size 0x0 +int dimen notification_action_text_size 0x0 +int dimen notification_big_circle_margin 0x0 +int dimen notification_content_margin_start 0x0 +int dimen notification_large_icon_height 0x0 +int dimen notification_large_icon_width 0x0 +int dimen notification_main_column_padding_top 0x0 +int dimen notification_media_narrow_margin 0x0 +int dimen notification_right_icon_size 0x0 +int dimen notification_right_side_padding_top 0x0 +int dimen notification_small_icon_background_padding 0x0 +int dimen notification_small_icon_size_as_large 0x0 +int dimen notification_subtext_size 0x0 +int dimen notification_top_pad 0x0 +int dimen notification_top_pad_large_text 0x0 +int drawable common_full_open_on_phone 0x0 +int drawable common_google_signin_btn_icon_dark 0x0 +int drawable common_google_signin_btn_icon_dark_focused 0x0 +int drawable common_google_signin_btn_icon_dark_normal 0x0 +int drawable common_google_signin_btn_icon_dark_normal_background 0x0 +int drawable common_google_signin_btn_icon_disabled 0x0 +int drawable common_google_signin_btn_icon_light 0x0 +int drawable common_google_signin_btn_icon_light_focused 0x0 +int drawable common_google_signin_btn_icon_light_normal 0x0 +int drawable common_google_signin_btn_icon_light_normal_background 0x0 +int drawable common_google_signin_btn_text_dark 0x0 +int drawable common_google_signin_btn_text_dark_focused 0x0 +int drawable common_google_signin_btn_text_dark_normal 0x0 +int drawable common_google_signin_btn_text_dark_normal_background 0x0 +int drawable common_google_signin_btn_text_disabled 0x0 +int drawable common_google_signin_btn_text_light 0x0 +int drawable common_google_signin_btn_text_light_focused 0x0 +int drawable common_google_signin_btn_text_light_normal 0x0 +int drawable common_google_signin_btn_text_light_normal_background 0x0 +int drawable googleg_disabled_color_18 0x0 +int drawable googleg_standard_color_18 0x0 +int drawable notification_action_background 0x0 +int drawable notification_bg 0x0 +int drawable notification_bg_low 0x0 +int drawable notification_bg_low_normal 0x0 +int drawable notification_bg_low_pressed 0x0 +int drawable notification_bg_normal 0x0 +int drawable notification_bg_normal_pressed 0x0 +int drawable notification_icon_background 0x0 +int drawable notification_template_icon_bg 0x0 +int drawable notification_template_icon_low_bg 0x0 +int drawable notification_tile_bg 0x0 +int drawable notify_panel_notification_icon_bg 0x0 +int id accessibility_action_clickable_span 0x0 +int id accessibility_custom_action_0 0x0 +int id accessibility_custom_action_1 0x0 +int id accessibility_custom_action_10 0x0 +int id accessibility_custom_action_11 0x0 +int id accessibility_custom_action_12 0x0 +int id accessibility_custom_action_13 0x0 +int id accessibility_custom_action_14 0x0 +int id accessibility_custom_action_15 0x0 +int id accessibility_custom_action_16 0x0 +int id accessibility_custom_action_17 0x0 +int id accessibility_custom_action_18 0x0 +int id accessibility_custom_action_19 0x0 +int id accessibility_custom_action_2 0x0 +int id accessibility_custom_action_20 0x0 +int id accessibility_custom_action_21 0x0 +int id accessibility_custom_action_22 0x0 +int id accessibility_custom_action_23 0x0 +int id accessibility_custom_action_24 0x0 +int id accessibility_custom_action_25 0x0 +int id accessibility_custom_action_26 0x0 +int id accessibility_custom_action_27 0x0 +int id accessibility_custom_action_28 0x0 +int id accessibility_custom_action_29 0x0 +int id accessibility_custom_action_3 0x0 +int id accessibility_custom_action_30 0x0 +int id accessibility_custom_action_31 0x0 +int id accessibility_custom_action_4 0x0 +int id accessibility_custom_action_5 0x0 +int id accessibility_custom_action_6 0x0 +int id accessibility_custom_action_7 0x0 +int id accessibility_custom_action_8 0x0 +int id accessibility_custom_action_9 0x0 +int id action_container 0x0 +int id action_divider 0x0 +int id action_image 0x0 +int id action_text 0x0 +int id actions 0x0 +int id adjust_height 0x0 +int id adjust_width 0x0 +int id async 0x0 +int id auto 0x0 +int id blocking 0x0 +int id chronometer 0x0 +int id dark 0x0 +int id dialog_button 0x0 +int id forever 0x0 +int id fragment_container_view_tag 0x0 +int id icon 0x0 +int id icon_group 0x0 +int id icon_only 0x0 +int id info 0x0 +int id italic 0x0 +int id light 0x0 +int id line1 0x0 +int id line3 0x0 +int id none 0x0 +int id normal 0x0 +int id notification_background 0x0 +int id notification_main_column 0x0 +int id notification_main_column_container 0x0 +int id right_icon 0x0 +int id right_side 0x0 +int id standard 0x0 +int id tag_accessibility_actions 0x0 +int id tag_accessibility_clickable_spans 0x0 +int id tag_accessibility_heading 0x0 +int id tag_accessibility_pane_title 0x0 +int id tag_screen_reader_focusable 0x0 +int id tag_transition_group 0x0 +int id tag_unhandled_key_event_manager 0x0 +int id tag_unhandled_key_listeners 0x0 +int id text 0x0 +int id text2 0x0 +int id time 0x0 +int id title 0x0 +int id visible_removing_fragment_view_tag 0x0 +int id wide 0x0 +int integer google_play_services_version 0x0 +int integer status_bar_notification_info_maxnum 0x0 +int layout custom_dialog 0x0 +int layout notification_action 0x0 +int layout notification_action_tombstone 0x0 +int layout notification_template_custom_big 0x0 +int layout notification_template_icon_group 0x0 +int layout notification_template_part_chronometer 0x0 +int layout notification_template_part_time 0x0 +int string common_google_play_services_enable_button 0x0 +int string common_google_play_services_enable_text 0x0 +int string common_google_play_services_enable_title 0x0 +int string common_google_play_services_install_button 0x0 +int string common_google_play_services_install_text 0x0 +int string common_google_play_services_install_title 0x0 +int string common_google_play_services_notification_channel_name 0x0 +int string common_google_play_services_notification_ticker 0x0 +int string common_google_play_services_unknown_issue 0x0 +int string common_google_play_services_unsupported_text 0x0 +int string common_google_play_services_update_button 0x0 +int string common_google_play_services_update_text 0x0 +int string common_google_play_services_update_title 0x0 +int string common_google_play_services_updating_text 0x0 +int string common_google_play_services_wear_update_text 0x0 +int string common_open_on_phone 0x0 +int string common_signin_button_text 0x0 +int string common_signin_button_text_long 0x0 +int string status_bar_notification_info_overflow 0x0 +int style TextAppearance_Compat_Notification 0x0 +int style TextAppearance_Compat_Notification_Info 0x0 +int style TextAppearance_Compat_Notification_Line2 0x0 +int style TextAppearance_Compat_Notification_Time 0x0 +int style TextAppearance_Compat_Notification_Title 0x0 +int style Widget_Compat_NotificationActionContainer 0x0 +int style Widget_Compat_NotificationActionText 0x0 +int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5 } +int styleable ColorStateListItem_alpha 0 +int styleable ColorStateListItem_android_alpha 1 +int styleable ColorStateListItem_android_color 2 +int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FontFamily_fontProviderAuthority 0 +int styleable FontFamily_fontProviderCerts 1 +int styleable FontFamily_fontProviderFetchStrategy 2 +int styleable FontFamily_fontProviderFetchTimeout 3 +int styleable FontFamily_fontProviderPackage 4 +int styleable FontFamily_fontProviderQuery 5 +int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FontFamilyFont_android_font 0 +int styleable FontFamilyFont_android_fontStyle 1 +int styleable FontFamilyFont_android_fontVariationSettings 2 +int styleable FontFamilyFont_android_fontWeight 3 +int styleable FontFamilyFont_android_ttcIndex 4 +int styleable FontFamilyFont_font 5 +int styleable FontFamilyFont_fontStyle 6 +int styleable FontFamilyFont_fontVariationSettings 7 +int styleable FontFamilyFont_fontWeight 8 +int styleable FontFamilyFont_ttcIndex 9 +int[] styleable Fragment { 0x10100d0, 0x1010003, 0x10100d1 } +int styleable Fragment_android_id 0 +int styleable Fragment_android_name 1 +int styleable Fragment_android_tag 2 +int[] styleable FragmentContainerView { 0x1010003, 0x10100d1 } +int styleable FragmentContainerView_android_name 0 +int styleable FragmentContainerView_android_tag 1 +int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } +int styleable GradientColor_android_centerColor 0 +int styleable GradientColor_android_centerX 1 +int styleable GradientColor_android_centerY 2 +int styleable GradientColor_android_endColor 3 +int styleable GradientColor_android_endX 4 +int styleable GradientColor_android_endY 5 +int styleable GradientColor_android_gradientRadius 6 +int styleable GradientColor_android_startColor 7 +int styleable GradientColor_android_startX 8 +int styleable GradientColor_android_startY 9 +int styleable GradientColor_android_tileMode 10 +int styleable GradientColor_android_type 11 +int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } +int styleable GradientColorItem_android_color 0 +int styleable GradientColorItem_android_offset 1 +int[] styleable LoadingImageView { 0x0, 0x0, 0x0 } +int styleable LoadingImageView_circleCrop 0 +int styleable LoadingImageView_imageAspectRatio 1 +int styleable LoadingImageView_imageAspectRatioAdjust 2 +int[] styleable SignInButton { 0x0, 0x0, 0x0 } +int styleable SignInButton_buttonSize 0 +int styleable SignInButton_colorScheme 1 +int styleable SignInButton_scopeUris 2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/1e2fa81fb8fb06134219be2a78448dec/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar new file mode 100644 index 0000000000000000000000000000000000000000..fc0dd60edfd84de2d8fc33e197676fed19726a75 GIT binary patch literal 41569 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/1f5f78d5557c3e326a8ab2589f505ea0.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/1f5f78d5557c3e326a8ab2589f505ea0.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/2f46d3830fd7946ebbc1e146441e543d.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/2f46d3830fd7946ebbc1e146441e543d.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e.bin new file mode 100644 index 0000000000..52a3fd682a --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0.aar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e/jetified-neoeyed-sdk-release-3.3.0.aar b/neoeyed-sdk-release-3.3.0/build/.transforms/38967fc665505e8c540a94462a36c37e/jetified-neoeyed-sdk-release-3.3.0.aar new file mode 100644 index 0000000000000000000000000000000000000000..414b3c7a86ad966f5000b7746ceebd59f15743bd GIT binary patch literal 41667 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/44b33cea5d6604c77ca4d9455680519f.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/44b33cea5d6604c77ca4d9455680519f.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4b26b726fd37ed8de3bedc079e5f0c37.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/4b26b726fd37ed8de3bedc079e5f0c37.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/4cab0bff6107eb794e3b98757b452db1.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/4cab0bff6107eb794e3b98757b452db1.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/50a3a69edb8682e73bf3c93642b3ea19.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/50a3a69edb8682e73bf3c93642b3ea19.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/549d0bfabf1c7f65e595e0e9c9b52548.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/549d0bfabf1c7f65e595e0e9c9b52548.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4.bin new file mode 100644 index 0000000000..bc740494bc --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4.bin @@ -0,0 +1 @@ +o/com.neoeyed.sdk-r.txt diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4/com.neoeyed.sdk-r.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4/com.neoeyed.sdk-r.txt new file mode 100644 index 0000000000..64bf923ef2 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/54f42d2ef6ac1f30d729d25bc34fa8f4/com.neoeyed.sdk-r.txt @@ -0,0 +1,218 @@ +com.neoeyed.sdk +anim fragment_close_enter +anim fragment_close_exit +anim fragment_fade_enter +anim fragment_fade_exit +anim fragment_fast_out_extra_slow_in +anim fragment_open_enter +anim fragment_open_exit +attr alpha +attr buttonSize +attr circleCrop +attr colorScheme +attr font +attr fontProviderAuthority +attr fontProviderCerts +attr fontProviderFetchStrategy +attr fontProviderFetchTimeout +attr fontProviderPackage +attr fontProviderQuery +attr fontStyle +attr fontVariationSettings +attr fontWeight +attr imageAspectRatio +attr imageAspectRatioAdjust +attr scopeUris +attr ttcIndex +color common_google_signin_btn_text_dark +color common_google_signin_btn_text_dark_default +color common_google_signin_btn_text_dark_disabled +color common_google_signin_btn_text_dark_focused +color common_google_signin_btn_text_dark_pressed +color common_google_signin_btn_text_light +color common_google_signin_btn_text_light_default +color common_google_signin_btn_text_light_disabled +color common_google_signin_btn_text_light_focused +color common_google_signin_btn_text_light_pressed +color common_google_signin_btn_tint +color notification_action_color_filter +color notification_icon_bg_color +color ripple_material_light +color secondary_text_default_material_light +dimen compat_button_inset_horizontal_material +dimen compat_button_inset_vertical_material +dimen compat_button_padding_horizontal_material +dimen compat_button_padding_vertical_material +dimen compat_control_corner_material +dimen compat_notification_large_icon_max_height +dimen compat_notification_large_icon_max_width +dimen notification_action_icon_size +dimen notification_action_text_size +dimen notification_big_circle_margin +dimen notification_content_margin_start +dimen notification_large_icon_height +dimen notification_large_icon_width +dimen notification_main_column_padding_top +dimen notification_media_narrow_margin +dimen notification_right_icon_size +dimen notification_right_side_padding_top +dimen notification_small_icon_background_padding +dimen notification_small_icon_size_as_large +dimen notification_subtext_size +dimen notification_top_pad +dimen notification_top_pad_large_text +drawable common_full_open_on_phone +drawable common_google_signin_btn_icon_dark +drawable common_google_signin_btn_icon_dark_focused +drawable common_google_signin_btn_icon_dark_normal +drawable common_google_signin_btn_icon_dark_normal_background +drawable common_google_signin_btn_icon_disabled +drawable common_google_signin_btn_icon_light +drawable common_google_signin_btn_icon_light_focused +drawable common_google_signin_btn_icon_light_normal +drawable common_google_signin_btn_icon_light_normal_background +drawable common_google_signin_btn_text_dark +drawable common_google_signin_btn_text_dark_focused +drawable common_google_signin_btn_text_dark_normal +drawable common_google_signin_btn_text_dark_normal_background +drawable common_google_signin_btn_text_disabled +drawable common_google_signin_btn_text_light +drawable common_google_signin_btn_text_light_focused +drawable common_google_signin_btn_text_light_normal +drawable common_google_signin_btn_text_light_normal_background +drawable googleg_disabled_color_18 +drawable googleg_standard_color_18 +drawable notification_action_background +drawable notification_bg +drawable notification_bg_low +drawable notification_bg_low_normal +drawable notification_bg_low_pressed +drawable notification_bg_normal +drawable notification_bg_normal_pressed +drawable notification_icon_background +drawable notification_template_icon_bg +drawable notification_template_icon_low_bg +drawable notification_tile_bg +drawable notify_panel_notification_icon_bg +id accessibility_action_clickable_span +id accessibility_custom_action_0 +id accessibility_custom_action_1 +id accessibility_custom_action_10 +id accessibility_custom_action_11 +id accessibility_custom_action_12 +id accessibility_custom_action_13 +id accessibility_custom_action_14 +id accessibility_custom_action_15 +id accessibility_custom_action_16 +id accessibility_custom_action_17 +id accessibility_custom_action_18 +id accessibility_custom_action_19 +id accessibility_custom_action_2 +id accessibility_custom_action_20 +id accessibility_custom_action_21 +id accessibility_custom_action_22 +id accessibility_custom_action_23 +id accessibility_custom_action_24 +id accessibility_custom_action_25 +id accessibility_custom_action_26 +id accessibility_custom_action_27 +id accessibility_custom_action_28 +id accessibility_custom_action_29 +id accessibility_custom_action_3 +id accessibility_custom_action_30 +id accessibility_custom_action_31 +id accessibility_custom_action_4 +id accessibility_custom_action_5 +id accessibility_custom_action_6 +id accessibility_custom_action_7 +id accessibility_custom_action_8 +id accessibility_custom_action_9 +id action_container +id action_divider +id action_image +id action_text +id actions +id adjust_height +id adjust_width +id async +id auto +id blocking +id chronometer +id dark +id dialog_button +id forever +id fragment_container_view_tag +id icon +id icon_group +id icon_only +id info +id italic +id light +id line1 +id line3 +id none +id normal +id notification_background +id notification_main_column +id notification_main_column_container +id right_icon +id right_side +id standard +id tag_accessibility_actions +id tag_accessibility_clickable_spans +id tag_accessibility_heading +id tag_accessibility_pane_title +id tag_screen_reader_focusable +id tag_transition_group +id tag_unhandled_key_event_manager +id tag_unhandled_key_listeners +id text +id text2 +id time +id title +id visible_removing_fragment_view_tag +id wide +integer google_play_services_version +integer status_bar_notification_info_maxnum +layout custom_dialog +layout notification_action +layout notification_action_tombstone +layout notification_template_custom_big +layout notification_template_icon_group +layout notification_template_part_chronometer +layout notification_template_part_time +string common_google_play_services_enable_button +string common_google_play_services_enable_text +string common_google_play_services_enable_title +string common_google_play_services_install_button +string common_google_play_services_install_text +string common_google_play_services_install_title +string common_google_play_services_notification_channel_name +string common_google_play_services_notification_ticker +string common_google_play_services_unknown_issue +string common_google_play_services_unsupported_text +string common_google_play_services_update_button +string common_google_play_services_update_text +string common_google_play_services_update_title +string common_google_play_services_updating_text +string common_google_play_services_wear_update_text +string common_open_on_phone +string common_signin_button_text +string common_signin_button_text_long +string status_bar_notification_info_overflow +style TextAppearance_Compat_Notification +style TextAppearance_Compat_Notification_Info +style TextAppearance_Compat_Notification_Line2 +style TextAppearance_Compat_Notification_Time +style TextAppearance_Compat_Notification_Title +style Widget_Compat_NotificationActionContainer +style Widget_Compat_NotificationActionText +styleable ColorStateListItem alpha android_alpha android_color +styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery +styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex +styleable Fragment android_id android_name android_tag +styleable FragmentContainerView android_name android_tag +styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type +styleable GradientColorItem android_color android_offset +styleable LoadingImageView circleCrop imageAspectRatio imageAspectRatioAdjust +styleable SignInButton buttonSize colorScheme scopeUris diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/563053da818aec3ec0e6ccd6aec2fef9.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/563053da818aec3ec0e6ccd6aec2fef9.bin new file mode 100644 index 0000000000..fcbf8d4b26 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/563053da818aec3ec0e6ccd6aec2fef9.bin @@ -0,0 +1 @@ +i/AndroidManifest.xml diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/592d52135a1d89f0355df3f8612b16ee.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/592d52135a1d89f0355df3f8612b16ee.bin new file mode 100644 index 0000000000..63dace7e60 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/592d52135a1d89f0355df3f8612b16ee.bin @@ -0,0 +1 @@ +i/META-INF/com/android/build/gradle/aar-metadata.properties diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043.bin new file mode 100644 index 0000000000..52a3fd682a --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0.aar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043/jetified-neoeyed-sdk-release-3.3.0.aar b/neoeyed-sdk-release-3.3.0/build/.transforms/5ad67a7f3e2c3eb55e8f6fc9ab233043/jetified-neoeyed-sdk-release-3.3.0.aar new file mode 100644 index 0000000000000000000000000000000000000000..414b3c7a86ad966f5000b7746ceebd59f15743bd GIT binary patch literal 41667 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/5ef082368261c245c087de2937e3c034.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/5ef082368261c245c087de2937e3c034.bin new file mode 100644 index 0000000000..c626d1be35 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/5ef082368261c245c087de2937e3c034.bin @@ -0,0 +1 @@ +i/jars/classes.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/6c8d99dc3bc42b494f56987283f891ef.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/6c8d99dc3bc42b494f56987283f891ef.bin new file mode 100644 index 0000000000..c626d1be35 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/6c8d99dc3bc42b494f56987283f891ef.bin @@ -0,0 +1 @@ +i/jars/classes.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c.bin new file mode 100644 index 0000000000..bc740494bc --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c.bin @@ -0,0 +1 @@ +o/com.neoeyed.sdk-r.txt diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c/com.neoeyed.sdk-r.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c/com.neoeyed.sdk-r.txt new file mode 100644 index 0000000000..64bf923ef2 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/70f43bb24b5daa7744026677ef56376c/com.neoeyed.sdk-r.txt @@ -0,0 +1,218 @@ +com.neoeyed.sdk +anim fragment_close_enter +anim fragment_close_exit +anim fragment_fade_enter +anim fragment_fade_exit +anim fragment_fast_out_extra_slow_in +anim fragment_open_enter +anim fragment_open_exit +attr alpha +attr buttonSize +attr circleCrop +attr colorScheme +attr font +attr fontProviderAuthority +attr fontProviderCerts +attr fontProviderFetchStrategy +attr fontProviderFetchTimeout +attr fontProviderPackage +attr fontProviderQuery +attr fontStyle +attr fontVariationSettings +attr fontWeight +attr imageAspectRatio +attr imageAspectRatioAdjust +attr scopeUris +attr ttcIndex +color common_google_signin_btn_text_dark +color common_google_signin_btn_text_dark_default +color common_google_signin_btn_text_dark_disabled +color common_google_signin_btn_text_dark_focused +color common_google_signin_btn_text_dark_pressed +color common_google_signin_btn_text_light +color common_google_signin_btn_text_light_default +color common_google_signin_btn_text_light_disabled +color common_google_signin_btn_text_light_focused +color common_google_signin_btn_text_light_pressed +color common_google_signin_btn_tint +color notification_action_color_filter +color notification_icon_bg_color +color ripple_material_light +color secondary_text_default_material_light +dimen compat_button_inset_horizontal_material +dimen compat_button_inset_vertical_material +dimen compat_button_padding_horizontal_material +dimen compat_button_padding_vertical_material +dimen compat_control_corner_material +dimen compat_notification_large_icon_max_height +dimen compat_notification_large_icon_max_width +dimen notification_action_icon_size +dimen notification_action_text_size +dimen notification_big_circle_margin +dimen notification_content_margin_start +dimen notification_large_icon_height +dimen notification_large_icon_width +dimen notification_main_column_padding_top +dimen notification_media_narrow_margin +dimen notification_right_icon_size +dimen notification_right_side_padding_top +dimen notification_small_icon_background_padding +dimen notification_small_icon_size_as_large +dimen notification_subtext_size +dimen notification_top_pad +dimen notification_top_pad_large_text +drawable common_full_open_on_phone +drawable common_google_signin_btn_icon_dark +drawable common_google_signin_btn_icon_dark_focused +drawable common_google_signin_btn_icon_dark_normal +drawable common_google_signin_btn_icon_dark_normal_background +drawable common_google_signin_btn_icon_disabled +drawable common_google_signin_btn_icon_light +drawable common_google_signin_btn_icon_light_focused +drawable common_google_signin_btn_icon_light_normal +drawable common_google_signin_btn_icon_light_normal_background +drawable common_google_signin_btn_text_dark +drawable common_google_signin_btn_text_dark_focused +drawable common_google_signin_btn_text_dark_normal +drawable common_google_signin_btn_text_dark_normal_background +drawable common_google_signin_btn_text_disabled +drawable common_google_signin_btn_text_light +drawable common_google_signin_btn_text_light_focused +drawable common_google_signin_btn_text_light_normal +drawable common_google_signin_btn_text_light_normal_background +drawable googleg_disabled_color_18 +drawable googleg_standard_color_18 +drawable notification_action_background +drawable notification_bg +drawable notification_bg_low +drawable notification_bg_low_normal +drawable notification_bg_low_pressed +drawable notification_bg_normal +drawable notification_bg_normal_pressed +drawable notification_icon_background +drawable notification_template_icon_bg +drawable notification_template_icon_low_bg +drawable notification_tile_bg +drawable notify_panel_notification_icon_bg +id accessibility_action_clickable_span +id accessibility_custom_action_0 +id accessibility_custom_action_1 +id accessibility_custom_action_10 +id accessibility_custom_action_11 +id accessibility_custom_action_12 +id accessibility_custom_action_13 +id accessibility_custom_action_14 +id accessibility_custom_action_15 +id accessibility_custom_action_16 +id accessibility_custom_action_17 +id accessibility_custom_action_18 +id accessibility_custom_action_19 +id accessibility_custom_action_2 +id accessibility_custom_action_20 +id accessibility_custom_action_21 +id accessibility_custom_action_22 +id accessibility_custom_action_23 +id accessibility_custom_action_24 +id accessibility_custom_action_25 +id accessibility_custom_action_26 +id accessibility_custom_action_27 +id accessibility_custom_action_28 +id accessibility_custom_action_29 +id accessibility_custom_action_3 +id accessibility_custom_action_30 +id accessibility_custom_action_31 +id accessibility_custom_action_4 +id accessibility_custom_action_5 +id accessibility_custom_action_6 +id accessibility_custom_action_7 +id accessibility_custom_action_8 +id accessibility_custom_action_9 +id action_container +id action_divider +id action_image +id action_text +id actions +id adjust_height +id adjust_width +id async +id auto +id blocking +id chronometer +id dark +id dialog_button +id forever +id fragment_container_view_tag +id icon +id icon_group +id icon_only +id info +id italic +id light +id line1 +id line3 +id none +id normal +id notification_background +id notification_main_column +id notification_main_column_container +id right_icon +id right_side +id standard +id tag_accessibility_actions +id tag_accessibility_clickable_spans +id tag_accessibility_heading +id tag_accessibility_pane_title +id tag_screen_reader_focusable +id tag_transition_group +id tag_unhandled_key_event_manager +id tag_unhandled_key_listeners +id text +id text2 +id time +id title +id visible_removing_fragment_view_tag +id wide +integer google_play_services_version +integer status_bar_notification_info_maxnum +layout custom_dialog +layout notification_action +layout notification_action_tombstone +layout notification_template_custom_big +layout notification_template_icon_group +layout notification_template_part_chronometer +layout notification_template_part_time +string common_google_play_services_enable_button +string common_google_play_services_enable_text +string common_google_play_services_enable_title +string common_google_play_services_install_button +string common_google_play_services_install_text +string common_google_play_services_install_title +string common_google_play_services_notification_channel_name +string common_google_play_services_notification_ticker +string common_google_play_services_unknown_issue +string common_google_play_services_unsupported_text +string common_google_play_services_update_button +string common_google_play_services_update_text +string common_google_play_services_update_title +string common_google_play_services_updating_text +string common_google_play_services_wear_update_text +string common_open_on_phone +string common_signin_button_text +string common_signin_button_text_long +string status_bar_notification_info_overflow +style TextAppearance_Compat_Notification +style TextAppearance_Compat_Notification_Info +style TextAppearance_Compat_Notification_Line2 +style TextAppearance_Compat_Notification_Time +style TextAppearance_Compat_Notification_Title +style Widget_Compat_NotificationActionContainer +style Widget_Compat_NotificationActionText +styleable ColorStateListItem alpha android_alpha android_color +styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery +styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex +styleable Fragment android_id android_name android_tag +styleable FragmentContainerView android_name android_tag +styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type +styleable GradientColorItem android_color android_offset +styleable LoadingImageView circleCrop imageAspectRatio imageAspectRatioAdjust +styleable SignInButton buttonSize colorScheme scopeUris diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/72d39ae23f4eaba603c92baaaa5f14df.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/72d39ae23f4eaba603c92baaaa5f14df.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/7499cbc2de8c59eac003122c4b5373c5.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/7499cbc2de8c59eac003122c4b5373c5.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/8d69b51f66a1e9a54c48de0781412442.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/8d69b51f66a1e9a54c48de0781412442.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa.bin new file mode 100644 index 0000000000..0ee11c5631 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0-api.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa/jetified-neoeyed-sdk-release-3.3.0-api.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/99968062b0dab5a0a22113803a4813fa/jetified-neoeyed-sdk-release-3.3.0-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..5eab0163d336a62726a1c321aa1e85bc44f16648 GIT binary patch literal 99542 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785.bin new file mode 100644 index 0000000000..0ee11c5631 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0-api.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785/jetified-neoeyed-sdk-release-3.3.0-api.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/99db03172cf621bc5dbca122a05a6785/jetified-neoeyed-sdk-release-3.3.0-api.jar new file mode 100644 index 0000000000000000000000000000000000000000..5eab0163d336a62726a1c321aa1e85bc44f16648 GIT binary patch literal 99542 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191.bin new file mode 100644 index 0000000000..f527fe3967 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml new file mode 100644 index 0000000000..e814731d3f --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties new file mode 100644 index 0000000000..d8560bd4e2 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/META-INF/com/android/build/gradle/aar-metadata.properties @@ -0,0 +1,2 @@ +aarFormatVersion=1.0 +aarMetadataVersion=1.0 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/R.txt b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/R.txt new file mode 100644 index 0000000000..c68b87c7af --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/R.txt @@ -0,0 +1,261 @@ +int anim fragment_close_enter 0x0 +int anim fragment_close_exit 0x0 +int anim fragment_fade_enter 0x0 +int anim fragment_fade_exit 0x0 +int anim fragment_fast_out_extra_slow_in 0x0 +int anim fragment_open_enter 0x0 +int anim fragment_open_exit 0x0 +int attr alpha 0x0 +int attr buttonSize 0x0 +int attr circleCrop 0x0 +int attr colorScheme 0x0 +int attr font 0x0 +int attr fontProviderAuthority 0x0 +int attr fontProviderCerts 0x0 +int attr fontProviderFetchStrategy 0x0 +int attr fontProviderFetchTimeout 0x0 +int attr fontProviderPackage 0x0 +int attr fontProviderQuery 0x0 +int attr fontStyle 0x0 +int attr fontVariationSettings 0x0 +int attr fontWeight 0x0 +int attr imageAspectRatio 0x0 +int attr imageAspectRatioAdjust 0x0 +int attr scopeUris 0x0 +int attr ttcIndex 0x0 +int color common_google_signin_btn_text_dark 0x0 +int color common_google_signin_btn_text_dark_default 0x0 +int color common_google_signin_btn_text_dark_disabled 0x0 +int color common_google_signin_btn_text_dark_focused 0x0 +int color common_google_signin_btn_text_dark_pressed 0x0 +int color common_google_signin_btn_text_light 0x0 +int color common_google_signin_btn_text_light_default 0x0 +int color common_google_signin_btn_text_light_disabled 0x0 +int color common_google_signin_btn_text_light_focused 0x0 +int color common_google_signin_btn_text_light_pressed 0x0 +int color common_google_signin_btn_tint 0x0 +int color notification_action_color_filter 0x0 +int color notification_icon_bg_color 0x0 +int color ripple_material_light 0x0 +int color secondary_text_default_material_light 0x0 +int dimen compat_button_inset_horizontal_material 0x0 +int dimen compat_button_inset_vertical_material 0x0 +int dimen compat_button_padding_horizontal_material 0x0 +int dimen compat_button_padding_vertical_material 0x0 +int dimen compat_control_corner_material 0x0 +int dimen compat_notification_large_icon_max_height 0x0 +int dimen compat_notification_large_icon_max_width 0x0 +int dimen notification_action_icon_size 0x0 +int dimen notification_action_text_size 0x0 +int dimen notification_big_circle_margin 0x0 +int dimen notification_content_margin_start 0x0 +int dimen notification_large_icon_height 0x0 +int dimen notification_large_icon_width 0x0 +int dimen notification_main_column_padding_top 0x0 +int dimen notification_media_narrow_margin 0x0 +int dimen notification_right_icon_size 0x0 +int dimen notification_right_side_padding_top 0x0 +int dimen notification_small_icon_background_padding 0x0 +int dimen notification_small_icon_size_as_large 0x0 +int dimen notification_subtext_size 0x0 +int dimen notification_top_pad 0x0 +int dimen notification_top_pad_large_text 0x0 +int drawable common_full_open_on_phone 0x0 +int drawable common_google_signin_btn_icon_dark 0x0 +int drawable common_google_signin_btn_icon_dark_focused 0x0 +int drawable common_google_signin_btn_icon_dark_normal 0x0 +int drawable common_google_signin_btn_icon_dark_normal_background 0x0 +int drawable common_google_signin_btn_icon_disabled 0x0 +int drawable common_google_signin_btn_icon_light 0x0 +int drawable common_google_signin_btn_icon_light_focused 0x0 +int drawable common_google_signin_btn_icon_light_normal 0x0 +int drawable common_google_signin_btn_icon_light_normal_background 0x0 +int drawable common_google_signin_btn_text_dark 0x0 +int drawable common_google_signin_btn_text_dark_focused 0x0 +int drawable common_google_signin_btn_text_dark_normal 0x0 +int drawable common_google_signin_btn_text_dark_normal_background 0x0 +int drawable common_google_signin_btn_text_disabled 0x0 +int drawable common_google_signin_btn_text_light 0x0 +int drawable common_google_signin_btn_text_light_focused 0x0 +int drawable common_google_signin_btn_text_light_normal 0x0 +int drawable common_google_signin_btn_text_light_normal_background 0x0 +int drawable googleg_disabled_color_18 0x0 +int drawable googleg_standard_color_18 0x0 +int drawable notification_action_background 0x0 +int drawable notification_bg 0x0 +int drawable notification_bg_low 0x0 +int drawable notification_bg_low_normal 0x0 +int drawable notification_bg_low_pressed 0x0 +int drawable notification_bg_normal 0x0 +int drawable notification_bg_normal_pressed 0x0 +int drawable notification_icon_background 0x0 +int drawable notification_template_icon_bg 0x0 +int drawable notification_template_icon_low_bg 0x0 +int drawable notification_tile_bg 0x0 +int drawable notify_panel_notification_icon_bg 0x0 +int id accessibility_action_clickable_span 0x0 +int id accessibility_custom_action_0 0x0 +int id accessibility_custom_action_1 0x0 +int id accessibility_custom_action_10 0x0 +int id accessibility_custom_action_11 0x0 +int id accessibility_custom_action_12 0x0 +int id accessibility_custom_action_13 0x0 +int id accessibility_custom_action_14 0x0 +int id accessibility_custom_action_15 0x0 +int id accessibility_custom_action_16 0x0 +int id accessibility_custom_action_17 0x0 +int id accessibility_custom_action_18 0x0 +int id accessibility_custom_action_19 0x0 +int id accessibility_custom_action_2 0x0 +int id accessibility_custom_action_20 0x0 +int id accessibility_custom_action_21 0x0 +int id accessibility_custom_action_22 0x0 +int id accessibility_custom_action_23 0x0 +int id accessibility_custom_action_24 0x0 +int id accessibility_custom_action_25 0x0 +int id accessibility_custom_action_26 0x0 +int id accessibility_custom_action_27 0x0 +int id accessibility_custom_action_28 0x0 +int id accessibility_custom_action_29 0x0 +int id accessibility_custom_action_3 0x0 +int id accessibility_custom_action_30 0x0 +int id accessibility_custom_action_31 0x0 +int id accessibility_custom_action_4 0x0 +int id accessibility_custom_action_5 0x0 +int id accessibility_custom_action_6 0x0 +int id accessibility_custom_action_7 0x0 +int id accessibility_custom_action_8 0x0 +int id accessibility_custom_action_9 0x0 +int id action_container 0x0 +int id action_divider 0x0 +int id action_image 0x0 +int id action_text 0x0 +int id actions 0x0 +int id adjust_height 0x0 +int id adjust_width 0x0 +int id async 0x0 +int id auto 0x0 +int id blocking 0x0 +int id chronometer 0x0 +int id dark 0x0 +int id dialog_button 0x0 +int id forever 0x0 +int id fragment_container_view_tag 0x0 +int id icon 0x0 +int id icon_group 0x0 +int id icon_only 0x0 +int id info 0x0 +int id italic 0x0 +int id light 0x0 +int id line1 0x0 +int id line3 0x0 +int id none 0x0 +int id normal 0x0 +int id notification_background 0x0 +int id notification_main_column 0x0 +int id notification_main_column_container 0x0 +int id right_icon 0x0 +int id right_side 0x0 +int id standard 0x0 +int id tag_accessibility_actions 0x0 +int id tag_accessibility_clickable_spans 0x0 +int id tag_accessibility_heading 0x0 +int id tag_accessibility_pane_title 0x0 +int id tag_screen_reader_focusable 0x0 +int id tag_transition_group 0x0 +int id tag_unhandled_key_event_manager 0x0 +int id tag_unhandled_key_listeners 0x0 +int id text 0x0 +int id text2 0x0 +int id time 0x0 +int id title 0x0 +int id visible_removing_fragment_view_tag 0x0 +int id wide 0x0 +int integer google_play_services_version 0x0 +int integer status_bar_notification_info_maxnum 0x0 +int layout custom_dialog 0x0 +int layout notification_action 0x0 +int layout notification_action_tombstone 0x0 +int layout notification_template_custom_big 0x0 +int layout notification_template_icon_group 0x0 +int layout notification_template_part_chronometer 0x0 +int layout notification_template_part_time 0x0 +int string common_google_play_services_enable_button 0x0 +int string common_google_play_services_enable_text 0x0 +int string common_google_play_services_enable_title 0x0 +int string common_google_play_services_install_button 0x0 +int string common_google_play_services_install_text 0x0 +int string common_google_play_services_install_title 0x0 +int string common_google_play_services_notification_channel_name 0x0 +int string common_google_play_services_notification_ticker 0x0 +int string common_google_play_services_unknown_issue 0x0 +int string common_google_play_services_unsupported_text 0x0 +int string common_google_play_services_update_button 0x0 +int string common_google_play_services_update_text 0x0 +int string common_google_play_services_update_title 0x0 +int string common_google_play_services_updating_text 0x0 +int string common_google_play_services_wear_update_text 0x0 +int string common_open_on_phone 0x0 +int string common_signin_button_text 0x0 +int string common_signin_button_text_long 0x0 +int string status_bar_notification_info_overflow 0x0 +int style TextAppearance_Compat_Notification 0x0 +int style TextAppearance_Compat_Notification_Info 0x0 +int style TextAppearance_Compat_Notification_Line2 0x0 +int style TextAppearance_Compat_Notification_Time 0x0 +int style TextAppearance_Compat_Notification_Title 0x0 +int style Widget_Compat_NotificationActionContainer 0x0 +int style Widget_Compat_NotificationActionText 0x0 +int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5 } +int styleable ColorStateListItem_alpha 0 +int styleable ColorStateListItem_android_alpha 1 +int styleable ColorStateListItem_android_color 2 +int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FontFamily_fontProviderAuthority 0 +int styleable FontFamily_fontProviderCerts 1 +int styleable FontFamily_fontProviderFetchStrategy 2 +int styleable FontFamily_fontProviderFetchTimeout 3 +int styleable FontFamily_fontProviderPackage 4 +int styleable FontFamily_fontProviderQuery 5 +int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FontFamilyFont_android_font 0 +int styleable FontFamilyFont_android_fontStyle 1 +int styleable FontFamilyFont_android_fontVariationSettings 2 +int styleable FontFamilyFont_android_fontWeight 3 +int styleable FontFamilyFont_android_ttcIndex 4 +int styleable FontFamilyFont_font 5 +int styleable FontFamilyFont_fontStyle 6 +int styleable FontFamilyFont_fontVariationSettings 7 +int styleable FontFamilyFont_fontWeight 8 +int styleable FontFamilyFont_ttcIndex 9 +int[] styleable Fragment { 0x10100d0, 0x1010003, 0x10100d1 } +int styleable Fragment_android_id 0 +int styleable Fragment_android_name 1 +int styleable Fragment_android_tag 2 +int[] styleable FragmentContainerView { 0x1010003, 0x10100d1 } +int styleable FragmentContainerView_android_name 0 +int styleable FragmentContainerView_android_tag 1 +int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } +int styleable GradientColor_android_centerColor 0 +int styleable GradientColor_android_centerX 1 +int styleable GradientColor_android_centerY 2 +int styleable GradientColor_android_endColor 3 +int styleable GradientColor_android_endX 4 +int styleable GradientColor_android_endY 5 +int styleable GradientColor_android_gradientRadius 6 +int styleable GradientColor_android_startColor 7 +int styleable GradientColor_android_startX 8 +int styleable GradientColor_android_startY 9 +int styleable GradientColor_android_tileMode 10 +int styleable GradientColor_android_type 11 +int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } +int styleable GradientColorItem_android_color 0 +int styleable GradientColorItem_android_offset 1 +int[] styleable LoadingImageView { 0x0, 0x0, 0x0 } +int styleable LoadingImageView_circleCrop 0 +int styleable LoadingImageView_imageAspectRatio 1 +int styleable LoadingImageView_imageAspectRatioAdjust 2 +int[] styleable SignInButton { 0x0, 0x0, 0x0 } +int styleable SignInButton_buttonSize 0 +int styleable SignInButton_colorScheme 1 +int styleable SignInButton_scopeUris 2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/a858a74b300777c0a71d508744235191/jetified-neoeyed-sdk-release-3.3.0/jars/classes.jar new file mode 100644 index 0000000000000000000000000000000000000000..fc0dd60edfd84de2d8fc33e197676fed19726a75 GIT binary patch literal 41569 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 literal 0 HcmV?d00001 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/ac5b1bc89ff0ee86ce1d7d616c40e81e.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/ac5b1bc89ff0ee86ce1d7d616c40e81e.bin new file mode 100644 index 0000000000..63dace7e60 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/ac5b1bc89ff0ee86ce1d7d616c40e81e.bin @@ -0,0 +1 @@ +i/META-INF/com/android/build/gradle/aar-metadata.properties diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/b6714f2b0b8158c20240be596c42d282.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/b6714f2b0b8158c20240be596c42d282.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/bcf246c529773fd94f26134acf652247.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/bcf246c529773fd94f26134acf652247.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/cca7d1af9b62aa5ecdd672144037024d.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/cca7d1af9b62aa5ecdd672144037024d.bin new file mode 100644 index 0000000000..fb0cbb18e6 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/cca7d1af9b62aa5ecdd672144037024d.bin @@ -0,0 +1 @@ +o/com.neoeyed.sdk diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/d18896a375b6eea771b7cae3694493cf.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/d18896a375b6eea771b7cae3694493cf.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/dd858794245deb81244da56017988eda.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/dd858794245deb81244da56017988eda.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/df0f1d616d054787dc4a17e42369244d.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/df0f1d616d054787dc4a17e42369244d.bin new file mode 100644 index 0000000000..fcbf8d4b26 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/df0f1d616d054787dc4a17e42369244d.bin @@ -0,0 +1 @@ +i/AndroidManifest.xml diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/ee60cae43a34155aa6631687dc917c56.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/ee60cae43a34155aa6631687dc917c56.bin new file mode 100644 index 0000000000..fb0cbb18e6 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/ee60cae43a34155aa6631687dc917c56.bin @@ -0,0 +1 @@ +o/com.neoeyed.sdk diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67.bin b/neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67.bin new file mode 100644 index 0000000000..decd0066b4 --- /dev/null +++ b/neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67.bin @@ -0,0 +1 @@ +o/jetified-neoeyed-sdk-release-3.3.0-runtime.jar diff --git a/neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67/jetified-neoeyed-sdk-release-3.3.0-runtime.jar b/neoeyed-sdk-release-3.3.0/build/.transforms/f3a7ab3276b1e57d6541070e58388c67/jetified-neoeyed-sdk-release-3.3.0-runtime.jar new file mode 100644 index 0000000000000000000000000000000000000000..a676d45c96247a7f6a6c96678d1db7584ce28539 GIT binary patch literal 81984 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 literal 0 HcmV?d00001 From 9935447ffb115e1bfbf4d377f6360f049237940b Mon Sep 17 00:00:00 2001 From: ashutoshyelgulwar Date: Wed, 27 Oct 2021 13:10:02 +0530 Subject: [PATCH 42/53] updated the strings --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index edf10295a0..79c65f0dd1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -462,7 +462,7 @@ WhatsApp notifications enabled WhatsApp notifications disabled You are disabling whatsapp notifications. - I accept the loan agreement terms + I accept the loan agreement terms & by proceeding I declare that I am not a politically exposed person Hey, Camera permission is required for selfie Camera permission is required for Aadhaar photo @@ -594,7 +594,7 @@ View Details Policy Terms Insurance - I accept the loan agreement and insurance terms + I accept the loan agreement and insurance terms & by proceeding I declare that I am not a politically exposed person Insurance Premium Chat (Mon-Sat, 10am-6pm) Address Line 1 From b675bebe4edcdaeb41c1d77ee6fc6109d4e64f19 Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Wed, 27 Oct 2021 13:59:32 +0530 Subject: [PATCH 43/53] superapp related changes --- .../java/com/naviapp/homeLoan/BalanceTransferTest.kt | 3 ++- .../java/com/naviapp/homeLoan/HomeLoanTest.kt | 3 ++- .../java/com/naviapp/mockTests/NsdlMockTests.kt | 2 +- .../java/com/naviapp/mockTests/PanMockTests.kt | 2 +- .../java/com/naviapp/newPersonalLoan/NewLoanTest.kt | 5 +++-- .../controllers/registration/RegistrationController.kt | 7 +++++++ app/src/test/java/com/naviapp/CustomerDataCleanup.kt | 2 +- 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt b/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt index 247de4cfb0..54fa414ae5 100644 --- a/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt @@ -33,7 +33,7 @@ class BalanceTransferTest: TestBase() { val browserStack: BrowserStack = JsonParser.getData(this.javaClass.getResourceAsStream("/PhoneNumber.json")) - val phoneNumber = "5555525528" + val phoneNumber = "6666625528" val basicDetails = newLoanDetails.homeLoanBasicDetails val balanceTransferDetails = newLoanDetails.balanceTransferDetails val homeLoanWorkDetails = newLoanDetails.homeLoanWorkDetails @@ -44,6 +44,7 @@ class BalanceTransferTest: TestBase() { Controller.on() .getStarted() + .loginOrSignup() .enterPhoneNumberAndOtp(phoneNumber) .clickVerifyOtp() .tapPersonalHomeLoanCard() diff --git a/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt b/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt index 1df4ce5615..f368f9dd3b 100644 --- a/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt @@ -32,7 +32,7 @@ class HomeLoanTest : TestBase() { val browserStack: BrowserStack = JsonParser.getData(this.javaClass.getResourceAsStream("/PhoneNumber.json")) - val phoneNumber = "5555525527" + val phoneNumber = "6666625527" val basicDetails = newLoanDetails.homeLoanBasicDetails val propertyDetails = newLoanDetails.propertyDetails val homeLoanWorkDetails = newLoanDetails.homeLoanWorkDetails @@ -43,6 +43,7 @@ class HomeLoanTest : TestBase() { Controller.on() .getStarted() + .loginOrSignup() .enterPhoneNumberAndOtp(phoneNumber) .clickVerifyOtp() .tapPersonalHomeLoanCard() diff --git a/app/src/androidTestDev/java/com/naviapp/mockTests/NsdlMockTests.kt b/app/src/androidTestDev/java/com/naviapp/mockTests/NsdlMockTests.kt index 79586fa4aa..9549c0a454 100644 --- a/app/src/androidTestDev/java/com/naviapp/mockTests/NsdlMockTests.kt +++ b/app/src/androidTestDev/java/com/naviapp/mockTests/NsdlMockTests.kt @@ -21,7 +21,7 @@ import com.naviapp.utilities.RandomGenerator import org.junit.Rule import org.junit.Test -@E2ETest + class NsdlMockTests:TestBase() { @Rule @JvmField diff --git a/app/src/androidTestDev/java/com/naviapp/mockTests/PanMockTests.kt b/app/src/androidTestDev/java/com/naviapp/mockTests/PanMockTests.kt index a222eaea71..994e4ae651 100644 --- a/app/src/androidTestDev/java/com/naviapp/mockTests/PanMockTests.kt +++ b/app/src/androidTestDev/java/com/naviapp/mockTests/PanMockTests.kt @@ -21,7 +21,7 @@ import com.naviapp.utilities.RandomGenerator import org.junit.Rule import org.junit.Test -@E2ETest + class PanMockTests: TestBase() { @Rule diff --git a/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt b/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt index 55ca406a3e..ad81975dfc 100644 --- a/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt @@ -36,8 +36,8 @@ class NewLoanTest : TestBase() { val browserStack: BrowserStack = JsonParser.getData(this.javaClass.getResourceAsStream("/PhoneNumber.json")) - private val phoneNumberNewLoan = "5555525525" - private val phoneNumberForeclosureLoan = "5555525526" + private val phoneNumberNewLoan = "6666625525" + private val phoneNumberForeclosureLoan = "6666625526" @Test @@ -54,6 +54,7 @@ class NewLoanTest : TestBase() { Controller.on() .getStarted() + .loginOrSignup() .enterPhoneNumberAndOtp(phoneNumberNewLoan) .clickVerifyOtp() .tapPersonalLoanCard() diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/registration/RegistrationController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/registration/RegistrationController.kt index fbe990eda8..6b60eaef63 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/registration/RegistrationController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/registration/RegistrationController.kt @@ -45,6 +45,7 @@ class RegistrationController : Controller() { private val nextButton = withId(R.id.action_tv) private val editButton = withId(R.id.edit_number_tv) private val whatsApp = withId(R.id.whatsapp_consent_tv) + private val loginOrSignupMatcher = withText(containsString("Login / Signup")) val TAG:String = this.javaClass.simpleName; @@ -246,4 +247,10 @@ class RegistrationController : Controller() { } } + + fun loginOrSignup(): RegistrationController{ + onView(isRoot()).perform(waitFor(loginOrSignupMatcher)) + onView(loginOrSignupMatcher).perform(click()) + return this + } } diff --git a/app/src/test/java/com/naviapp/CustomerDataCleanup.kt b/app/src/test/java/com/naviapp/CustomerDataCleanup.kt index 3e9ea109c4..316913a3e4 100644 --- a/app/src/test/java/com/naviapp/CustomerDataCleanup.kt +++ b/app/src/test/java/com/naviapp/CustomerDataCleanup.kt @@ -30,7 +30,7 @@ class CustomerDataCleanup { @Test fun cleanUpCustomer() { for (counter in 25..33) { - val phoneNumber = "55555255$counter" + val phoneNumber = "66666255$counter" CustomerReadDbClient.cleanUpCustomerReadData(phoneNumber) val customerId = CustomersDbClient.getCustomerReferenceId(phoneNumber) if (customerId.isNotEmpty() || customerId.isNotBlank()) { From 2a44c2aeaca8ffad6dd0ee87566f152260f28c09 Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Wed, 27 Oct 2021 14:40:40 +0530 Subject: [PATCH 44/53] Ui fixes 2 --- .../ui/investment/SellMyFundActivity.kt | 1 + .../navi/amc/investorapp/util/IconUtils.kt | 2 +- .../src/main/res/drawable/ic_explore_all.xml | 135 ++++++++++++++ .../src/main/res/drawable/ic_holdings.xml | 47 +++++ .../main/res/drawable/ic_holdings_small.xml | 47 +++++ .../res/drawable/ic_minimum_investment.xml | 45 +++++ .../drawable/ic_minimum_investment_small.xml | 45 +++++ navi-amc/src/main/res/drawable/ic_risk.xml | 39 ++++ .../src/main/res/drawable/ic_risk_small.xml | 39 ++++ .../res/drawable/ic_scheme_information.xml | 40 +++++ .../drawable/ic_scheme_information_small.xml | 40 +++++ .../main/res/drawable/ic_scheme_managed.xml | 32 ++++ .../res/drawable/ic_scheme_managed_small.xml | 32 ++++ .../main/res/drawable/ic_stamped_duty_tax.xml | 60 +++++++ .../drawable/ic_stamped_duty_tax_small.xml | 60 +++++++ .../main/res/layout/activity_sell_my_fund.xml | 5 +- .../main/res/layout/fragment_home_screen.xml | 74 +++++++- .../res/layout/fragment_personal_details.xml | 3 +- .../main/res/layout/mutualfund_activity.xml | 168 ++++++++---------- 19 files changed, 814 insertions(+), 100 deletions(-) create mode 100644 navi-amc/src/main/res/drawable/ic_explore_all.xml create mode 100644 navi-amc/src/main/res/drawable/ic_holdings.xml create mode 100644 navi-amc/src/main/res/drawable/ic_holdings_small.xml create mode 100644 navi-amc/src/main/res/drawable/ic_minimum_investment.xml create mode 100644 navi-amc/src/main/res/drawable/ic_minimum_investment_small.xml create mode 100644 navi-amc/src/main/res/drawable/ic_risk.xml create mode 100644 navi-amc/src/main/res/drawable/ic_risk_small.xml create mode 100644 navi-amc/src/main/res/drawable/ic_scheme_information.xml create mode 100644 navi-amc/src/main/res/drawable/ic_scheme_information_small.xml create mode 100644 navi-amc/src/main/res/drawable/ic_scheme_managed.xml create mode 100644 navi-amc/src/main/res/drawable/ic_scheme_managed_small.xml create mode 100644 navi-amc/src/main/res/drawable/ic_stamped_duty_tax.xml create mode 100644 navi-amc/src/main/res/drawable/ic_stamped_duty_tax_small.xml diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/SellMyFundActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/SellMyFundActivity.kt index 3d4d5c773d..5ce068315c 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/SellMyFundActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/investment/SellMyFundActivity.kt @@ -228,6 +228,7 @@ class SellMyFundActivity : BaseActivity { + hideKeyboard() if (checkInternetSnackBar(this, binding.myInvestmentRoot)) { if (isValid()) { viewModel.mobile = diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt index 6cb2a1be51..3f65627559 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt @@ -58,7 +58,7 @@ object IconUtils { ICON_DOCUMENT -> R.drawable.ic_kyc_documents ICON_CHAT -> R.drawable.ic_chat_svg ICON_SINGLE -> R.drawable.ic_single_svg - ICON_MARRIED -> R.drawable.ic_married_svg + ICON_MARRIED -> R.drawable.married_new ICON_OTHER -> R.drawable.ic_other_svg ICON_MALE -> R.drawable.ic_male_svg ICON_FEMALE -> R.drawable.ic_female_svg diff --git a/navi-amc/src/main/res/drawable/ic_explore_all.xml b/navi-amc/src/main/res/drawable/ic_explore_all.xml new file mode 100644 index 0000000000..2f6267fbba --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_explore_all.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_holdings.xml b/navi-amc/src/main/res/drawable/ic_holdings.xml new file mode 100644 index 0000000000..be8c48bb27 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_holdings.xml @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_holdings_small.xml b/navi-amc/src/main/res/drawable/ic_holdings_small.xml new file mode 100644 index 0000000000..5d2f9c6700 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_holdings_small.xml @@ -0,0 +1,47 @@ + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_minimum_investment.xml b/navi-amc/src/main/res/drawable/ic_minimum_investment.xml new file mode 100644 index 0000000000..102aa4a48a --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_minimum_investment.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_minimum_investment_small.xml b/navi-amc/src/main/res/drawable/ic_minimum_investment_small.xml new file mode 100644 index 0000000000..df27822562 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_minimum_investment_small.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_risk.xml b/navi-amc/src/main/res/drawable/ic_risk.xml new file mode 100644 index 0000000000..85019641ff --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_risk.xml @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_risk_small.xml b/navi-amc/src/main/res/drawable/ic_risk_small.xml new file mode 100644 index 0000000000..74a02330fe --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_risk_small.xml @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_scheme_information.xml b/navi-amc/src/main/res/drawable/ic_scheme_information.xml new file mode 100644 index 0000000000..a33b9d1e65 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_scheme_information.xml @@ -0,0 +1,40 @@ + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_scheme_information_small.xml b/navi-amc/src/main/res/drawable/ic_scheme_information_small.xml new file mode 100644 index 0000000000..a33b9d1e65 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_scheme_information_small.xml @@ -0,0 +1,40 @@ + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_scheme_managed.xml b/navi-amc/src/main/res/drawable/ic_scheme_managed.xml new file mode 100644 index 0000000000..803ec486bd --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_scheme_managed.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_scheme_managed_small.xml b/navi-amc/src/main/res/drawable/ic_scheme_managed_small.xml new file mode 100644 index 0000000000..5c7c277f9a --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_scheme_managed_small.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_stamped_duty_tax.xml b/navi-amc/src/main/res/drawable/ic_stamped_duty_tax.xml new file mode 100644 index 0000000000..9049a54d38 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_stamped_duty_tax.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_stamped_duty_tax_small.xml b/navi-amc/src/main/res/drawable/ic_stamped_duty_tax_small.xml new file mode 100644 index 0000000000..8d17207b7a --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_stamped_duty_tax_small.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + diff --git a/navi-amc/src/main/res/layout/activity_sell_my_fund.xml b/navi-amc/src/main/res/layout/activity_sell_my_fund.xml index a0ba202cb4..0811f038b6 100644 --- a/navi-amc/src/main/res/layout/activity_sell_my_fund.xml +++ b/navi-amc/src/main/res/layout/activity_sell_my_fund.xml @@ -126,9 +126,9 @@ android:id="@+id/fundType" style="@style/TextStyle.tv_size_14sp" android:layout_width="@dimen/_0dp" - android:maxLines="3" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_4dp" + android:maxLines="3" android:textColor="@color/color_A3A3AB" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" @@ -258,7 +258,7 @@ diff --git a/navi-amc/src/main/res/layout/fragment_home_screen.xml b/navi-amc/src/main/res/layout/fragment_home_screen.xml index 9134b82e08..7dbdb09f1c 100644 --- a/navi-amc/src/main/res/layout/fragment_home_screen.xml +++ b/navi-amc/src/main/res/layout/fragment_home_screen.xml @@ -467,24 +467,84 @@ - + tools:visibility="visible"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/navi-amc/src/main/res/layout/mutualfund_activity.xml b/navi-amc/src/main/res/layout/mutualfund_activity.xml index 7105f809af..8ff0a7d305 100644 --- a/navi-amc/src/main/res/layout/mutualfund_activity.xml +++ b/navi-amc/src/main/res/layout/mutualfund_activity.xml @@ -82,7 +82,7 @@ android:layout_marginBottom="@dimen/_4dp" android:onClick="@{(v)->mutualfundviewmodel.onClick(v)}" android:padding="@dimen/_6dp" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/constraintProfilePic" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/ic_back_button" /> @@ -99,6 +99,74 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/ivBackArrow" /> + + + + + + + + + + + + + + + @@ -115,99 +183,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + app:layout_constraintTop_toBottomOf="@+id/ConstraintWhoShouldInvest" + tools:visibility="gone"> @@ -827,7 +817,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/_16dp" - android:src="@drawable/minimum_investment_amount" + android:src="@drawable/ic_minimum_investment_small" app:layout_constraintBottom_toBottomOf="@+id/tvMinimumInvestmentAmt" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/tvMinimumInvestmentAmt" /> @@ -961,7 +951,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/_16dp" - android:src="@drawable/scheme_managed_by" + android:src="@drawable/ic_scheme_managed_small" app:layout_constraintBottom_toBottomOf="@+id/tvHoldings" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/tvHoldings" /> @@ -1033,7 +1023,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/_16dp" - android:src="@drawable/risk" + android:src="@drawable/ic_risk_small" app:layout_constraintBottom_toBottomOf="@+id/tvRisk" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/tvRisk" /> @@ -1116,7 +1106,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/_16dp" - android:src="@drawable/holdings" + android:src="@drawable/ic_holdings_small" app:layout_constraintBottom_toBottomOf="@+id/tvholdings" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/tvholdings" /> @@ -1204,7 +1194,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/_16dp" - android:src="@drawable/scheme_information" + android:src="@drawable/ic_scheme_information_small" app:layout_constraintBottom_toBottomOf="@+id/tvSchemeInformation" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/tvSchemeInformation" /> From fe78141c5a5b7eababbce78abf499de4f4cd1777 Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Wed, 27 Oct 2021 22:13:07 +0530 Subject: [PATCH 45/53] Sidharth|pan type text method added --- .../controllers/useridentification/PanController.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt index 45b94bc956..a39a982349 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt @@ -49,7 +49,7 @@ class PanController : Controller() { fun enterPan(panNumber: String? = null): PanController { verifyOnThisActivity() onView(panFieldMatcher).perform( - replaceText( + typeText( panNumber ?: RandomGenerator.getRandomPanNumber() ) ) @@ -76,9 +76,10 @@ class PanController : Controller() { } fun enterAge(ageDay: String, ageMonth: String, ageYear: String): PanController { - onView(ageDayMatcher).perform(replaceText(ageDay)) - onView(ageMonthMatcher).perform(replaceText(ageMonth)) - onView(ageYearMatcher).perform(replaceText(ageYear)) + onView(ageDayMatcher).perform(typeText(ageDay)) + onView(ageMonthMatcher).perform(typeText(ageMonth)) + onView(ageYearMatcher).perform(typeText(ageYear)) + closeSoftKeyboard() Log.i(TAG, "Age entered on profile page") return this } From 0e2a1c9eafa0e76171182444fdf4b26d3a07c7fd Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Wed, 27 Oct 2021 22:27:36 +0530 Subject: [PATCH 46/53] Sidharth|dockerfile fix for e2e --- Dockerfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 18152e3e5a..ad367b5232 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,10 +36,7 @@ RUN echo ${RELEASE_STORE_FILE} | base64 -d >> app/navi-release-key.jks RUN bash -c " \ if [ $FLAVOR = E2ETEST ] ; then \ - - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup; \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.BrowserStackInit -PtestType=\"e2e\" executeE2ETests; \ - ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.MockDataCleanup; \ + ./gradlew clean :app:testDevDebugUnitTest --tests com.naviapp.CustomerDataCleanup -PtestType=\"e2e\" executeE2ETests; \ \ elif [ $FLAVOR = DEV ] ; then \ ./gradlew clean \ From 9e50b420ce50dbb72d05c48feb473e237417313c Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Wed, 27 Oct 2021 22:42:39 +0530 Subject: [PATCH 47/53] Sidharth|Minor Fixes --- .../java/com/naviapp/homeLoan/BalanceTransferTest.kt | 2 +- .../androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt | 2 +- .../com/naviapp/controllers/useridentification/PanController.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt b/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt index 54fa414ae5..cce83722f5 100644 --- a/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/homeLoan/BalanceTransferTest.kt @@ -23,7 +23,7 @@ class BalanceTransferTest: TestBase() { @Rule @JvmField val tutorialActivity = ActivityScenarioRule(SplashActivity::class.java) - val homeLoanType: String = "Transfer Existing Home Loan" + val homeLoanType: String = "Loan Against Property" @Test fun getBalanceTransfer(){ diff --git a/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt b/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt index f368f9dd3b..c9f5abce9f 100644 --- a/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/homeLoan/HomeLoanTest.kt @@ -22,7 +22,7 @@ class HomeLoanTest : TestBase() { @Rule @JvmField val tutorialActivity = ActivityScenarioRule(SplashActivity::class.java) - val homeLoanType: String = "New Home Loan" + val homeLoanType: String = "Home Loan" @Test fun getNewHomeLoan() { diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt index a39a982349..06dcfcd4c6 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/useridentification/PanController.kt @@ -94,7 +94,7 @@ class PanController : Controller() { } inline fun submitApplication(waitForLoader: Boolean = true): T { - val submitApplicationMatcher = allOf(withId(R.id.action_tv), withText("Submit Application")) + val submitApplicationMatcher = allOf(withId(R.id.action_tv), withText("Next")) onView(isRoot()).perform(waitFor(submitApplicationMatcher)) onView(submitApplicationMatcher).perform(click()) if (waitForLoader) From 317131342dc0bfb74041a8d03e7e4a64cabebe28 Mon Sep 17 00:00:00 2001 From: Sidharth Bamba Date: Thu, 28 Oct 2021 01:23:09 +0530 Subject: [PATCH 48/53] Sidharth|Minor Fixes --- .../naviapp/newPersonalLoan/NewLoanTest.kt | 30 ++++++++++++------- .../resources/NewLoanDetails.json | 4 +-- .../homeloan/PropertyController.kt | 6 ++-- .../loanApplication/BankAccountController.kt | 4 +-- .../loanApplication/KycController.kt | 13 ++++++-- .../loanApplication/LoanDetailsController.kt | 4 +-- 6 files changed, 39 insertions(+), 22 deletions(-) diff --git a/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt b/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt index ad81975dfc..6cf6c594ec 100644 --- a/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt +++ b/app/src/androidTestDev/java/com/naviapp/newPersonalLoan/NewLoanTest.kt @@ -7,6 +7,9 @@ import com.naviapp.Utilities import com.naviapp.controllers.Controller import com.naviapp.controllers.dashboard.DashboardController import com.naviapp.controllers.eligibility.EligibilityController +import com.naviapp.controllers.loanApplication.BankAccountController +import com.naviapp.controllers.loanApplication.KycController +import com.naviapp.controllers.loanApplication.LoanAgreementController import com.naviapp.controllers.loanApplication.LoanDetailsController import com.naviapp.controllers.permission.PermissionController import com.naviapp.controllers.registration.RegistrationController @@ -73,14 +76,17 @@ class NewLoanTest : TestBase() { .setMinEmiAmount() Controller.on() .clickNext() - .bankStatement() - .captureSelfie() - .completeEKyc() - .completeAddress() - .clickNext() + .bankStatement() .enterBankDetails(bankDetails) .clickConfirm() .setUpMandate() + .captureSelfie() + .completeEKyc() + .clickNext() + .completeAddress() + .clickNext() + .addressVerification() + .clickNext() .clickGetLoan() .waitForDisbursement() .verifyOnThisActivity() @@ -130,6 +136,7 @@ class NewLoanTest : TestBase() { Controller.on() .getStarted() + .loginOrSignup() .enterPhoneNumberAndOtp(phoneNumberForeclosureLoan) .clickVerifyOtp() .tapPersonalLoanCard() @@ -148,14 +155,17 @@ class NewLoanTest : TestBase() { .setMinEmiAmount() Controller.on() .clickNext() - .bankStatement() - .captureSelfie() - .completeEKyc() - .completeAddress() - .clickNext() + .bankStatement() .enterBankDetails(bankDetails) .clickConfirm() .setUpMandate() + .captureSelfie() + .completeEKyc() + .clickNext() + .completeAddress() + .clickNext() + .addressVerification() + .clickNext() .clickGetLoan() .waitForDisbursement() .verifyActivity() diff --git a/app/src/androidTestDev/resources/NewLoanDetails.json b/app/src/androidTestDev/resources/NewLoanDetails.json index 25fdbf6756..d5b110c7bc 100644 --- a/app/src/androidTestDev/resources/NewLoanDetails.json +++ b/app/src/androidTestDev/resources/NewLoanDetails.json @@ -38,13 +38,13 @@ "propertyDetails": { "city": "Bengaluru", "finaliseProperty": "No", - "propertyType": "Fully Constructed – Apartment", + "propertyType": "Fully Constructed - Individual House", "purchaseValue": "100000", "loanAmount": "100000" }, "balanceTransferDetails": { "city": "Bengaluru", - "propertyType": "Fully Constructed – Apartment", + "propertyType": "Fully Constructed - Individual House", "loanTaken": "1000000", "loanTakenMonth": "07", "loanTakenYear": "2018", diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/homeloan/PropertyController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/homeloan/PropertyController.kt index 4eeaeb9cbb..fc9bd1a9a7 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/homeloan/PropertyController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/homeloan/PropertyController.kt @@ -96,9 +96,9 @@ class PropertyController : Controller() { onView(isRoot()).perform(waitFor(propertyTypeMatcher)) onView(propertyTypeMatcher).perform(click()); - val propertyTypeMatcher = withText(propertyType) - onView(isRoot()).perform(waitFor(propertyTypeMatcher)) - onView(propertyTypeMatcher).perform(click()) + val propertyTypeTextMatcher = withText(propertyType) + onView(isRoot()).perform(waitFor(propertyTypeTextMatcher)) + onView(propertyTypeTextMatcher).perform(click()) return this } diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/BankAccountController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/BankAccountController.kt index 5ebba9f8a4..8dd240368f 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/BankAccountController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/BankAccountController.kt @@ -181,7 +181,7 @@ class BankAccountController : Controller() { return this } - fun setUpMandate(): LoanAgreementController { + fun setUpMandate(): KycController { /* onView(isRoot()).perform(waitTillLoadingCompletes()) onView(isRoot()).perform(waitFor(setUpAutoDebitButtonMatcher))*/ onView(isRoot()).perform(waitFor(setUpAutoDebitButtonMatcher, WaitTimeOut.Loader)) @@ -195,7 +195,7 @@ class BankAccountController : Controller() { .reset() Log.i(TAG, "Auto setup EMI done") sleepFor(WaitTimeOut.Invisibility) - return LoanAgreementController() + return KycController() } fun setUpMandateFailure(): LoanAgreementController { diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/KycController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/KycController.kt index d245e6578d..cf598259ed 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/KycController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/KycController.kt @@ -42,12 +42,13 @@ class KycController : Controller() { val requiredKycPermissionManager: GrantPermissionRule = GrantPermissionRule.grant(*PermissionsManager.requiredPermission) - private val nextButtonMatcher = withText("Next") + val nextButtonMatcher = withText("Next") private val uploadSelfieButtonMatcher = withId(R.id.image_iv) private val kycButtonMatcher = withId(R.id.state_cv) private val confirmButtonMatcher = allOf(withId(R.id.action_tv), withText("Confirm")) private val yesRadioButtonMatcher = withId(R.id.yes_rb) private val noRadioButtonMatcher = withId(R.id.no_rb) + private val noButton = withId(R.id.no_rb) val otp = allOf(withId(R.id.action_btn_cv), isDisplayed()) val addressData = allOf(withId(R.id.image_iv), isDisplayed()) private val addressLine1 = withId(R.id.current_address_line1) @@ -195,11 +196,17 @@ class KycController : Controller() { return this } - fun clickNext(waitUntilLoaderDisappears: Boolean = true): BankAccountController { + inline fun clickNext(waitUntilLoaderDisappears: Boolean = true): T { onView(isRoot()).perform(waitFor(nextButtonMatcher)) onView(nextButtonMatcher).perform(click()) if (waitUntilLoaderDisappears) onView(isRoot()).perform(waitTillLoadingCompletes()) - return BankAccountController() + return T::class.java.getConstructor().newInstance() + } + + fun addressVerification(): KycController{ + onView(isRoot()).perform(waitTillLoadingCompletes()) + onView(noButton).perform(click()) + return KycController() } } \ No newline at end of file diff --git a/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/LoanDetailsController.kt b/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/LoanDetailsController.kt index df286f27a1..fa90ef775d 100644 --- a/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/LoanDetailsController.kt +++ b/app/src/androidTestLibrary/java/com/naviapp/controllers/loanApplication/LoanDetailsController.kt @@ -423,13 +423,13 @@ class LoanDetailsController : Controller() { } - fun bankStatement(waitForLoader: Boolean = true): KycController { + inline fun bankStatement(waitForLoader: Boolean = true):T{ val submitApplicationMatcher = allOf(withId(R.id.action_tv), withText("Skip")) onView(isRoot()).perform(waitFor(submitApplicationMatcher)) onView(submitApplicationMatcher).perform(click()) if (waitForLoader) onView(isRoot()).perform(waitTillLoadingCompletes()) - return KycController() + return T::class.java.getConstructor().newInstance() } } \ No newline at end of file From a7be23a3d251731b65e618938a8bc906a313667e Mon Sep 17 00:00:00 2001 From: Shankar Yadav Date: Thu, 28 Oct 2021 12:53:52 +0530 Subject: [PATCH 49/53] Fingure Signature on amc kyc flow --- .../drawerControllers/ControlTimedPoints.java | 14 + .../drawerControllers/CurveBezier.java | 49 ++ .../drawerControllers/TimedPoint.java | 24 + .../signature/svgUtils/SvgBuilder.java | 76 ++ .../signature/svgUtils/SvgPathBuilder.java | 73 ++ .../signature/svgUtils/SvgPoint.java | 56 ++ .../signature/ui/OnSignedListener.kt | 9 + .../signature/ui/SilkySignaturePad.java | 651 ++++++++++++++++++ .../signature/viewHelper/ViewCompat.java | 15 + .../viewHelper/ViewTreeObserverCompat.java | 20 + .../ui/kyc/fragments/SignatureFragment.kt | 118 +--- ...rounded.xml => progressbar_horizontal.xml} | 0 .../res/layout/activity_verify_pan_card.xml | 2 +- .../src/main/res/layout/fragment_address.xml | 4 +- .../main/res/layout/fragment_signature.xml | 80 +-- .../main/res/layout/view_progress_header.xml | 3 +- navi-amc/src/main/res/values-night/attrs.xml | 10 + navi-amc/src/main/res/values/dimens.xml | 2 + navi-amc/src/main/res/values/strings.xml | 3 +- 19 files changed, 1043 insertions(+), 166 deletions(-) create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/OnSignedListener.kt create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java rename navi-amc/src/main/res/drawable/{progressbar_horizontal_rounded.xml => progressbar_horizontal.xml} (100%) create mode 100644 navi-amc/src/main/res/values-night/attrs.xml diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java new file mode 100644 index 0000000000..1d80f182a4 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java @@ -0,0 +1,14 @@ +package com.navi.amc.investorapp.signature.drawerControllers; + +public class ControlTimedPoints { + + public TimedPoint c1; + public TimedPoint c2; + + public ControlTimedPoints set(TimedPoint c1, TimedPoint c2) { + this.c1 = c1; + this.c2 = c2; + return this; + } + +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java new file mode 100644 index 0000000000..594580c264 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java @@ -0,0 +1,49 @@ +package com.navi.amc.investorapp.signature.drawerControllers; + +public class CurveBezier { + + public TimedPoint startPoint; + public TimedPoint control1; + public TimedPoint control2; + public TimedPoint endPoint; + + public CurveBezier set(TimedPoint startPoint, TimedPoint control1, + TimedPoint control2, TimedPoint endPoint) { + this.startPoint = startPoint; + this.control1 = control1; + this.control2 = control2; + this.endPoint = endPoint; + return this; + } + + public float length() { + int steps = 10; + float length = 0; + double cx, cy, px = 0, py = 0, xDiff, yDiff; + + for (int i = 0; i <= steps; i++) { + float t = (float) i / steps; + cx = point(t, this.startPoint.x, this.control1.x, + this.control2.x, this.endPoint.x); + cy = point(t, this.startPoint.y, this.control1.y, + this.control2.y, this.endPoint.y); + if (i > 0) { + xDiff = cx - px; + yDiff = cy - py; + length += Math.sqrt(xDiff * xDiff + yDiff * yDiff); + } + px = cx; + py = cy; + } + return length; + + } + + public double point(float t, float start, float c1, float c2, float end) { + return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + + 3.0 * c2 * (1.0 - t) * t * t + + end * t * t * t; + } + +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java new file mode 100644 index 0000000000..bfeb4d723f --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java @@ -0,0 +1,24 @@ +package com.navi.amc.investorapp.signature.drawerControllers; + +public class TimedPoint { + public float x; + public float y; + public long timestamp; + + public TimedPoint set(float x, float y) { + this.x = x; + this.y = y; + this.timestamp = System.currentTimeMillis(); + return this; + } + + public float velocityFrom(TimedPoint start) { + float velocity = distanceTo(start) / (this.timestamp - start.timestamp); + if (velocity != velocity) return 0f; + return velocity; + } + + public float distanceTo(TimedPoint point) { + return (float) Math.sqrt(Math.pow(point.x - this.x, 2) + Math.pow(point.y - this.y, 2)); + } +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java new file mode 100644 index 0000000000..e4a2885ca9 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java @@ -0,0 +1,76 @@ +package com.navi.amc.investorapp.signature.svgUtils; + +import com.navi.amc.investorapp.signature.drawerControllers.CurveBezier; + +public class SvgBuilder { + + private final StringBuilder mSvgPathsBuilder = new StringBuilder(); + private SvgPathBuilder mCurrentPathBuilder = null; + + public SvgBuilder() { + } + + public void clear() { + mSvgPathsBuilder.setLength(0); + mCurrentPathBuilder = null; + } + + public String build(final int width, final int height) { + if (isPathStarted()) { + appendCurrentPath(); + } + return (new StringBuilder()) + .append("\n") + .append("") + .append("") + .append(mSvgPathsBuilder) + .append("") + .append("") + .toString(); + } + + public SvgBuilder append(final CurveBezier curve, final float strokeWidth) { + final Integer roundedStrokeWidth = Math.round(strokeWidth); + final SvgPoint curveStartSvgPoint = new SvgPoint(curve.startPoint); + final SvgPoint curveControlSvgPoint1 = new SvgPoint(curve.control1); + final SvgPoint curveControlSvgPoint2 = new SvgPoint(curve.control2); + final SvgPoint curveEndSvgPoint = new SvgPoint(curve.endPoint); + + if (!isPathStarted()) { + startNewPath(roundedStrokeWidth, curveStartSvgPoint); + } + + if (!curveStartSvgPoint.equals(mCurrentPathBuilder.getLastPoint()) + || !roundedStrokeWidth.equals(mCurrentPathBuilder.getStrokeWidth())) { + appendCurrentPath(); + startNewPath(roundedStrokeWidth, curveStartSvgPoint); + } + + mCurrentPathBuilder.append(curveControlSvgPoint1, curveControlSvgPoint2, curveEndSvgPoint); + return this; + } + + private void startNewPath(Integer roundedStrokeWidth, SvgPoint curveStartSvgPoint) { + mCurrentPathBuilder = new SvgPathBuilder(curveStartSvgPoint, roundedStrokeWidth); + } + + private void appendCurrentPath() { + mSvgPathsBuilder.append(mCurrentPathBuilder); + } + + private boolean isPathStarted() { + return mCurrentPathBuilder != null; + } + +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java new file mode 100644 index 0000000000..25bbf8be86 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java @@ -0,0 +1,73 @@ +package com.navi.amc.investorapp.signature.svgUtils; + +public class SvgPathBuilder { + + public static final Character SVG_RELATIVE_CUBIC_BEZIER_CURVE = 'c'; + public static final Character SVG_MOVE = 'M'; + private final StringBuilder mStringBuilder; + private final Integer mStrokeWidth; + private final SvgPoint mStartPoint; + private SvgPoint mLastPoint; + + public SvgPathBuilder(final SvgPoint startPoint, final Integer strokeWidth) { + mStrokeWidth = strokeWidth; + mStartPoint = startPoint; + mLastPoint = startPoint; + mStringBuilder = new StringBuilder(); + mStringBuilder.append(SVG_RELATIVE_CUBIC_BEZIER_CURVE); + + } + + public final Integer getStrokeWidth() { + return mStrokeWidth; + } + + public final SvgPoint getLastPoint() { + return mLastPoint; + } + + public SvgPathBuilder append(final SvgPoint controlPoint1, final SvgPoint controlPoint2, final SvgPoint endPoint) { + mStringBuilder.append(makeRelativeCubicBezierCurve(controlPoint1, controlPoint2, endPoint)); + mLastPoint = endPoint; + return this; + } + + @Override + public String toString() { + return (new StringBuilder()) + .append("") + .toString(); + } + + private String makeRelativeCubicBezierCurve(final SvgPoint controlPoint1, final SvgPoint controlPoint2, final SvgPoint endPoint) { + final String sControlPoint1 = controlPoint1.toRelativeCoordinates(mLastPoint); + final String sControlPoint2 = controlPoint2.toRelativeCoordinates(mLastPoint); + final String sEndPoint = endPoint.toRelativeCoordinates(mLastPoint); + + final StringBuilder sb = new StringBuilder(); + + sb.append(sControlPoint1); + sb.append(" "); + sb.append(sControlPoint2); + sb.append(" "); + + sb.append(sEndPoint); + sb.append(" "); + + // discard zero curve + final String svg = sb.toString(); + if ("c0 0 0 0 0 0".equals(svg)) { + return ""; + } else { + return svg; + } + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java new file mode 100644 index 0000000000..79dd6cf573 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java @@ -0,0 +1,56 @@ +package com.navi.amc.investorapp.signature.svgUtils; + +import com.navi.amc.investorapp.signature.drawerControllers.TimedPoint; + +class SvgPoint { + + final Integer x, y; + + public SvgPoint(TimedPoint point) { + // one optimisation is to get rid of decimals as they are mostly non-significant in the + // produced SVG image + x = Math.round(point.x); + y = Math.round(point.y); + } + + public SvgPoint(int x, int y) { + this.x = x; + this.y = y; + } + + public String toAbsoluteCoordinates() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(x); + stringBuilder.append(","); + stringBuilder.append(y); + return stringBuilder.toString(); + } + + public String toRelativeCoordinates(final SvgPoint referencePoint) { + return (new SvgPoint(x - referencePoint.x, y - referencePoint.y)).toString(); + } + + @Override + public String toString() { + return toAbsoluteCoordinates(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + SvgPoint svgPoint = (SvgPoint) o; + + if (!x.equals(svgPoint.x)) return false; + return y.equals(svgPoint.y); + + } + + @Override + public int hashCode() { + int result = x.hashCode(); + result = 31 * result + y.hashCode(); + return result; + } +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/OnSignedListener.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/OnSignedListener.kt new file mode 100644 index 0000000000..f6dc76cc52 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/OnSignedListener.kt @@ -0,0 +1,9 @@ +package com.navi.amc.investorapp.signature.ui + +interface OnSignedListener { + fun onStartSigning() + + fun onSigned() + + fun onClear() +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java new file mode 100644 index 0000000000..a3c5c20f05 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java @@ -0,0 +1,651 @@ +package com.navi.amc.investorapp.signature.ui; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewTreeObserver; + +import com.navi.amc.investorapp.R; +import com.navi.amc.investorapp.signature.drawerControllers.ControlTimedPoints; +import com.navi.amc.investorapp.signature.drawerControllers.CurveBezier; +import com.navi.amc.investorapp.signature.drawerControllers.TimedPoint; +import com.navi.amc.investorapp.signature.svgUtils.SvgBuilder; +import com.navi.amc.investorapp.signature.viewHelper.ViewCompat; +import com.navi.amc.investorapp.signature.viewHelper.ViewTreeObserverCompat; + +import java.util.ArrayList; +import java.util.List; + + +public class SilkySignaturePad extends View { + //View state + private List mPoints; + private boolean mIsEmpty; + private float mLastTouchX; + private float mLastTouchY; + private float mLastVelocity; + private float mLastWidth; + private RectF mDirtyRect; + + private final SvgBuilder mSvgBuilder = new SvgBuilder(); + + // Cache + private List mPointsCache = new ArrayList<>(); + private ControlTimedPoints mControlTimedPointsCached = new ControlTimedPoints(); + private CurveBezier mCurveBezierCached = new CurveBezier(); + + //Configurable parameters + private int mMinWidth; + private int mMaxWidth; + private float mVelocityFilterWeight; + private OnSignedListener mOnSignedListener; + private boolean mClearOnDoubleClick; + + //Click values + private long mFirstClick; + private int mCountClick; + private static final int DOUBLE_CLICK_DELAY_MS = 200; + + //Default attribute values + private final int DEFAULT_ATTR_PEN_MIN_WIDTH_PX = 3; + private final int DEFAULT_ATTR_PEN_MAX_WIDTH_PX = 7; + private final int DEFAULT_ATTR_PEN_COLOR = Color.BLACK; + private final float DEFAULT_ATTR_VELOCITY_FILTER_WEIGHT = 0.9f; + private final boolean DEFAULT_ATTR_CLEAR_ON_DOUBLE_CLICK = false; + + private Paint mPaint = new Paint(); + private Bitmap mSignatureBitmap = null; + private Canvas mSignatureBitmapCanvas = null; + + public SilkySignaturePad(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.getTheme().obtainStyledAttributes( + attrs, + R.styleable.SilkySignaturePad, + 0, 0); + + //Configurable parameters + try { + mMinWidth = a.getDimensionPixelSize(R.styleable.SilkySignaturePad_penMinWidth, convertDpToPx(DEFAULT_ATTR_PEN_MIN_WIDTH_PX)); + mMaxWidth = a.getDimensionPixelSize(R.styleable.SilkySignaturePad_penMaxWidth, convertDpToPx(DEFAULT_ATTR_PEN_MAX_WIDTH_PX)); + mPaint.setColor(a.getColor(R.styleable.SilkySignaturePad_penColor, DEFAULT_ATTR_PEN_COLOR)); + mVelocityFilterWeight = a.getFloat(R.styleable.SilkySignaturePad_velocityFilterWeight, DEFAULT_ATTR_VELOCITY_FILTER_WEIGHT); + mClearOnDoubleClick = a.getBoolean(R.styleable.SilkySignaturePad_clearOnDoubleClick, DEFAULT_ATTR_CLEAR_ON_DOUBLE_CLICK); + } finally { + a.recycle(); + } + + //Fixed parameters + mPaint.setAntiAlias(true); + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setStrokeCap(Paint.Cap.ROUND); + mPaint.setStrokeJoin(Paint.Join.ROUND); + + //Dirty rectangle to update only the changed portion of the view + mDirtyRect = new RectF(); + + clear(); + } + + /** + * Set the pen color from a given resource. + * If the resource is not found, {@link Color#BLACK} is assumed. + * + * @param colorRes the color resource. + */ + public void setPenColorRes(int colorRes) { + try { + setPenColor(getResources().getColor(colorRes)); + } catch (Resources.NotFoundException ex) { + setPenColor(Color.parseColor("#000000")); + } + } + + /** + * Set the pen color from a given color. + * + * @param color the color. + */ + public void setPenColor(int color) { + mPaint.setColor(color); + } + + /** + * Set the minimum width of the stroke in pixel. + * + * @param minWidth the width in dp. + */ + public void setMinWidth(float minWidth) { + mMinWidth = convertDpToPx(minWidth); + } + + /** + * Set the maximum width of the stroke in pixel. + * + * @param maxWidth the width in dp. + */ + public void setMaxWidth(float maxWidth) { + mMaxWidth = convertDpToPx(maxWidth); + } + + /** + * Set the velocity filter weight. + * + * @param velocityFilterWeight the weight. + */ + public void setVelocityFilterWeight(float velocityFilterWeight) { + mVelocityFilterWeight = velocityFilterWeight; + } + + public void clear() { + mSvgBuilder.clear(); + mPoints = new ArrayList<>(); + mLastVelocity = 0; + mLastWidth = (mMinWidth + mMaxWidth) / 2; + + if (mSignatureBitmap != null) { + mSignatureBitmap = null; + ensureSignatureBitmap(); + } + + setIsEmpty(true); + + invalidate(); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!isEnabled()) + return false; + + float eventX = event.getX(); + float eventY = event.getY(); + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + getParent().requestDisallowInterceptTouchEvent(true); + mPoints.clear(); + if (isDoubleClick()) break; + mLastTouchX = eventX; + mLastTouchY = eventY; + addPoint(getNewPoint(eventX, eventY)); + if (mOnSignedListener != null) mOnSignedListener.onStartSigning(); + + case MotionEvent.ACTION_MOVE: + resetDirtyRect(eventX, eventY); + addPoint(getNewPoint(eventX, eventY)); + break; + + case MotionEvent.ACTION_UP: + resetDirtyRect(eventX, eventY); + addPoint(getNewPoint(eventX, eventY)); + getParent().requestDisallowInterceptTouchEvent(true); + setIsEmpty(false); + break; + + default: + return false; + } + + //invalidate(); + invalidate( + (int) (mDirtyRect.left - mMaxWidth), + (int) (mDirtyRect.top - mMaxWidth), + (int) (mDirtyRect.right + mMaxWidth), + (int) (mDirtyRect.bottom + mMaxWidth)); + + return true; + } + + @Override + protected void onDraw(Canvas canvas) { + if (mSignatureBitmap != null) { + canvas.drawBitmap(mSignatureBitmap, 0, 0, mPaint); + } + } + + public void setOnSignedListener(OnSignedListener listener) { + mOnSignedListener = listener; + } + + public boolean isEmpty() { + return mIsEmpty; + } + + public String getSignatureSvg() { + int width = getTransparentSignatureBitmap().getWidth(); + int height = getTransparentSignatureBitmap().getHeight(); + return mSvgBuilder.build(width, height); + } + + public Bitmap getSignatureBitmap() { + Bitmap originalBitmap = getTransparentSignatureBitmap(); + Bitmap whiteBgBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(whiteBgBitmap); + canvas.drawColor(Color.WHITE); + canvas.drawBitmap(originalBitmap, 0, 0, null); + return whiteBgBitmap; + } + + /** + * @param compressPercentage Hint to the compressor, 0-100 percent. 0 meaning compress for + * small size, 100 meaning compress for max quality. Some + * formats, like PNG which is lossless, will ignore the + * quality setting + */ + public Bitmap getCompressedSignatureBitmap(int compressPercentage) { + + if (compressPercentage < 0) { + compressPercentage = 0; + } else if (compressPercentage > 100) { + compressPercentage = 100; + } + Bitmap originalBitmap = getTransparentSignatureBitmap(); + int originalWidth = originalBitmap.getWidth(); + int originalHeight = originalBitmap.getHeight(); + + int targetWidth = originalWidth * compressPercentage / 100; // your arbitrary fixed limit + int targetHeight = (int) (originalHeight * targetWidth / (double) originalWidth); + + Bitmap whiteBgBitmap = Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(whiteBgBitmap); + canvas.drawColor(Color.WHITE); + canvas.drawBitmap(originalBitmap, 0, 0, null); + whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); + return whiteBgBitmap; + } + + /** + * @param deiredWidth Desired width of the bitmap + */ + public Bitmap getFixedSizeSignatureBitmap(int deiredWidth) { + + Bitmap originalBitmap = getTransparentSignatureBitmap(); + int originalWidth = originalBitmap.getWidth(); + int originalHeight = originalBitmap.getHeight(); + + int targetWidth = deiredWidth; // your arbitrary fixed limit + int targetHeight = (int) (originalHeight * targetWidth / (double) originalWidth); + + Bitmap whiteBgBitmap = Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(whiteBgBitmap); + canvas.drawColor(Color.WHITE); + canvas.drawBitmap(originalBitmap, 0, 0, null); + whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); + return whiteBgBitmap; + } + + /** + * @param deiredWidth Desired width of the bitmap + */ + public Bitmap getFixedSizeSignatureBitmap(int deiredWidth,int desiredHeight) { + + Bitmap originalBitmap = getTransparentSignatureBitmap(); + int originalWidth = originalBitmap.getWidth(); + int originalHeight = originalBitmap.getHeight(); + + int targetWidth = deiredWidth; // your arbitrary fixed limit + int targetHeight = desiredHeight; + + Bitmap whiteBgBitmap = Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(whiteBgBitmap); + canvas.drawColor(Color.WHITE); + canvas.drawBitmap(originalBitmap, 0, 0, null); + whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); + return whiteBgBitmap; + } + + public void setSignatureBitmap(final Bitmap signature) { + // View was laid out... + if (ViewCompat.isLaidOut(this)) { + clear(); + ensureSignatureBitmap(); + + RectF tempSrc = new RectF(); + RectF tempDst = new RectF(); + + int dWidth = signature.getWidth(); + int dHeight = signature.getHeight(); + int vWidth = getWidth(); + int vHeight = getHeight(); + + // Generate the required transform. + tempSrc.set(0, 0, dWidth, dHeight); + tempDst.set(0, 0, vWidth, vHeight); + + Matrix drawMatrix = new Matrix(); + drawMatrix.setRectToRect(tempSrc, tempDst, Matrix.ScaleToFit.CENTER); + + Canvas canvas = new Canvas(mSignatureBitmap); + canvas.drawBitmap(signature, drawMatrix, null); + setIsEmpty(false); + invalidate(); + } + // View not laid out yet e.g. called from onCreate(), onRestoreInstanceState()... + else { + getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + // Remove layout listener... + ViewTreeObserverCompat.removeOnGlobalLayoutListener(getViewTreeObserver(), this); + + // Signature bitmap... + setSignatureBitmap(signature); + } + }); + } + } + + public Bitmap getTransparentSignatureBitmap() { + ensureSignatureBitmap(); + return mSignatureBitmap; + } + + public Bitmap getTransparentSignatureBitmap(boolean trimBlankSpace) { + + if (!trimBlankSpace) { + return getTransparentSignatureBitmap(); + } + + ensureSignatureBitmap(); + + int imgHeight = mSignatureBitmap.getHeight(); + int imgWidth = mSignatureBitmap.getWidth(); + + int backgroundColor = Color.TRANSPARENT; + + int xMin = Integer.MAX_VALUE, + xMax = Integer.MIN_VALUE, + yMin = Integer.MAX_VALUE, + yMax = Integer.MIN_VALUE; + + boolean foundPixel = false; + + // Find xMin + for (int x = 0; x < imgWidth; x++) { + boolean stop = false; + for (int y = 0; y < imgHeight; y++) { + if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { + xMin = x; + stop = true; + foundPixel = true; + break; + } + } + if (stop) + break; + } + + // Image is empty... + if (!foundPixel) + return null; + + // Find yMin + for (int y = 0; y < imgHeight; y++) { + boolean stop = false; + for (int x = xMin; x < imgWidth; x++) { + if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { + yMin = y; + stop = true; + break; + } + } + if (stop) + break; + } + + // Find xMax + for (int x = imgWidth - 1; x >= xMin; x--) { + boolean stop = false; + for (int y = yMin; y < imgHeight; y++) { + if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { + xMax = x; + stop = true; + break; + } + } + if (stop) + break; + } + + // Find yMax + for (int y = imgHeight - 1; y >= yMin; y--) { + boolean stop = false; + for (int x = xMin; x <= xMax; x++) { + if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { + yMax = y; + stop = true; + break; + } + } + if (stop) + break; + } + + return Bitmap.createBitmap(mSignatureBitmap, xMin, yMin, xMax - xMin, yMax - yMin); + } + + private boolean isDoubleClick() { + if (mClearOnDoubleClick) { + if (mFirstClick != 0 && System.currentTimeMillis() - mFirstClick > DOUBLE_CLICK_DELAY_MS) { + mCountClick = 0; + } + mCountClick++; + if (mCountClick == 1) { + mFirstClick = System.currentTimeMillis(); + } else if (mCountClick == 2) { + long lastClick = System.currentTimeMillis(); + if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS) { + this.clear(); + return true; + } + } + } + return false; + } + + private TimedPoint getNewPoint(float x, float y) { + int mCacheSize = mPointsCache.size(); + TimedPoint timedPoint; + if (mCacheSize == 0) { + // Cache is empty, create a new point + timedPoint = new TimedPoint(); + } else { + // Get point from cache + timedPoint = mPointsCache.remove(mCacheSize - 1); + } + + return timedPoint.set(x, y); + } + + private void recyclePoint(TimedPoint point) { + mPointsCache.add(point); + } + + private void addPoint(TimedPoint newPoint) { + mPoints.add(newPoint); + + int pointsCount = mPoints.size(); + if (pointsCount > 3) { + + ControlTimedPoints tmp = calculateCurveControlPoints(mPoints.get(0), mPoints.get(1), mPoints.get(2)); + TimedPoint c2 = tmp.c2; + recyclePoint(tmp.c1); + + tmp = calculateCurveControlPoints(mPoints.get(1), mPoints.get(2), mPoints.get(3)); + TimedPoint c3 = tmp.c1; + recyclePoint(tmp.c2); + + CurveBezier curve = mCurveBezierCached.set(mPoints.get(1), c2, c3, mPoints.get(2)); + + TimedPoint startPoint = curve.startPoint; + TimedPoint endPoint = curve.endPoint; + + float velocity = endPoint.velocityFrom(startPoint); + velocity = Float.isNaN(velocity) ? 0.0f : velocity; + + velocity = mVelocityFilterWeight * velocity + + (1 - mVelocityFilterWeight) * mLastVelocity; + + // The new width is a function of the velocity. Higher velocities + // correspond to thinner strokes. + float newWidth = strokeWidth(velocity); + + // The Bezier's width starts out as last curve's final width, and + // gradually changes to the stroke width just calculated. The new + // width calculation is based on the velocity between the Bezier's + // start and end mPoints. + addBezier(curve, mLastWidth, newWidth); + + mLastVelocity = velocity; + mLastWidth = newWidth; + + // Remove the first element from the list, + // so that we always have no more than 4 mPoints in mPoints array. + recyclePoint(mPoints.remove(0)); + + recyclePoint(c2); + recyclePoint(c3); + + } else if (pointsCount == 1) { + // To reduce the initial lag make it work with 3 mPoints + // by duplicating the first point + TimedPoint firstPoint = mPoints.get(0); + mPoints.add(getNewPoint(firstPoint.x, firstPoint.y)); + } + } + + private void addBezier(CurveBezier curve, float startWidth, float endWidth) { + mSvgBuilder.append(curve, (startWidth + endWidth) / 2); + ensureSignatureBitmap(); + float originalWidth = mPaint.getStrokeWidth(); + float widthDelta = endWidth - startWidth; + float drawSteps = (float) Math.floor(curve.length()); + + for (int i = 0; i < drawSteps; i++) { + // Calculate the Bezier (x, y) coordinate for this step. + float t = ((float) i) / drawSteps; + float tt = t * t; + float ttt = tt * t; + float u = 1 - t; + float uu = u * u; + float uuu = uu * u; + + float x = uuu * curve.startPoint.x; + x += 3 * uu * t * curve.control1.x; + x += 3 * u * tt * curve.control2.x; + x += ttt * curve.endPoint.x; + + float y = uuu * curve.startPoint.y; + y += 3 * uu * t * curve.control1.y; + y += 3 * u * tt * curve.control2.y; + y += ttt * curve.endPoint.y; + + // Set the incremental stroke width and draw. + mPaint.setStrokeWidth(startWidth + ttt * widthDelta); + mSignatureBitmapCanvas.drawPoint(x, y, mPaint); + expandDirtyRect(x, y); + } + + mPaint.setStrokeWidth(originalWidth); + } + + private ControlTimedPoints calculateCurveControlPoints(TimedPoint s1, TimedPoint s2, TimedPoint s3) { + float dx1 = s1.x - s2.x; + float dy1 = s1.y - s2.y; + float dx2 = s2.x - s3.x; + float dy2 = s2.y - s3.y; + + float m1X = (s1.x + s2.x) / 2.0f; + float m1Y = (s1.y + s2.y) / 2.0f; + float m2X = (s2.x + s3.x) / 2.0f; + float m2Y = (s2.y + s3.y) / 2.0f; + + float l1 = (float) Math.sqrt(dx1 * dx1 + dy1 * dy1); + float l2 = (float) Math.sqrt(dx2 * dx2 + dy2 * dy2); + + float dxm = (m1X - m2X); + float dym = (m1Y - m2Y); + float k = l2 / (l1 + l2); + if (Float.isNaN(k)) k = 0.0f; + float cmX = m2X + dxm * k; + float cmY = m2Y + dym * k; + + float tx = s2.x - cmX; + float ty = s2.y - cmY; + + return mControlTimedPointsCached.set(getNewPoint(m1X + tx, m1Y + ty), getNewPoint(m2X + tx, m2Y + ty)); + } + + private float strokeWidth(float velocity) { + return Math.max(mMaxWidth / (velocity + 1), mMinWidth); + } + + /** + * Called when replaying history to ensure the dirty region includes all + * mPoints. + * + * @param historicalX the previous x coordinate. + * @param historicalY the previous y coordinate. + */ + private void expandDirtyRect(float historicalX, float historicalY) { + if (historicalX < mDirtyRect.left) { + mDirtyRect.left = historicalX; + } else if (historicalX > mDirtyRect.right) { + mDirtyRect.right = historicalX; + } + if (historicalY < mDirtyRect.top) { + mDirtyRect.top = historicalY; + } else if (historicalY > mDirtyRect.bottom) { + mDirtyRect.bottom = historicalY; + } + } + + /** + * Resets the dirty region when the motion event occurs. + * + * @param eventX the event x coordinate. + * @param eventY the event y coordinate. + */ + private void resetDirtyRect(float eventX, float eventY) { + + // The mLastTouchX and mLastTouchY were set when the ACTION_DOWN motion event occurred. + mDirtyRect.left = Math.min(mLastTouchX, eventX); + mDirtyRect.right = Math.max(mLastTouchX, eventX); + mDirtyRect.top = Math.min(mLastTouchY, eventY); + mDirtyRect.bottom = Math.max(mLastTouchY, eventY); + } + + private void setIsEmpty(boolean newValue) { + mIsEmpty = newValue; + if (mOnSignedListener != null) { + if (mIsEmpty) { + mOnSignedListener.onClear(); + } else { + mOnSignedListener.onSigned(); + } + } + } + + private void ensureSignatureBitmap() { + if (mSignatureBitmap == null) { + mSignatureBitmap = Bitmap.createBitmap(getWidth(), getHeight(), + Bitmap.Config.ARGB_8888); + mSignatureBitmapCanvas = new Canvas(mSignatureBitmap); + } + } + + private int convertDpToPx(float dp) { + return Math.round(getContext().getResources().getDisplayMetrics().density * dp); + } +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java new file mode 100644 index 0000000000..17e5187940 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java @@ -0,0 +1,15 @@ +package com.navi.amc.investorapp.signature.viewHelper; + +import android.os.Build; +import android.view.View; + +public class ViewCompat { + public static boolean isLaidOut(View view) { + // Future (API19+)... + if (Build.VERSION.SDK_INT >= 19) { + return view.isLaidOut(); + } + // Legacy... + return view.getWidth() > 0 && view.getHeight() > 0; + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java new file mode 100644 index 0000000000..d08e3d0641 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java @@ -0,0 +1,20 @@ +package com.navi.amc.investorapp.signature.viewHelper; + +import android.annotation.SuppressLint; +import android.os.Build; +import android.view.ViewTreeObserver; + +public class ViewTreeObserverCompat { + @SuppressLint("NewApi") + @SuppressWarnings("deprecation") + public static void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener victim) { + // Future (API16+)... + if (Build.VERSION.SDK_INT >= 16) { + observer.removeOnGlobalLayoutListener(victim); + } + // Legacy... + else { + observer.removeGlobalOnLayoutListener(victim); + } + } +} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/SignatureFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/SignatureFragment.kt index 8449679332..9e5428503f 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/SignatureFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/SignatureFragment.kt @@ -2,15 +2,8 @@ package com.navi.amc.investorapp.ui.kyc.fragments import android.content.Context import android.graphics.Bitmap -import android.graphics.ImageDecoder -import android.net.Uri -import android.os.Build import android.os.Bundle -import android.provider.MediaStore import android.view.View -import androidx.activity.result.contract.ActivityResultContracts -import androidx.core.content.PermissionChecker -import androidx.lifecycle.ViewModelProvider import com.navi.amc.investorapp.R import com.navi.amc.investorapp.base.BaseFragment import com.navi.amc.investorapp.constants.AnalyticsConstant @@ -19,22 +12,16 @@ import com.navi.amc.investorapp.constants.Constant.SIGNATURE_UPLOAD import com.navi.amc.investorapp.databinding.FragmentSignatureBinding import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter +import com.navi.amc.investorapp.signature.ui.OnSignedListener import com.navi.amc.investorapp.ui.kyc.listeners.FragmentInterchangeListener import com.navi.amc.investorapp.ui.kyc.listeners.HeaderInteractionListener -import com.navi.amc.investorapp.ui.kyc.viewmodel.KycVM import com.navi.amc.investorapp.ui.kyc.viewmodel.SignatureVM import com.navi.amc.investorapp.util.IconUtils -import com.navi.amc.investorapp.util.PermissionsManager -import com.navi.amc.investorapp.util.observeNonNull import java.io.ByteArrayOutputStream class SignatureFragment : BaseFragment(), View.OnClickListener { - private val permissionsManager by lazy { PermissionsManager(requireActivity()) } - private val storagePermission by lazy { arrayOf(PermissionsManager.STORAGE_PERMISSION) } - private var isPermissionAlready = false - private var bitmapImage: Bitmap? = null private val analyticsEventTracker = AnalyticsConstant.KycScreen() companion object { @@ -60,7 +47,6 @@ class SignatureFragment : override val layoutRes: Int get() = R.layout.fragment_signature - override fun bindViewModel() { binding.lifecycleOwner = this } @@ -81,46 +67,28 @@ class SignatureFragment : 85, IconUtils.ICON_SIGNATURE ) - binding.uploadIv.visibility = View.VISIBLE - binding.uploadTitleTv.visibility = View.VISIBLE - binding.saveTv.visibility = View.GONE - binding.retakeTv.visibility = View.GONE - binding.permissionDeniedView.visibility = View.GONE - binding.permissionDeniedView.setTitle(getString(R.string.allow_storage_permission)) - binding.permissionDeniedView.setBgColor(R.color.white) - isPermissionAlready = permissionsManager.hasPermissions(storagePermission) - if (!isPermissionAlready) { - permissionsManager.requestPermissions( - storagePermission, - PermissionsManager.REQUEST_CODE - ) - } + disable(binding.saveTv) + disable(binding.redoTv) } private fun initListeners() { binding.saveTv.setOnClickListener(this) - binding.retakeTv.setOnClickListener(this) - binding.uploadTitleTv.setOnClickListener(this) - binding.uploadIv.setOnClickListener(this) - } + binding.redoTv.setOnClickListener(this) + binding.signaturePad.setOnSignedListener(object : OnSignedListener { + override fun onStartSigning() { + enable(binding.saveTv) + enable(binding.redoTv) + } - private fun initAfterScreenCapture(uri: Uri) { - val bitmap = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - ImageDecoder.decodeBitmap( - ImageDecoder.createSource( - requireContext().contentResolver, - uri - ) - ) - } else { - MediaStore.Images.Media.getBitmap(requireContext().contentResolver, uri) - } - bitmapImage = bitmap - binding.uploadIv.visibility = View.GONE - binding.uploadTitleTv.visibility = View.GONE - binding.saveTv.visibility = View.VISIBLE - binding.retakeTv.visibility = View.VISIBLE - binding.docIv.setImageURI(uri) + override fun onSigned() { + + } + + override fun onClear() { + disable(binding.saveTv) + disable(binding.redoTv) + } + }) } private fun initObservers() { @@ -136,58 +104,22 @@ class SignatureFragment : val accessToken = sharedPreferences?.getObject(SharedPreferencesKeys.COMMON_RESPONSE_OBJECT)?.accessToken.toString() val outputStream = ByteArrayOutputStream() + val bitmapImage = binding.signaturePad.signatureBitmap bitmapImage?.compress(Bitmap.CompressFormat.JPEG, 70, outputStream) viewModel.submitData(accessToken, SIGNATURE_UPLOAD, outputStream.toByteArray()) } - R.id.retake_tv, R.id.upload_iv, R.id.upload_title_tv -> { - if (permissionsManager.hasPermissions(storagePermission) - ) openStorage() else - permissionsManager.requestPermissions( - storagePermission, - PermissionsManager.REQUEST_CODE - ) + R.id.redo_tv -> { + binding.signaturePad.clear() } } } - private val getContent = - registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> - uri?.let { - initAfterScreenCapture(uri) - } - } - - private fun openStorage() { - getContent.launch("image/*") + private fun enable(view: View) { + view.alpha = 1f } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - activity?.let { - val sharedViewModel = ViewModelProvider(it).get(KycVM::class.java) - observePermissionResult(sharedViewModel) - } - } - - private fun observePermissionResult(sharedViewModel: KycVM) { - sharedViewModel.permissionResult.observeNonNull(this) { - when (it?.third) { - PermissionsManager.REQUEST_CODE -> { - if (it.second.firstOrNull() == PermissionChecker.PERMISSION_GRANTED) { - init() - } else { - binding.permissionDeniedView.visibility = View.VISIBLE - } - } - } - sharedViewModel.permissionResult.value = null - } - } - - override fun onResume() { - super.onResume() - if (permissionsManager.hasPermissions(storagePermission) && !isPermissionAlready) { - init() - } + private fun disable(view: View) { + view.alpha = 0.5f } override val screenName: String diff --git a/navi-amc/src/main/res/drawable/progressbar_horizontal_rounded.xml b/navi-amc/src/main/res/drawable/progressbar_horizontal.xml similarity index 100% rename from navi-amc/src/main/res/drawable/progressbar_horizontal_rounded.xml rename to navi-amc/src/main/res/drawable/progressbar_horizontal.xml diff --git a/navi-amc/src/main/res/layout/activity_verify_pan_card.xml b/navi-amc/src/main/res/layout/activity_verify_pan_card.xml index 3c69bca154..a232663ab5 100644 --- a/navi-amc/src/main/res/layout/activity_verify_pan_card.xml +++ b/navi-amc/src/main/res/layout/activity_verify_pan_card.xml @@ -119,7 +119,7 @@ android:layout_height="@dimen/_4dp" android:layout_marginTop="@dimen/_5dp" android:progress="20" - android:progressDrawable="@drawable/progressbar_horizontal_rounded" + android:progressDrawable="@drawable/progressbar_horizontal" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvProgress" /> diff --git a/navi-amc/src/main/res/layout/fragment_address.xml b/navi-amc/src/main/res/layout/fragment_address.xml index a307a31c71..c59a5a807d 100644 --- a/navi-amc/src/main/res/layout/fragment_address.xml +++ b/navi-amc/src/main/res/layout/fragment_address.xml @@ -76,7 +76,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_24dp" - android:text="@string/pincode" + android:text="@string/pincode_text" app:layout_constraintStart_toStartOf="@+id/pincode_ev" app:layout_constraintTop_toBottomOf="@+id/address_ev" /> @@ -88,7 +88,7 @@ android:layout_marginStart="@dimen/_8dp" android:layout_marginTop="@dimen/_8dp" android:gravity="center_vertical" - android:hint="@string/pincode" + android:hint="@string/pincode_text" android:imeOptions="actionNext" android:inputType="number" android:maxLength="6" diff --git a/navi-amc/src/main/res/layout/fragment_signature.xml b/navi-amc/src/main/res/layout/fragment_signature.xml index 33f38323b1..6350b72a3c 100644 --- a/navi-amc/src/main/res/layout/fragment_signature.xml +++ b/navi-amc/src/main/res/layout/fragment_signature.xml @@ -2,77 +2,32 @@ - - - - - - - - - - @@ -84,20 +39,11 @@ android:layout_height="@dimen/_48dp" android:layout_marginStart="@dimen/_8dp" android:gravity="center" - android:text="@string/continuee" + android:text="@string/save" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@+id/retake_tv" /> + app:layout_constraintStart_toEndOf="@+id/redo_tv" /> - - \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/view_progress_header.xml b/navi-amc/src/main/res/layout/view_progress_header.xml index 089cab0e00..18bf40b90e 100644 --- a/navi-amc/src/main/res/layout/view_progress_header.xml +++ b/navi-amc/src/main/res/layout/view_progress_header.xml @@ -12,7 +12,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_20dp" - android:paddingStart="@dimen/_4dp" android:paddingTop="@dimen/_10dp" android:paddingEnd="@dimen/_30dp" android:paddingBottom="@dimen/_10dp" @@ -68,7 +67,7 @@ android:layout_height="@dimen/_4dp" android:layout_marginTop="@dimen/_16dp" android:progress="50" - android:progressDrawable="@drawable/progressbar_horizontal_rounded" + android:progressDrawable="@drawable/progressbar_horizontal" android:visibility="gone" app:layout_constraintTop_toBottomOf="@id/subtitle_tv" /> diff --git a/navi-amc/src/main/res/values-night/attrs.xml b/navi-amc/src/main/res/values-night/attrs.xml new file mode 100644 index 0000000000..c1aab882ec --- /dev/null +++ b/navi-amc/src/main/res/values-night/attrs.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/navi-amc/src/main/res/values/dimens.xml b/navi-amc/src/main/res/values/dimens.xml index c771c81a9b..803c3ce546 100644 --- a/navi-amc/src/main/res/values/dimens.xml +++ b/navi-amc/src/main/res/values/dimens.xml @@ -37,6 +37,7 @@ 70dp 76dp 80dp + 84dp 88dp 92dp 96dp @@ -90,6 +91,7 @@ 172dp 200dp 205dp + 440dp 55dp 33dp 125dp diff --git a/navi-amc/src/main/res/values/strings.xml b/navi-amc/src/main/res/values/strings.xml index c4f8a7735c..63ad817b6d 100644 --- a/navi-amc/src/main/res/values/strings.xml +++ b/navi-amc/src/main/res/values/strings.xml @@ -134,7 +134,7 @@ Select Bank Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum - Pincode + Pincode Ex - 650087 House no/ Street name House no 10 @@ -542,6 +542,7 @@ Ensure the photo has white background Upload Signature Upload again + Redo Speak the digits below while recording Tips for great video Retake video From 048fc538273aa90c1359fe13dc892c041b050e9a Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Thu, 28 Oct 2021 14:36:16 +0530 Subject: [PATCH 50/53] kyc issue fixed --- .../amc/investorapp/constants/Constant.kt | 3 + .../ui/kyc/fragments/PanFragment.kt | 61 ++++- .../kyc/fragments/PersonalDetailFragment.kt | 2 +- .../ui/kyc/fragments/VideoFragment.kt | 6 +- .../ui/kyc/fragments/VideoOTPBottomSheet.kt | 5 - .../ui/personalDetails/AboutIncomeActivity.kt | 7 +- .../navi/amc/investorapp/util/IconUtils.kt | 2 + .../main/res/drawable/ic_filter_picture.xml | 34 +++ .../main/res/drawable/ic_pan_card_front.png | Bin 0 -> 28451 bytes .../res/layout/bottom_sheet_video_otp.xml | 69 +---- .../main/res/layout/fragment_kyc_video.xml | 89 +------ navi-amc/src/main/res/layout/fragment_pan.xml | 249 +++++++++++------- navi-amc/src/main/res/values/dimens.xml | 1 + navi-amc/src/main/res/values/strings.xml | 2 + 14 files changed, 273 insertions(+), 257 deletions(-) create mode 100644 navi-amc/src/main/res/drawable/ic_filter_picture.xml create mode 100644 navi-amc/src/main/res/drawable/ic_pan_card_front.png diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/constants/Constant.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/constants/Constant.kt index 8fc6de5f8c..7a78070e8b 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/constants/Constant.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/constants/Constant.kt @@ -57,6 +57,7 @@ object Constant { const val VIDEO_PATH = "VIDEO_PATH" const val AADHAAR_CARD = "ADDRESS_PROOF_TYPE" const val PASSPORT = "PASSPORT" + const val PAN_CARD = "PAN_CARD" const val DRIVING_LICENCE = "DRIVING_LICENCE" const val VOTER_ID = "VOTER_ID" const val IMAGE_CAPTURE = 1002 @@ -91,5 +92,7 @@ object Constant { const val OTHER = "other" const val MALE = "male" const val FEMALE = "female" + const val CAMERA_PERMISSION = "CAMERA_PERMISSION" + const val STORAGE_PERMISSION = "STORAGE_PERMISSION" } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt index f2047a8f5e..648e85abaf 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt @@ -2,8 +2,13 @@ package com.navi.amc.investorapp.ui.kyc.fragments import android.content.Context import android.graphics.Bitmap +import android.graphics.ImageDecoder +import android.net.Uri +import android.os.Build import android.os.Bundle +import android.provider.MediaStore import android.view.View +import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.PermissionChecker import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModelProvider @@ -13,7 +18,9 @@ import com.navi.amc.investorapp.constants.AnalyticsConstant import com.navi.amc.investorapp.constants.Constant import com.navi.amc.investorapp.constants.Constant.PAN_UPLOAD import com.navi.amc.investorapp.databinding.FragmentPanBinding +import com.navi.amc.investorapp.extension.gone import com.navi.amc.investorapp.extension.isVisible +import com.navi.amc.investorapp.extension.visible import com.navi.amc.investorapp.sharedpreference.SharedPreferencesKeys import com.navi.amc.investorapp.sharedpreference.SharedPreferencesWriter import com.navi.amc.investorapp.ui.kyc.customcamera.CameraActionListener @@ -38,6 +45,7 @@ class PanFragment : BaseFragment(), View.OnClickListe private val permissionsManager by lazy { PermissionsManager(requireActivity()) } private val captureImageBitmap = MutableLiveData() private val cameraPermission by lazy { arrayOf(PermissionsManager.CAMERA_PERMISSION) } + private val storagePermission by lazy { arrayOf(PermissionsManager.STORAGE_PERMISSION) } private val cameraListener = CameraEventListener(this) private var isPermissionAlready = false private var bitmapImage: Bitmap? = null @@ -88,6 +96,8 @@ class PanFragment : BaseFragment(), View.OnClickListe ) binding.permissionDeniedView.setTitle(getString(R.string.allow_camera_permission)) binding.permissionDeniedView.setBgColor(R.color.white) + binding.subDocTitleTv.text = getString(R.string.front_side_of_pan_card) + IconUtils.updateIcon(IconUtils.ICON_PAN_CARD, binding.docIv) initBeforeScreenCapture() observeCameraImage() isPermissionAlready = permissionsManager.hasPermissions(cameraPermission) @@ -99,6 +109,7 @@ class PanFragment : BaseFragment(), View.OnClickListe binding.saveTv.setOnClickListener(this) binding.retakeTv.setOnClickListener(this) binding.cameraCaptureIv.setOnClickListener(this) + binding.filterImg.setOnClickListener(this) } private fun initObservers() { @@ -152,6 +163,10 @@ class PanFragment : BaseFragment(), View.OnClickListe binding.retakeTv.visibility = View.VISIBLE binding.cameraCaptureIv.visibility = View.GONE binding.photoIv.setImageBitmap(bitmap) + binding.camera.gone() + binding.docTitleTv.gone() + binding.docIv.gone() + binding.subDocTitleTv.gone() } private fun initBeforeScreenCapture() { @@ -161,6 +176,10 @@ class PanFragment : BaseFragment(), View.OnClickListe binding.permissionDeniedView.visibility = View.GONE binding.retakeTv.visibility = View.GONE binding.photoIv.visibility = View.GONE + binding.docTitleTv.visible() + binding.camera.visible() + binding.docIv.visible() + binding.subDocTitleTv.visible() } private fun saveButtonClick() { @@ -192,14 +211,28 @@ class PanFragment : BaseFragment(), View.OnClickListe override fun onClick(view: View?) { when (view?.id) { - R.id.camera_capture_iv -> if (permissionsManager.hasPermissions(cameraPermission) - ) capturePicture() else - permissionsManager.requestPermissions(cameraPermission) + R.id.camera_capture_iv -> askPermission(Constant.CAMERA_PERMISSION) + R.id.filterImg -> askPermission(Constant.STORAGE_PERMISSION) R.id.retake_tv -> init() R.id.save_tv -> saveButtonClick() } } + private fun askPermission(permission: String) { + when (permission) { + Constant.STORAGE_PERMISSION -> { + if (permissionsManager.hasPermissions(storagePermission) + ) openStorage() else + permissionsManager.requestPermissions(storagePermission) + } + Constant.CAMERA_PERMISSION -> { + if (permissionsManager.hasPermissions(cameraPermission) + ) capturePicture() else + permissionsManager.requestPermissions(cameraPermission) + } + } + } + private fun capturePicture() { if (binding.camera.isTakingPicture || binding.camera.preview != Preview.GL_SURFACE) return binding.camera.takePicture() @@ -217,6 +250,28 @@ class PanFragment : BaseFragment(), View.OnClickListe } } + private fun openStorage() { + getContent.launch("image/*") + } + + private val getContent = + registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> + uri?.let { it -> + val bitmap = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + ImageDecoder.decodeBitmap( + ImageDecoder.createSource( + requireContext().contentResolver, + it + ) + ) + } else { + MediaStore.Images.Media.getBitmap(requireContext().contentResolver, it) + } + initAfterScreenCapture(bitmap) + } + } + + override fun onResume() { super.onResume() if (captureImageBitmap.value == null && permissionsManager.hasPermissions(cameraPermission) && !isPermissionAlready) { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PersonalDetailFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PersonalDetailFragment.kt index a778207dc9..9f0b10ae88 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PersonalDetailFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PersonalDetailFragment.kt @@ -100,7 +100,7 @@ class PersonalDetailFragment : binding.femaleView.setProperties(getString(R.string.female), IconUtils.ICON_FEMALE) binding.otherView.setProperties(getString(R.string.other), IconUtils.ICON_OTHER) binding.singleView.setViewBackGround(true) - binding.femaleView.setViewBackGround(true) + binding.maleView.setViewBackGround(true) } private fun initListeners() { diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt index cbd1c2d923..d04cc3ed6b 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt @@ -85,6 +85,7 @@ class VideoFragment : BaseFragment(), View.OnC ) binding.permissionDeniedView.setTitle(getString(R.string.allow_camera_permission)) binding.permissionDeniedView.setBgColor(R.color.white) + binding.otpTitleTv.text = getString(R.string.recprd_say_loud) initBeforeScreenCapture() isPermissionAlready = permissionsManager.hasPermissions(cameraPermission) if (isPermissionAlready) initializeCamera() else @@ -102,12 +103,7 @@ class VideoFragment : BaseFragment(), View.OnC viewModel.otpResponse.observe(viewLifecycleOwner, { otpData -> if (otpData.otp?.length.orZero() >= 6) { openBottomSheet(otpData.otp) - binding.firstOtpTv.text = otpData.otp?.getOrNull(0).toString() - binding.secondOtpTv.text = otpData.otp?.getOrNull(1).toString() binding.thirdOtpTv.text = otpData.otp?.getOrNull(2).toString() - binding.forthOtpTv.text = otpData.otp?.getOrNull(3).toString() - binding.fiveOtpTv.text = otpData.otp?.getOrNull(4).toString() - binding.sixOtpTv.text = otpData.otp?.getOrNull(5).toString() } }) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt index 07b0e3733b..b2d6ce8021 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt @@ -57,12 +57,7 @@ class VideoOTPBottomSheet : BaseBottomSheet(), View.OnClickListener { binding.primaryAction.visibility = View.GONE } genericResponse?.otp?.let { otp -> - binding.firstOtpTv.text = otp.getOrNull(0).toString() - binding.secondOtpTv.text = otp.getOrNull(1).toString() binding.thirdOtpTv.text = otp.getOrNull(2).toString() - binding.forthOtpTv.text = otp.getOrNull(3).toString() - binding.fiveOtpTv.text = otp.getOrNull(4).toString() - binding.sixOtpTv.text = otp.getOrNull(5).toString() } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/personalDetails/AboutIncomeActivity.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/personalDetails/AboutIncomeActivity.kt index 6f6ee72522..d535406b9f 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/personalDetails/AboutIncomeActivity.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/personalDetails/AboutIncomeActivity.kt @@ -474,10 +474,13 @@ class AboutIncomeActivity : BaseActivity R.drawable.ic_pan_card_front ICON_DOCUMENT -> R.drawable.ic_kyc_documents ICON_CHAT -> R.drawable.ic_chat_svg ICON_SINGLE -> R.drawable.ic_single_svg diff --git a/navi-amc/src/main/res/drawable/ic_filter_picture.xml b/navi-amc/src/main/res/drawable/ic_filter_picture.xml new file mode 100644 index 0000000000..f4335248f3 --- /dev/null +++ b/navi-amc/src/main/res/drawable/ic_filter_picture.xml @@ -0,0 +1,34 @@ + + + + + + diff --git a/navi-amc/src/main/res/drawable/ic_pan_card_front.png b/navi-amc/src/main/res/drawable/ic_pan_card_front.png new file mode 100644 index 0000000000000000000000000000000000000000..f2969255d12e735fac18caa12a436e6146b3cf35 GIT binary patch literal 28451 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 - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/third_otp_tv" /> \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/fragment_kyc_video.xml b/navi-amc/src/main/res/layout/fragment_kyc_video.xml index 551de04365..2ba8c979a9 100644 --- a/navi-amc/src/main/res/layout/fragment_kyc_video.xml +++ b/navi-amc/src/main/res/layout/fragment_kyc_video.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + app:layout_constraintTop_toBottomOf="@+id/third_otp_tv" /> + app:layout_constraintTop_toTopOf="parent" + tools:text="@string/recprd_say_loud" /> - - - - - - - - - + android:textColor="@color/black" + android:textSize="@dimen/_32sp" + app:layout_constraintEnd_toEndOf="@id/otp_title_tv" + app:layout_constraintStart_toStartOf="@id/otp_title_tv" + app:layout_constraintTop_toBottomOf="@+id/otp_title_tv" + tools:text="8" /> diff --git a/navi-amc/src/main/res/layout/fragment_pan.xml b/navi-amc/src/main/res/layout/fragment_pan.xml index e829b64c25..c1b15e220c 100644 --- a/navi-amc/src/main/res/layout/fragment_pan.xml +++ b/navi-amc/src/main/res/layout/fragment_pan.xml @@ -2,113 +2,164 @@ - + android:fillViewport="true"> - - - - - + android:layout_height="match_parent" + android:padding="@dimen/_16dp"> - + - + - + - - + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/navi-amc/src/main/res/values/dimens.xml b/navi-amc/src/main/res/values/dimens.xml index c771c81a9b..83050a7cea 100644 --- a/navi-amc/src/main/res/values/dimens.xml +++ b/navi-amc/src/main/res/values/dimens.xml @@ -65,6 +65,7 @@ 20sp 24sp 28sp + 32sp 48dp diff --git a/navi-amc/src/main/res/values/strings.xml b/navi-amc/src/main/res/values/strings.xml index c4f8a7735c..69758d02d4 100644 --- a/navi-amc/src/main/res/values/strings.xml +++ b/navi-amc/src/main/res/values/strings.xml @@ -546,6 +546,8 @@ Tips for great video Retake video Complete your account setup\nto invest in Navi + Front side of the PAN card + ICICI BANK HDFC BANK From 260cbe1e6d9d639272355513fe72a667f5c403be Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Thu, 28 Oct 2021 19:59:42 +0530 Subject: [PATCH 51/53] resolved conflicts --- .../ui/kyc/fragments/PanFragment.kt | 31 +++++++++---------- .../ui/kyc/fragments/VideoFragment.kt | 2 +- .../ui/kyc/fragments/VideoOTPBottomSheet.kt | 2 +- .../navi/amc/investorapp/util/IconUtils.kt | 2 +- ...married_new.xml => ic_married_new_svg.xml} | 0 ...ml => ic_scheme_information_small_svg.xml} | 0 .../main/res/layout/activity_about_income.xml | 2 +- .../res/layout/bottom_sheet_video_otp.xml | 4 +-- .../main/res/layout/fragment_home_screen.xml | 20 ------------ .../main/res/layout/fragment_kyc_video.xml | 4 +-- .../main/res/layout/mutualfund_activity.xml | 2 +- 11 files changed, 23 insertions(+), 46 deletions(-) rename navi-amc/src/main/res/drawable/{married_new.xml => ic_married_new_svg.xml} (100%) rename navi-amc/src/main/res/drawable/{ic_scheme_information_small.xml => ic_scheme_information_small_svg.xml} (100%) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt index 648e85abaf..3d00b88281 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt @@ -211,28 +211,25 @@ class PanFragment : BaseFragment(), View.OnClickListe override fun onClick(view: View?) { when (view?.id) { - R.id.camera_capture_iv -> askPermission(Constant.CAMERA_PERMISSION) - R.id.filterImg -> askPermission(Constant.STORAGE_PERMISSION) + R.id.camera_capture_iv -> { + if (permissionsManager.hasPermissions(cameraPermission)) + openStorage() + else { + permissionsManager.requestPermissions(cameraPermission) + } + } + R.id.filterImg -> { + if (permissionsManager.hasPermissions(storagePermission)) + capturePicture() + else { + permissionsManager.requestPermissions(storagePermission) + } + } R.id.retake_tv -> init() R.id.save_tv -> saveButtonClick() } } - private fun askPermission(permission: String) { - when (permission) { - Constant.STORAGE_PERMISSION -> { - if (permissionsManager.hasPermissions(storagePermission) - ) openStorage() else - permissionsManager.requestPermissions(storagePermission) - } - Constant.CAMERA_PERMISSION -> { - if (permissionsManager.hasPermissions(cameraPermission) - ) capturePicture() else - permissionsManager.requestPermissions(cameraPermission) - } - } - } - private fun capturePicture() { if (binding.camera.isTakingPicture || binding.camera.preview != Preview.GL_SURFACE) return binding.camera.takePicture() diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt index d04cc3ed6b..6c627990c9 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoFragment.kt @@ -103,7 +103,7 @@ class VideoFragment : BaseFragment(), View.OnC viewModel.otpResponse.observe(viewLifecycleOwner, { otpData -> if (otpData.otp?.length.orZero() >= 6) { openBottomSheet(otpData.otp) - binding.thirdOtpTv.text = otpData.otp?.getOrNull(2).toString() + binding.otpTv.text = otpData.otp?.getOrNull(2).toString() } }) } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt index b2d6ce8021..c917b308ab 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/VideoOTPBottomSheet.kt @@ -57,7 +57,7 @@ class VideoOTPBottomSheet : BaseBottomSheet(), View.OnClickListener { binding.primaryAction.visibility = View.GONE } genericResponse?.otp?.let { otp -> - binding.thirdOtpTv.text = otp.getOrNull(2).toString() + binding.otpTv.text = otp.getOrNull(2).toString() } } diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt index 79edf4dab3..59216aba0d 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/util/IconUtils.kt @@ -60,7 +60,7 @@ object IconUtils { ICON_DOCUMENT -> R.drawable.ic_kyc_documents ICON_CHAT -> R.drawable.ic_chat_svg ICON_SINGLE -> R.drawable.ic_single_svg - ICON_MARRIED -> R.drawable.married_new + ICON_MARRIED -> R.drawable.ic_married_new_svg ICON_OTHER -> R.drawable.ic_other_svg ICON_MALE -> R.drawable.ic_male_svg ICON_FEMALE -> R.drawable.ic_female_svg diff --git a/navi-amc/src/main/res/drawable/married_new.xml b/navi-amc/src/main/res/drawable/ic_married_new_svg.xml similarity index 100% rename from navi-amc/src/main/res/drawable/married_new.xml rename to navi-amc/src/main/res/drawable/ic_married_new_svg.xml diff --git a/navi-amc/src/main/res/drawable/ic_scheme_information_small.xml b/navi-amc/src/main/res/drawable/ic_scheme_information_small_svg.xml similarity index 100% rename from navi-amc/src/main/res/drawable/ic_scheme_information_small.xml rename to navi-amc/src/main/res/drawable/ic_scheme_information_small_svg.xml diff --git a/navi-amc/src/main/res/layout/activity_about_income.xml b/navi-amc/src/main/res/layout/activity_about_income.xml index 91ca21fa6e..0f0e93251e 100644 --- a/navi-amc/src/main/res/layout/activity_about_income.xml +++ b/navi-amc/src/main/res/layout/activity_about_income.xml @@ -200,7 +200,7 @@ android:id="@+id/ivMarried" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/married_new" + android:src="@drawable/ic_married_new_svg" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/navi-amc/src/main/res/layout/bottom_sheet_video_otp.xml b/navi-amc/src/main/res/layout/bottom_sheet_video_otp.xml index ee9129c393..5f3f91d922 100644 --- a/navi-amc/src/main/res/layout/bottom_sheet_video_otp.xml +++ b/navi-amc/src/main/res/layout/bottom_sheet_video_otp.xml @@ -50,7 +50,7 @@ + app:layout_constraintTop_toBottomOf="@+id/otp_tv" /> \ No newline at end of file diff --git a/navi-amc/src/main/res/layout/fragment_home_screen.xml b/navi-amc/src/main/res/layout/fragment_home_screen.xml index 7dbdb09f1c..f5db81b479 100644 --- a/navi-amc/src/main/res/layout/fragment_home_screen.xml +++ b/navi-amc/src/main/res/layout/fragment_home_screen.xml @@ -526,26 +526,6 @@ - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/otp_tv" /> From b57d87aa6f9b4221a989eb8ced5aec31a920252b Mon Sep 17 00:00:00 2001 From: Devendra Singh Date: Thu, 28 Oct 2021 20:14:45 +0530 Subject: [PATCH 52/53] pan card changes --- .../com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt index 3d00b88281..b47b9c0db5 100644 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/ui/kyc/fragments/PanFragment.kt @@ -213,14 +213,14 @@ class PanFragment : BaseFragment(), View.OnClickListe when (view?.id) { R.id.camera_capture_iv -> { if (permissionsManager.hasPermissions(cameraPermission)) - openStorage() + capturePicture() else { permissionsManager.requestPermissions(cameraPermission) } } R.id.filterImg -> { if (permissionsManager.hasPermissions(storagePermission)) - capturePicture() + openStorage() else { permissionsManager.requestPermissions(storagePermission) } From 03322d3a419a9aa93b17753d5968cc45c962cc94 Mon Sep 17 00:00:00 2001 From: Shankar Yadav Date: Fri, 29 Oct 2021 18:49:12 +0530 Subject: [PATCH 53/53] Convert java file into kotlin --- .../drawerControllers/ControlTimedPoints.java | 14 - .../drawerControllers/ControlTimedPoints.kt | 11 + .../drawerControllers/CurveBezier.java | 49 -- .../drawerControllers/CurveBezier.kt | 52 ++ .../drawerControllers/TimedPoint.java | 24 - .../signature/drawerControllers/TimedPoint.kt | 31 + .../signature/svgUtils/SvgBuilder.java | 76 -- .../signature/svgUtils/SvgBuilder.kt | 68 ++ .../signature/svgUtils/SvgPathBuilder.java | 73 -- .../signature/svgUtils/SvgPathBuilder.kt | 69 ++ .../signature/svgUtils/SvgPoint.java | 56 -- .../signature/svgUtils/SvgPoint.kt | 52 ++ .../signature/ui/SilkySignaturePad.java | 651 ------------------ .../signature/ui/SilkySignaturePad.kt | 567 +++++++++++++++ .../signature/viewHelper/ViewCompat.java | 15 - .../signature/viewHelper/ViewCompat.kt | 14 + .../viewHelper/ViewTreeObserverCompat.java | 20 - .../viewHelper/ViewTreeObserverCompat.kt | 20 + 18 files changed, 884 insertions(+), 978 deletions(-) delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.kt delete mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java create mode 100644 navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.kt diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java deleted file mode 100644 index 1d80f182a4..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.navi.amc.investorapp.signature.drawerControllers; - -public class ControlTimedPoints { - - public TimedPoint c1; - public TimedPoint c2; - - public ControlTimedPoints set(TimedPoint c1, TimedPoint c2) { - this.c1 = c1; - this.c2 = c2; - return this; - } - -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.kt new file mode 100644 index 0000000000..7fd8d90429 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/ControlTimedPoints.kt @@ -0,0 +1,11 @@ +package com.navi.amc.investorapp.signature.drawerControllers + +class ControlTimedPoints { + var c1: TimedPoint? = null + var c2: TimedPoint? = null + fun set(c1: TimedPoint?, c2: TimedPoint?): ControlTimedPoints { + this.c1 = c1 + this.c2 = c2 + return this + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java deleted file mode 100644 index 594580c264..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.navi.amc.investorapp.signature.drawerControllers; - -public class CurveBezier { - - public TimedPoint startPoint; - public TimedPoint control1; - public TimedPoint control2; - public TimedPoint endPoint; - - public CurveBezier set(TimedPoint startPoint, TimedPoint control1, - TimedPoint control2, TimedPoint endPoint) { - this.startPoint = startPoint; - this.control1 = control1; - this.control2 = control2; - this.endPoint = endPoint; - return this; - } - - public float length() { - int steps = 10; - float length = 0; - double cx, cy, px = 0, py = 0, xDiff, yDiff; - - for (int i = 0; i <= steps; i++) { - float t = (float) i / steps; - cx = point(t, this.startPoint.x, this.control1.x, - this.control2.x, this.endPoint.x); - cy = point(t, this.startPoint.y, this.control1.y, - this.control2.y, this.endPoint.y); - if (i > 0) { - xDiff = cx - px; - yDiff = cy - py; - length += Math.sqrt(xDiff * xDiff + yDiff * yDiff); - } - px = cx; - py = cy; - } - return length; - - } - - public double point(float t, float start, float c1, float c2, float end) { - return start * (1.0 - t) * (1.0 - t) * (1.0 - t) - + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t - + 3.0 * c2 * (1.0 - t) * t * t - + end * t * t * t; - } - -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.kt new file mode 100644 index 0000000000..b03fd5695f --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/CurveBezier.kt @@ -0,0 +1,52 @@ +package com.navi.amc.investorapp.signature.drawerControllers + +class CurveBezier { + var startPoint: TimedPoint? = null + var control1: TimedPoint? = null + var control2: TimedPoint? = null + var endPoint: TimedPoint? = null + operator fun set( + startPoint: TimedPoint?, control1: TimedPoint?, + control2: TimedPoint?, endPoint: TimedPoint? + ): CurveBezier { + this.startPoint = startPoint + this.control1 = control1 + this.control2 = control2 + this.endPoint = endPoint + return this + } + + fun length(): Float { + val steps = 10 + var length = 0f + var cx: Double + var cy: Double + var px = 0.0 + var py = 0.0 + var xDiff: Double + var yDiff: Double + for (i in 0..steps) { + val t = i.toFloat() / steps + cx = point( + t, startPoint!!.x, control1!!.x, + control2!!.x, endPoint!!.x + ) + cy = point( + t, startPoint!!.y, control1!!.y, + control2!!.y, endPoint!!.y + ) + if (i > 0) { + xDiff = cx - px + yDiff = cy - py + length += Math.sqrt(xDiff * xDiff + yDiff * yDiff).toFloat() + } + px = cx + py = cy + } + return length + } + + fun point(t: Float, start: Float, c1: Float, c2: Float, end: Float): Double { + return start * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * c1 * (1.0 - t) * (1.0 - t) * t + 3.0 * c2 * (1.0 - t) * t * t + end * t * t * t + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java deleted file mode 100644 index bfeb4d723f..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.navi.amc.investorapp.signature.drawerControllers; - -public class TimedPoint { - public float x; - public float y; - public long timestamp; - - public TimedPoint set(float x, float y) { - this.x = x; - this.y = y; - this.timestamp = System.currentTimeMillis(); - return this; - } - - public float velocityFrom(TimedPoint start) { - float velocity = distanceTo(start) / (this.timestamp - start.timestamp); - if (velocity != velocity) return 0f; - return velocity; - } - - public float distanceTo(TimedPoint point) { - return (float) Math.sqrt(Math.pow(point.x - this.x, 2) + Math.pow(point.y - this.y, 2)); - } -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.kt new file mode 100644 index 0000000000..353b0d20b9 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/drawerControllers/TimedPoint.kt @@ -0,0 +1,31 @@ +package com.navi.amc.investorapp.signature.drawerControllers + +import com.navi.amc.investorapp.util.orZero + +class TimedPoint { + @JvmField + var x = 0f + @JvmField + var y = 0f + var timestamp: Long = 0 + operator fun set(x: Float, y: Float): TimedPoint { + this.x = x + this.y = y + timestamp = System.currentTimeMillis() + return this + } + + fun velocityFrom(start: TimedPoint?): Float { + val velocity = distanceTo(start) / (timestamp - start?.timestamp.orZero()) + return if (velocity != velocity) 0f else velocity + } + + fun distanceTo(point: TimedPoint?): Float { + return Math.sqrt( + Math.pow((point?.x.orZero() - x).toDouble(), 2.0) + Math.pow( + (point?.y.orZero() - y).toDouble(), + 2.0 + ) + ).toFloat() + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java deleted file mode 100644 index e4a2885ca9..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.navi.amc.investorapp.signature.svgUtils; - -import com.navi.amc.investorapp.signature.drawerControllers.CurveBezier; - -public class SvgBuilder { - - private final StringBuilder mSvgPathsBuilder = new StringBuilder(); - private SvgPathBuilder mCurrentPathBuilder = null; - - public SvgBuilder() { - } - - public void clear() { - mSvgPathsBuilder.setLength(0); - mCurrentPathBuilder = null; - } - - public String build(final int width, final int height) { - if (isPathStarted()) { - appendCurrentPath(); - } - return (new StringBuilder()) - .append("\n") - .append("") - .append("") - .append(mSvgPathsBuilder) - .append("") - .append("") - .toString(); - } - - public SvgBuilder append(final CurveBezier curve, final float strokeWidth) { - final Integer roundedStrokeWidth = Math.round(strokeWidth); - final SvgPoint curveStartSvgPoint = new SvgPoint(curve.startPoint); - final SvgPoint curveControlSvgPoint1 = new SvgPoint(curve.control1); - final SvgPoint curveControlSvgPoint2 = new SvgPoint(curve.control2); - final SvgPoint curveEndSvgPoint = new SvgPoint(curve.endPoint); - - if (!isPathStarted()) { - startNewPath(roundedStrokeWidth, curveStartSvgPoint); - } - - if (!curveStartSvgPoint.equals(mCurrentPathBuilder.getLastPoint()) - || !roundedStrokeWidth.equals(mCurrentPathBuilder.getStrokeWidth())) { - appendCurrentPath(); - startNewPath(roundedStrokeWidth, curveStartSvgPoint); - } - - mCurrentPathBuilder.append(curveControlSvgPoint1, curveControlSvgPoint2, curveEndSvgPoint); - return this; - } - - private void startNewPath(Integer roundedStrokeWidth, SvgPoint curveStartSvgPoint) { - mCurrentPathBuilder = new SvgPathBuilder(curveStartSvgPoint, roundedStrokeWidth); - } - - private void appendCurrentPath() { - mSvgPathsBuilder.append(mCurrentPathBuilder); - } - - private boolean isPathStarted() { - return mCurrentPathBuilder != null; - } - -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.kt new file mode 100644 index 0000000000..b008284d94 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgBuilder.kt @@ -0,0 +1,68 @@ +package com.navi.amc.investorapp.signature.svgUtils + +import com.navi.amc.investorapp.signature.drawerControllers.CurveBezier +import java.lang.StringBuilder + +class SvgBuilder { + private val mSvgPathsBuilder = StringBuilder() + private var mCurrentPathBuilder: SvgPathBuilder? = null + fun clear() { + mSvgPathsBuilder.setLength(0) + mCurrentPathBuilder = null + } + + fun build(width: Int, height: Int): String { + if (isPathStarted) { + appendCurrentPath() + } + return StringBuilder() + .append("\n") + .append("") + .append("") + .append(mSvgPathsBuilder) + .append("") + .append("") + .toString() + } + + fun append(curve: CurveBezier, strokeWidth: Float): SvgBuilder { + val roundedStrokeWidth = Math.round(strokeWidth) + val curveStartSvgPoint = SvgPoint(curve.startPoint) + val curveControlSvgPoint1 = SvgPoint(curve.control1) + val curveControlSvgPoint2 = SvgPoint(curve.control2) + val curveEndSvgPoint = SvgPoint(curve.endPoint) + if (!isPathStarted) { + startNewPath(roundedStrokeWidth, curveStartSvgPoint) + } + if (curveStartSvgPoint != mCurrentPathBuilder!!.lastPoint + || roundedStrokeWidth != mCurrentPathBuilder!!.strokeWidth + ) { + appendCurrentPath() + startNewPath(roundedStrokeWidth, curveStartSvgPoint) + } + mCurrentPathBuilder!!.append(curveControlSvgPoint1, curveControlSvgPoint2, curveEndSvgPoint) + return this + } + + private fun startNewPath(roundedStrokeWidth: Int, curveStartSvgPoint: SvgPoint) { + mCurrentPathBuilder = SvgPathBuilder(curveStartSvgPoint, roundedStrokeWidth) + } + + private fun appendCurrentPath() { + mSvgPathsBuilder.append(mCurrentPathBuilder) + } + + private val isPathStarted: Boolean + private get() = mCurrentPathBuilder != null +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java deleted file mode 100644 index 25bbf8be86..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.navi.amc.investorapp.signature.svgUtils; - -public class SvgPathBuilder { - - public static final Character SVG_RELATIVE_CUBIC_BEZIER_CURVE = 'c'; - public static final Character SVG_MOVE = 'M'; - private final StringBuilder mStringBuilder; - private final Integer mStrokeWidth; - private final SvgPoint mStartPoint; - private SvgPoint mLastPoint; - - public SvgPathBuilder(final SvgPoint startPoint, final Integer strokeWidth) { - mStrokeWidth = strokeWidth; - mStartPoint = startPoint; - mLastPoint = startPoint; - mStringBuilder = new StringBuilder(); - mStringBuilder.append(SVG_RELATIVE_CUBIC_BEZIER_CURVE); - - } - - public final Integer getStrokeWidth() { - return mStrokeWidth; - } - - public final SvgPoint getLastPoint() { - return mLastPoint; - } - - public SvgPathBuilder append(final SvgPoint controlPoint1, final SvgPoint controlPoint2, final SvgPoint endPoint) { - mStringBuilder.append(makeRelativeCubicBezierCurve(controlPoint1, controlPoint2, endPoint)); - mLastPoint = endPoint; - return this; - } - - @Override - public String toString() { - return (new StringBuilder()) - .append("") - .toString(); - } - - private String makeRelativeCubicBezierCurve(final SvgPoint controlPoint1, final SvgPoint controlPoint2, final SvgPoint endPoint) { - final String sControlPoint1 = controlPoint1.toRelativeCoordinates(mLastPoint); - final String sControlPoint2 = controlPoint2.toRelativeCoordinates(mLastPoint); - final String sEndPoint = endPoint.toRelativeCoordinates(mLastPoint); - - final StringBuilder sb = new StringBuilder(); - - sb.append(sControlPoint1); - sb.append(" "); - sb.append(sControlPoint2); - sb.append(" "); - - sb.append(sEndPoint); - sb.append(" "); - - // discard zero curve - final String svg = sb.toString(); - if ("c0 0 0 0 0 0".equals(svg)) { - return ""; - } else { - return svg; - } - } -} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.kt new file mode 100644 index 0000000000..0b98d9336d --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPathBuilder.kt @@ -0,0 +1,69 @@ +package com.navi.amc.investorapp.signature.svgUtils + +import java.lang.StringBuilder + +class SvgPathBuilder(private val mStartPoint: SvgPoint, val strokeWidth: Int) { + private val mStringBuilder: StringBuilder + var lastPoint: SvgPoint + private set + + fun append( + controlPoint1: SvgPoint, + controlPoint2: SvgPoint, + endPoint: SvgPoint + ): SvgPathBuilder { + mStringBuilder.append(makeRelativeCubicBezierCurve(controlPoint1, controlPoint2, endPoint)) + lastPoint = endPoint + return this + } + + override fun toString(): String { + return StringBuilder() + .append("") + .toString() + } + + private fun makeRelativeCubicBezierCurve( + controlPoint1: SvgPoint, + controlPoint2: SvgPoint, + endPoint: SvgPoint + ): String { + val sControlPoint1 = controlPoint1.toRelativeCoordinates(lastPoint) + val sControlPoint2 = controlPoint2.toRelativeCoordinates(lastPoint) + val sEndPoint = endPoint.toRelativeCoordinates(lastPoint) + val sb = StringBuilder() + sb.append(sControlPoint1) + sb.append(" ") + sb.append(sControlPoint2) + sb.append(" ") + sb.append(sEndPoint) + sb.append(" ") + + // discard zero curve + val svg = sb.toString() + return if ("c0 0 0 0 0 0" == svg) { + "" + } else { + svg + } + } + + companion object { + const val SVG_RELATIVE_CUBIC_BEZIER_CURVE = 'c' + const val SVG_MOVE = 'M' + } + + init { + lastPoint = mStartPoint + mStringBuilder = StringBuilder() + mStringBuilder.append(SVG_RELATIVE_CUBIC_BEZIER_CURVE) + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java deleted file mode 100644 index 79dd6cf573..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.navi.amc.investorapp.signature.svgUtils; - -import com.navi.amc.investorapp.signature.drawerControllers.TimedPoint; - -class SvgPoint { - - final Integer x, y; - - public SvgPoint(TimedPoint point) { - // one optimisation is to get rid of decimals as they are mostly non-significant in the - // produced SVG image - x = Math.round(point.x); - y = Math.round(point.y); - } - - public SvgPoint(int x, int y) { - this.x = x; - this.y = y; - } - - public String toAbsoluteCoordinates() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(x); - stringBuilder.append(","); - stringBuilder.append(y); - return stringBuilder.toString(); - } - - public String toRelativeCoordinates(final SvgPoint referencePoint) { - return (new SvgPoint(x - referencePoint.x, y - referencePoint.y)).toString(); - } - - @Override - public String toString() { - return toAbsoluteCoordinates(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - SvgPoint svgPoint = (SvgPoint) o; - - if (!x.equals(svgPoint.x)) return false; - return y.equals(svgPoint.y); - - } - - @Override - public int hashCode() { - int result = x.hashCode(); - result = 31 * result + y.hashCode(); - return result; - } -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.kt new file mode 100644 index 0000000000..15b5907ba1 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/svgUtils/SvgPoint.kt @@ -0,0 +1,52 @@ +package com.navi.amc.investorapp.signature.svgUtils + +import com.navi.amc.investorapp.signature.drawerControllers.TimedPoint +import com.navi.amc.investorapp.signature.svgUtils.SvgPoint +import com.navi.amc.investorapp.util.orZero +import java.lang.StringBuilder + +class SvgPoint { + val x: Int + val y: Int + + constructor(point: TimedPoint?) { + // one optimisation is to get rid of decimals as they are mostly non-significant in the + // produced SVG image + x = Math.round(point?.x.orZero()) + y = Math.round(point?.y.orZero()) + } + + constructor(x: Int, y: Int) { + this.x = x + this.y = y + } + + fun toAbsoluteCoordinates(): String { + val stringBuilder = StringBuilder() + stringBuilder.append(x) + stringBuilder.append(",") + stringBuilder.append(y) + return stringBuilder.toString() + } + + fun toRelativeCoordinates(referencePoint: SvgPoint?): String { + return SvgPoint(x - referencePoint?.x.orZero(), y - referencePoint?.y.orZero()).toString() + } + + override fun toString(): String { + return toAbsoluteCoordinates() + } + + override fun equals(o: Any?): Boolean { + if (this === o) return true + if (o == null || javaClass != o.javaClass) return false + val svgPoint = o as SvgPoint + return if (x != svgPoint.x) false else y == svgPoint.y + } + + override fun hashCode(): Int { + var result = x.hashCode() + result = 31 * result + y.hashCode() + return result + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java deleted file mode 100644 index a3c5c20f05..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.java +++ /dev/null @@ -1,651 +0,0 @@ -package com.navi.amc.investorapp.signature.ui; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.RectF; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewTreeObserver; - -import com.navi.amc.investorapp.R; -import com.navi.amc.investorapp.signature.drawerControllers.ControlTimedPoints; -import com.navi.amc.investorapp.signature.drawerControllers.CurveBezier; -import com.navi.amc.investorapp.signature.drawerControllers.TimedPoint; -import com.navi.amc.investorapp.signature.svgUtils.SvgBuilder; -import com.navi.amc.investorapp.signature.viewHelper.ViewCompat; -import com.navi.amc.investorapp.signature.viewHelper.ViewTreeObserverCompat; - -import java.util.ArrayList; -import java.util.List; - - -public class SilkySignaturePad extends View { - //View state - private List mPoints; - private boolean mIsEmpty; - private float mLastTouchX; - private float mLastTouchY; - private float mLastVelocity; - private float mLastWidth; - private RectF mDirtyRect; - - private final SvgBuilder mSvgBuilder = new SvgBuilder(); - - // Cache - private List mPointsCache = new ArrayList<>(); - private ControlTimedPoints mControlTimedPointsCached = new ControlTimedPoints(); - private CurveBezier mCurveBezierCached = new CurveBezier(); - - //Configurable parameters - private int mMinWidth; - private int mMaxWidth; - private float mVelocityFilterWeight; - private OnSignedListener mOnSignedListener; - private boolean mClearOnDoubleClick; - - //Click values - private long mFirstClick; - private int mCountClick; - private static final int DOUBLE_CLICK_DELAY_MS = 200; - - //Default attribute values - private final int DEFAULT_ATTR_PEN_MIN_WIDTH_PX = 3; - private final int DEFAULT_ATTR_PEN_MAX_WIDTH_PX = 7; - private final int DEFAULT_ATTR_PEN_COLOR = Color.BLACK; - private final float DEFAULT_ATTR_VELOCITY_FILTER_WEIGHT = 0.9f; - private final boolean DEFAULT_ATTR_CLEAR_ON_DOUBLE_CLICK = false; - - private Paint mPaint = new Paint(); - private Bitmap mSignatureBitmap = null; - private Canvas mSignatureBitmapCanvas = null; - - public SilkySignaturePad(Context context, AttributeSet attrs) { - super(context, attrs); - - TypedArray a = context.getTheme().obtainStyledAttributes( - attrs, - R.styleable.SilkySignaturePad, - 0, 0); - - //Configurable parameters - try { - mMinWidth = a.getDimensionPixelSize(R.styleable.SilkySignaturePad_penMinWidth, convertDpToPx(DEFAULT_ATTR_PEN_MIN_WIDTH_PX)); - mMaxWidth = a.getDimensionPixelSize(R.styleable.SilkySignaturePad_penMaxWidth, convertDpToPx(DEFAULT_ATTR_PEN_MAX_WIDTH_PX)); - mPaint.setColor(a.getColor(R.styleable.SilkySignaturePad_penColor, DEFAULT_ATTR_PEN_COLOR)); - mVelocityFilterWeight = a.getFloat(R.styleable.SilkySignaturePad_velocityFilterWeight, DEFAULT_ATTR_VELOCITY_FILTER_WEIGHT); - mClearOnDoubleClick = a.getBoolean(R.styleable.SilkySignaturePad_clearOnDoubleClick, DEFAULT_ATTR_CLEAR_ON_DOUBLE_CLICK); - } finally { - a.recycle(); - } - - //Fixed parameters - mPaint.setAntiAlias(true); - mPaint.setStyle(Paint.Style.STROKE); - mPaint.setStrokeCap(Paint.Cap.ROUND); - mPaint.setStrokeJoin(Paint.Join.ROUND); - - //Dirty rectangle to update only the changed portion of the view - mDirtyRect = new RectF(); - - clear(); - } - - /** - * Set the pen color from a given resource. - * If the resource is not found, {@link Color#BLACK} is assumed. - * - * @param colorRes the color resource. - */ - public void setPenColorRes(int colorRes) { - try { - setPenColor(getResources().getColor(colorRes)); - } catch (Resources.NotFoundException ex) { - setPenColor(Color.parseColor("#000000")); - } - } - - /** - * Set the pen color from a given color. - * - * @param color the color. - */ - public void setPenColor(int color) { - mPaint.setColor(color); - } - - /** - * Set the minimum width of the stroke in pixel. - * - * @param minWidth the width in dp. - */ - public void setMinWidth(float minWidth) { - mMinWidth = convertDpToPx(minWidth); - } - - /** - * Set the maximum width of the stroke in pixel. - * - * @param maxWidth the width in dp. - */ - public void setMaxWidth(float maxWidth) { - mMaxWidth = convertDpToPx(maxWidth); - } - - /** - * Set the velocity filter weight. - * - * @param velocityFilterWeight the weight. - */ - public void setVelocityFilterWeight(float velocityFilterWeight) { - mVelocityFilterWeight = velocityFilterWeight; - } - - public void clear() { - mSvgBuilder.clear(); - mPoints = new ArrayList<>(); - mLastVelocity = 0; - mLastWidth = (mMinWidth + mMaxWidth) / 2; - - if (mSignatureBitmap != null) { - mSignatureBitmap = null; - ensureSignatureBitmap(); - } - - setIsEmpty(true); - - invalidate(); - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (!isEnabled()) - return false; - - float eventX = event.getX(); - float eventY = event.getY(); - - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - getParent().requestDisallowInterceptTouchEvent(true); - mPoints.clear(); - if (isDoubleClick()) break; - mLastTouchX = eventX; - mLastTouchY = eventY; - addPoint(getNewPoint(eventX, eventY)); - if (mOnSignedListener != null) mOnSignedListener.onStartSigning(); - - case MotionEvent.ACTION_MOVE: - resetDirtyRect(eventX, eventY); - addPoint(getNewPoint(eventX, eventY)); - break; - - case MotionEvent.ACTION_UP: - resetDirtyRect(eventX, eventY); - addPoint(getNewPoint(eventX, eventY)); - getParent().requestDisallowInterceptTouchEvent(true); - setIsEmpty(false); - break; - - default: - return false; - } - - //invalidate(); - invalidate( - (int) (mDirtyRect.left - mMaxWidth), - (int) (mDirtyRect.top - mMaxWidth), - (int) (mDirtyRect.right + mMaxWidth), - (int) (mDirtyRect.bottom + mMaxWidth)); - - return true; - } - - @Override - protected void onDraw(Canvas canvas) { - if (mSignatureBitmap != null) { - canvas.drawBitmap(mSignatureBitmap, 0, 0, mPaint); - } - } - - public void setOnSignedListener(OnSignedListener listener) { - mOnSignedListener = listener; - } - - public boolean isEmpty() { - return mIsEmpty; - } - - public String getSignatureSvg() { - int width = getTransparentSignatureBitmap().getWidth(); - int height = getTransparentSignatureBitmap().getHeight(); - return mSvgBuilder.build(width, height); - } - - public Bitmap getSignatureBitmap() { - Bitmap originalBitmap = getTransparentSignatureBitmap(); - Bitmap whiteBgBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(whiteBgBitmap); - canvas.drawColor(Color.WHITE); - canvas.drawBitmap(originalBitmap, 0, 0, null); - return whiteBgBitmap; - } - - /** - * @param compressPercentage Hint to the compressor, 0-100 percent. 0 meaning compress for - * small size, 100 meaning compress for max quality. Some - * formats, like PNG which is lossless, will ignore the - * quality setting - */ - public Bitmap getCompressedSignatureBitmap(int compressPercentage) { - - if (compressPercentage < 0) { - compressPercentage = 0; - } else if (compressPercentage > 100) { - compressPercentage = 100; - } - Bitmap originalBitmap = getTransparentSignatureBitmap(); - int originalWidth = originalBitmap.getWidth(); - int originalHeight = originalBitmap.getHeight(); - - int targetWidth = originalWidth * compressPercentage / 100; // your arbitrary fixed limit - int targetHeight = (int) (originalHeight * targetWidth / (double) originalWidth); - - Bitmap whiteBgBitmap = Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(whiteBgBitmap); - canvas.drawColor(Color.WHITE); - canvas.drawBitmap(originalBitmap, 0, 0, null); - whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); - return whiteBgBitmap; - } - - /** - * @param deiredWidth Desired width of the bitmap - */ - public Bitmap getFixedSizeSignatureBitmap(int deiredWidth) { - - Bitmap originalBitmap = getTransparentSignatureBitmap(); - int originalWidth = originalBitmap.getWidth(); - int originalHeight = originalBitmap.getHeight(); - - int targetWidth = deiredWidth; // your arbitrary fixed limit - int targetHeight = (int) (originalHeight * targetWidth / (double) originalWidth); - - Bitmap whiteBgBitmap = Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(whiteBgBitmap); - canvas.drawColor(Color.WHITE); - canvas.drawBitmap(originalBitmap, 0, 0, null); - whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); - return whiteBgBitmap; - } - - /** - * @param deiredWidth Desired width of the bitmap - */ - public Bitmap getFixedSizeSignatureBitmap(int deiredWidth,int desiredHeight) { - - Bitmap originalBitmap = getTransparentSignatureBitmap(); - int originalWidth = originalBitmap.getWidth(); - int originalHeight = originalBitmap.getHeight(); - - int targetWidth = deiredWidth; // your arbitrary fixed limit - int targetHeight = desiredHeight; - - Bitmap whiteBgBitmap = Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(whiteBgBitmap); - canvas.drawColor(Color.WHITE); - canvas.drawBitmap(originalBitmap, 0, 0, null); - whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true); - return whiteBgBitmap; - } - - public void setSignatureBitmap(final Bitmap signature) { - // View was laid out... - if (ViewCompat.isLaidOut(this)) { - clear(); - ensureSignatureBitmap(); - - RectF tempSrc = new RectF(); - RectF tempDst = new RectF(); - - int dWidth = signature.getWidth(); - int dHeight = signature.getHeight(); - int vWidth = getWidth(); - int vHeight = getHeight(); - - // Generate the required transform. - tempSrc.set(0, 0, dWidth, dHeight); - tempDst.set(0, 0, vWidth, vHeight); - - Matrix drawMatrix = new Matrix(); - drawMatrix.setRectToRect(tempSrc, tempDst, Matrix.ScaleToFit.CENTER); - - Canvas canvas = new Canvas(mSignatureBitmap); - canvas.drawBitmap(signature, drawMatrix, null); - setIsEmpty(false); - invalidate(); - } - // View not laid out yet e.g. called from onCreate(), onRestoreInstanceState()... - else { - getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - // Remove layout listener... - ViewTreeObserverCompat.removeOnGlobalLayoutListener(getViewTreeObserver(), this); - - // Signature bitmap... - setSignatureBitmap(signature); - } - }); - } - } - - public Bitmap getTransparentSignatureBitmap() { - ensureSignatureBitmap(); - return mSignatureBitmap; - } - - public Bitmap getTransparentSignatureBitmap(boolean trimBlankSpace) { - - if (!trimBlankSpace) { - return getTransparentSignatureBitmap(); - } - - ensureSignatureBitmap(); - - int imgHeight = mSignatureBitmap.getHeight(); - int imgWidth = mSignatureBitmap.getWidth(); - - int backgroundColor = Color.TRANSPARENT; - - int xMin = Integer.MAX_VALUE, - xMax = Integer.MIN_VALUE, - yMin = Integer.MAX_VALUE, - yMax = Integer.MIN_VALUE; - - boolean foundPixel = false; - - // Find xMin - for (int x = 0; x < imgWidth; x++) { - boolean stop = false; - for (int y = 0; y < imgHeight; y++) { - if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { - xMin = x; - stop = true; - foundPixel = true; - break; - } - } - if (stop) - break; - } - - // Image is empty... - if (!foundPixel) - return null; - - // Find yMin - for (int y = 0; y < imgHeight; y++) { - boolean stop = false; - for (int x = xMin; x < imgWidth; x++) { - if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { - yMin = y; - stop = true; - break; - } - } - if (stop) - break; - } - - // Find xMax - for (int x = imgWidth - 1; x >= xMin; x--) { - boolean stop = false; - for (int y = yMin; y < imgHeight; y++) { - if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { - xMax = x; - stop = true; - break; - } - } - if (stop) - break; - } - - // Find yMax - for (int y = imgHeight - 1; y >= yMin; y--) { - boolean stop = false; - for (int x = xMin; x <= xMax; x++) { - if (mSignatureBitmap.getPixel(x, y) != backgroundColor) { - yMax = y; - stop = true; - break; - } - } - if (stop) - break; - } - - return Bitmap.createBitmap(mSignatureBitmap, xMin, yMin, xMax - xMin, yMax - yMin); - } - - private boolean isDoubleClick() { - if (mClearOnDoubleClick) { - if (mFirstClick != 0 && System.currentTimeMillis() - mFirstClick > DOUBLE_CLICK_DELAY_MS) { - mCountClick = 0; - } - mCountClick++; - if (mCountClick == 1) { - mFirstClick = System.currentTimeMillis(); - } else if (mCountClick == 2) { - long lastClick = System.currentTimeMillis(); - if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS) { - this.clear(); - return true; - } - } - } - return false; - } - - private TimedPoint getNewPoint(float x, float y) { - int mCacheSize = mPointsCache.size(); - TimedPoint timedPoint; - if (mCacheSize == 0) { - // Cache is empty, create a new point - timedPoint = new TimedPoint(); - } else { - // Get point from cache - timedPoint = mPointsCache.remove(mCacheSize - 1); - } - - return timedPoint.set(x, y); - } - - private void recyclePoint(TimedPoint point) { - mPointsCache.add(point); - } - - private void addPoint(TimedPoint newPoint) { - mPoints.add(newPoint); - - int pointsCount = mPoints.size(); - if (pointsCount > 3) { - - ControlTimedPoints tmp = calculateCurveControlPoints(mPoints.get(0), mPoints.get(1), mPoints.get(2)); - TimedPoint c2 = tmp.c2; - recyclePoint(tmp.c1); - - tmp = calculateCurveControlPoints(mPoints.get(1), mPoints.get(2), mPoints.get(3)); - TimedPoint c3 = tmp.c1; - recyclePoint(tmp.c2); - - CurveBezier curve = mCurveBezierCached.set(mPoints.get(1), c2, c3, mPoints.get(2)); - - TimedPoint startPoint = curve.startPoint; - TimedPoint endPoint = curve.endPoint; - - float velocity = endPoint.velocityFrom(startPoint); - velocity = Float.isNaN(velocity) ? 0.0f : velocity; - - velocity = mVelocityFilterWeight * velocity - + (1 - mVelocityFilterWeight) * mLastVelocity; - - // The new width is a function of the velocity. Higher velocities - // correspond to thinner strokes. - float newWidth = strokeWidth(velocity); - - // The Bezier's width starts out as last curve's final width, and - // gradually changes to the stroke width just calculated. The new - // width calculation is based on the velocity between the Bezier's - // start and end mPoints. - addBezier(curve, mLastWidth, newWidth); - - mLastVelocity = velocity; - mLastWidth = newWidth; - - // Remove the first element from the list, - // so that we always have no more than 4 mPoints in mPoints array. - recyclePoint(mPoints.remove(0)); - - recyclePoint(c2); - recyclePoint(c3); - - } else if (pointsCount == 1) { - // To reduce the initial lag make it work with 3 mPoints - // by duplicating the first point - TimedPoint firstPoint = mPoints.get(0); - mPoints.add(getNewPoint(firstPoint.x, firstPoint.y)); - } - } - - private void addBezier(CurveBezier curve, float startWidth, float endWidth) { - mSvgBuilder.append(curve, (startWidth + endWidth) / 2); - ensureSignatureBitmap(); - float originalWidth = mPaint.getStrokeWidth(); - float widthDelta = endWidth - startWidth; - float drawSteps = (float) Math.floor(curve.length()); - - for (int i = 0; i < drawSteps; i++) { - // Calculate the Bezier (x, y) coordinate for this step. - float t = ((float) i) / drawSteps; - float tt = t * t; - float ttt = tt * t; - float u = 1 - t; - float uu = u * u; - float uuu = uu * u; - - float x = uuu * curve.startPoint.x; - x += 3 * uu * t * curve.control1.x; - x += 3 * u * tt * curve.control2.x; - x += ttt * curve.endPoint.x; - - float y = uuu * curve.startPoint.y; - y += 3 * uu * t * curve.control1.y; - y += 3 * u * tt * curve.control2.y; - y += ttt * curve.endPoint.y; - - // Set the incremental stroke width and draw. - mPaint.setStrokeWidth(startWidth + ttt * widthDelta); - mSignatureBitmapCanvas.drawPoint(x, y, mPaint); - expandDirtyRect(x, y); - } - - mPaint.setStrokeWidth(originalWidth); - } - - private ControlTimedPoints calculateCurveControlPoints(TimedPoint s1, TimedPoint s2, TimedPoint s3) { - float dx1 = s1.x - s2.x; - float dy1 = s1.y - s2.y; - float dx2 = s2.x - s3.x; - float dy2 = s2.y - s3.y; - - float m1X = (s1.x + s2.x) / 2.0f; - float m1Y = (s1.y + s2.y) / 2.0f; - float m2X = (s2.x + s3.x) / 2.0f; - float m2Y = (s2.y + s3.y) / 2.0f; - - float l1 = (float) Math.sqrt(dx1 * dx1 + dy1 * dy1); - float l2 = (float) Math.sqrt(dx2 * dx2 + dy2 * dy2); - - float dxm = (m1X - m2X); - float dym = (m1Y - m2Y); - float k = l2 / (l1 + l2); - if (Float.isNaN(k)) k = 0.0f; - float cmX = m2X + dxm * k; - float cmY = m2Y + dym * k; - - float tx = s2.x - cmX; - float ty = s2.y - cmY; - - return mControlTimedPointsCached.set(getNewPoint(m1X + tx, m1Y + ty), getNewPoint(m2X + tx, m2Y + ty)); - } - - private float strokeWidth(float velocity) { - return Math.max(mMaxWidth / (velocity + 1), mMinWidth); - } - - /** - * Called when replaying history to ensure the dirty region includes all - * mPoints. - * - * @param historicalX the previous x coordinate. - * @param historicalY the previous y coordinate. - */ - private void expandDirtyRect(float historicalX, float historicalY) { - if (historicalX < mDirtyRect.left) { - mDirtyRect.left = historicalX; - } else if (historicalX > mDirtyRect.right) { - mDirtyRect.right = historicalX; - } - if (historicalY < mDirtyRect.top) { - mDirtyRect.top = historicalY; - } else if (historicalY > mDirtyRect.bottom) { - mDirtyRect.bottom = historicalY; - } - } - - /** - * Resets the dirty region when the motion event occurs. - * - * @param eventX the event x coordinate. - * @param eventY the event y coordinate. - */ - private void resetDirtyRect(float eventX, float eventY) { - - // The mLastTouchX and mLastTouchY were set when the ACTION_DOWN motion event occurred. - mDirtyRect.left = Math.min(mLastTouchX, eventX); - mDirtyRect.right = Math.max(mLastTouchX, eventX); - mDirtyRect.top = Math.min(mLastTouchY, eventY); - mDirtyRect.bottom = Math.max(mLastTouchY, eventY); - } - - private void setIsEmpty(boolean newValue) { - mIsEmpty = newValue; - if (mOnSignedListener != null) { - if (mIsEmpty) { - mOnSignedListener.onClear(); - } else { - mOnSignedListener.onSigned(); - } - } - } - - private void ensureSignatureBitmap() { - if (mSignatureBitmap == null) { - mSignatureBitmap = Bitmap.createBitmap(getWidth(), getHeight(), - Bitmap.Config.ARGB_8888); - mSignatureBitmapCanvas = new Canvas(mSignatureBitmap); - } - } - - private int convertDpToPx(float dp) { - return Math.round(getContext().getResources().getDisplayMetrics().density * dp); - } -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.kt new file mode 100644 index 0000000000..61e1d6fc67 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/ui/SilkySignaturePad.kt @@ -0,0 +1,567 @@ +package com.navi.amc.investorapp.signature.ui + +import android.content.Context +import android.content.res.Resources +import android.graphics.* +import android.util.AttributeSet +import android.view.MotionEvent +import android.view.View +import com.navi.amc.investorapp.R +import com.navi.amc.investorapp.signature.drawerControllers.TimedPoint +import com.navi.amc.investorapp.signature.svgUtils.SvgBuilder +import com.navi.amc.investorapp.signature.drawerControllers.ControlTimedPoints +import com.navi.amc.investorapp.signature.drawerControllers.CurveBezier + +import java.util.ArrayList + +class SilkySignaturePad(context: Context, attrs: AttributeSet?) : View(context, attrs) { + //View state + private var mPoints: MutableList? = null + private var mIsEmpty = false + private var mLastTouchX = 0f + private var mLastTouchY = 0f + private var mLastVelocity = 0f + private var mLastWidth = 0f + private val mDirtyRect: RectF + private val mSvgBuilder = SvgBuilder() + + // Cache + private val mPointsCache: MutableList = ArrayList() + private val mControlTimedPointsCached = ControlTimedPoints() + private val mCurveBezierCached = CurveBezier() + + //Configurable parameters + private var mMinWidth = 0 + private var mMaxWidth = 0 + private var mVelocityFilterWeight = 0f + private var mOnSignedListener: OnSignedListener? = null + private var mClearOnDoubleClick = false + + //Click values + private var mFirstClick: Long = 0 + private var mCountClick = 0 + + //Default attribute values + private val DEFAULT_ATTR_PEN_MIN_WIDTH_PX = 3 + private val DEFAULT_ATTR_PEN_MAX_WIDTH_PX = 7 + private val DEFAULT_ATTR_PEN_COLOR = Color.BLACK + private val DEFAULT_ATTR_VELOCITY_FILTER_WEIGHT = 0.9f + private val DEFAULT_ATTR_CLEAR_ON_DOUBLE_CLICK = false + private val mPaint = Paint() + private var mSignatureBitmap: Bitmap? = null + private var mSignatureBitmapCanvas: Canvas? = null + + /** + * Set the pen color from a given resource. + * If the resource is not found, [Color.BLACK] is assumed. + * + * @param colorRes the color resource. + */ + fun setPenColorRes(colorRes: Int) { + try { + setPenColor(resources.getColor(colorRes)) + } catch (ex: Resources.NotFoundException) { + setPenColor(Color.parseColor("#000000")) + } + } + + /** + * Set the pen color from a given color. + * + * @param color the color. + */ + fun setPenColor(color: Int) { + mPaint.color = color + } + + /** + * Set the minimum width of the stroke in pixel. + * + * @param minWidth the width in dp. + */ + fun setMinWidth(minWidth: Float) { + mMinWidth = convertDpToPx(minWidth) + } + + /** + * Set the maximum width of the stroke in pixel. + * + * @param maxWidth the width in dp. + */ + fun setMaxWidth(maxWidth: Float) { + mMaxWidth = convertDpToPx(maxWidth) + } + + /** + * Set the velocity filter weight. + * + * @param velocityFilterWeight the weight. + */ + fun setVelocityFilterWeight(velocityFilterWeight: Float) { + mVelocityFilterWeight = velocityFilterWeight + } + + fun clear() { + mSvgBuilder.clear() + mPoints = ArrayList() + mLastVelocity = 0f + mLastWidth = ((mMinWidth + mMaxWidth) / 2).toFloat() + if (mSignatureBitmap != null) { + mSignatureBitmap = null + ensureSignatureBitmap() + } + isEmpty = true + invalidate() + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + if (!isEnabled) return false + val eventX = event.x + val eventY = event.y + when (event.action) { + MotionEvent.ACTION_DOWN -> { + parent.requestDisallowInterceptTouchEvent(true) + mPoints!!.clear() + if (isDoubleClick) return false + mLastTouchX = eventX + mLastTouchY = eventY + addPoint(getNewPoint(eventX, eventY)) + if (mOnSignedListener != null) mOnSignedListener!!.onStartSigning() + resetDirtyRect(eventX, eventY) + addPoint(getNewPoint(eventX, eventY)) + } + MotionEvent.ACTION_MOVE -> { + resetDirtyRect(eventX, eventY) + addPoint(getNewPoint(eventX, eventY)) + } + MotionEvent.ACTION_UP -> { + resetDirtyRect(eventX, eventY) + addPoint(getNewPoint(eventX, eventY)) + parent.requestDisallowInterceptTouchEvent(true) + isEmpty = false + } + else -> return false + } + + //invalidate(); + invalidate( + (mDirtyRect.left - mMaxWidth).toInt(), + (mDirtyRect.top - mMaxWidth).toInt(), + (mDirtyRect.right + mMaxWidth).toInt(), + (mDirtyRect.bottom + mMaxWidth).toInt() + ) + return true + } + + override fun onDraw(canvas: Canvas) { + if (mSignatureBitmap != null) { + canvas.drawBitmap(mSignatureBitmap!!, 0f, 0f, mPaint) + } + } + + fun setOnSignedListener(listener: OnSignedListener?) { + mOnSignedListener = listener + } + + var isEmpty: Boolean + get() = mIsEmpty + private set(newValue) { + mIsEmpty = newValue + if (mOnSignedListener != null) { + if (mIsEmpty) { + mOnSignedListener!!.onClear() + } else { + mOnSignedListener!!.onSigned() + } + } + } + val signatureSvg: String + get() { + val width = transparentSignatureBitmap!!.width + val height = transparentSignatureBitmap!!.height + return mSvgBuilder.build(width, height) + } + val signatureBitmap: Bitmap + get() { + val originalBitmap = transparentSignatureBitmap + val whiteBgBitmap = Bitmap.createBitmap( + originalBitmap!!.width, originalBitmap.height, Bitmap.Config.ARGB_8888 + ) + val canvas = Canvas(whiteBgBitmap) + canvas.drawColor(Color.WHITE) + canvas.drawBitmap(originalBitmap, 0f, 0f, null) + return whiteBgBitmap + } + + /** + * @param compressPercentage Hint to the compressor, 0-100 percent. 0 meaning compress for + * small size, 100 meaning compress for max quality. Some + * formats, like PNG which is lossless, will ignore the + * quality setting + */ + fun getCompressedSignatureBitmap(compressPercentage: Int): Bitmap { + var compressPercentage = compressPercentage + if (compressPercentage < 0) { + compressPercentage = 0 + } else if (compressPercentage > 100) { + compressPercentage = 100 + } + val originalBitmap = transparentSignatureBitmap + val originalWidth = originalBitmap!!.width + val originalHeight = originalBitmap.height + val targetWidth = originalWidth * compressPercentage / 100 // your arbitrary fixed limit + val targetHeight = (originalHeight * targetWidth / originalWidth.toDouble()).toInt() + var whiteBgBitmap = + Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888) + val canvas = Canvas(whiteBgBitmap) + canvas.drawColor(Color.WHITE) + canvas.drawBitmap(originalBitmap, 0f, 0f, null) + whiteBgBitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true) + return whiteBgBitmap + } + + /** + * @param deiredWidth Desired width of the bitmap + */ + fun getFixedSizeSignatureBitmap(deiredWidth: Int): Bitmap { + val originalBitmap = transparentSignatureBitmap + val originalWidth = originalBitmap!!.width + val originalHeight = originalBitmap.height + val targetHeight = (originalHeight * deiredWidth // your arbitrary fixed limit + / originalWidth.toDouble()).toInt() + var whiteBgBitmap = + Bitmap.createBitmap(originalWidth, originalHeight, Bitmap.Config.ARGB_8888) + val canvas = Canvas(whiteBgBitmap) + canvas.drawColor(Color.WHITE) + canvas.drawBitmap(originalBitmap, 0f, 0f, null) + whiteBgBitmap = Bitmap.createScaledBitmap( + originalBitmap, deiredWidth, targetHeight, true + ) + return whiteBgBitmap + } + + + val transparentSignatureBitmap: Bitmap? + get() { + ensureSignatureBitmap() + return mSignatureBitmap + } + + fun getTransparentSignatureBitmap(trimBlankSpace: Boolean): Bitmap? { + if (!trimBlankSpace) { + return transparentSignatureBitmap + } + ensureSignatureBitmap() + val imgHeight = mSignatureBitmap!!.height + val imgWidth = mSignatureBitmap!!.width + val backgroundColor = Color.TRANSPARENT + var xMin = Int.MAX_VALUE + var xMax = Int.MIN_VALUE + var yMin = Int.MAX_VALUE + var yMax = Int.MIN_VALUE + var foundPixel = false + + // Find xMin + for (x in 0 until imgWidth) { + var stop = false + for (y in 0 until imgHeight) { + if (mSignatureBitmap!!.getPixel(x, y) != backgroundColor) { + xMin = x + stop = true + foundPixel = true + break + } + } + if (stop) break + } + + // Image is empty... + if (!foundPixel) return null + + // Find yMin + for (y in 0 until imgHeight) { + var stop = false + for (x in xMin until imgWidth) { + if (mSignatureBitmap!!.getPixel(x, y) != backgroundColor) { + yMin = y + stop = true + break + } + } + if (stop) break + } + + // Find xMax + for (x in imgWidth - 1 downTo xMin) { + var stop = false + for (y in yMin until imgHeight) { + if (mSignatureBitmap!!.getPixel(x, y) != backgroundColor) { + xMax = x + stop = true + break + } + } + if (stop) break + } + + // Find yMax + for (y in imgHeight - 1 downTo yMin) { + var stop = false + for (x in xMin..xMax) { + if (mSignatureBitmap!!.getPixel(x, y) != backgroundColor) { + yMax = y + stop = true + break + } + } + if (stop) break + } + return Bitmap.createBitmap(mSignatureBitmap!!, xMin, yMin, xMax - xMin, yMax - yMin) + } + + private val isDoubleClick: Boolean + private get() { + if (mClearOnDoubleClick) { + if (mFirstClick != 0L && System.currentTimeMillis() - mFirstClick > DOUBLE_CLICK_DELAY_MS) { + mCountClick = 0 + } + mCountClick++ + if (mCountClick == 1) { + mFirstClick = System.currentTimeMillis() + } else if (mCountClick == 2) { + val lastClick = System.currentTimeMillis() + if (lastClick - mFirstClick < DOUBLE_CLICK_DELAY_MS) { + this.clear() + return true + } + } + } + return false + } + + private fun getNewPoint(x: Float, y: Float): TimedPoint { + val mCacheSize = mPointsCache.size + val timedPoint: TimedPoint? + timedPoint = if (mCacheSize == 0) { + // Cache is empty, create a new point + TimedPoint() + } else { + // Get point from cache + mPointsCache.removeAt(mCacheSize - 1) + } + return timedPoint!!.set(x, y) + } + + private fun recyclePoint(point: TimedPoint?) { + mPointsCache.add(point) + } + + private fun addPoint(newPoint: TimedPoint) { + mPoints!!.add(newPoint) + val pointsCount = mPoints!!.size + if (pointsCount > 3) { + var tmp = calculateCurveControlPoints(mPoints!![0], mPoints!![1], mPoints!![2]) + val c2 = tmp.c2 + recyclePoint(tmp.c1) + tmp = calculateCurveControlPoints(mPoints!![1], mPoints!![2], mPoints!![3]) + val c3 = tmp.c1 + recyclePoint(tmp.c2) + val curve = mCurveBezierCached.set(mPoints!![1], c2, c3, mPoints!![2]) + val startPoint = curve.startPoint + val endPoint = curve.endPoint + var velocity = endPoint!!.velocityFrom(startPoint) + velocity = if (java.lang.Float.isNaN(velocity)) 0.0f else velocity + velocity = (mVelocityFilterWeight * velocity + + (1 - mVelocityFilterWeight) * mLastVelocity) + + // The new width is a function of the velocity. Higher velocities + // correspond to thinner strokes. + val newWidth = strokeWidth(velocity) + + // The Bezier's width starts out as last curve's final width, and + // gradually changes to the stroke width just calculated. The new + // width calculation is based on the velocity between the Bezier's + // start and end mPoints. + addBezier(curve, mLastWidth, newWidth) + mLastVelocity = velocity + mLastWidth = newWidth + + // Remove the first element from the list, + // so that we always have no more than 4 mPoints in mPoints array. + recyclePoint(mPoints!!.removeAt(0)) + recyclePoint(c2) + recyclePoint(c3) + } else if (pointsCount == 1) { + // To reduce the initial lag make it work with 3 mPoints + // by duplicating the first point + val firstPoint = mPoints!![0] + mPoints!!.add(getNewPoint(firstPoint.x, firstPoint.y)) + } + } + + private fun addBezier(curve: CurveBezier, startWidth: Float, endWidth: Float) { + mSvgBuilder.append(curve, (startWidth + endWidth) / 2) + ensureSignatureBitmap() + val originalWidth = mPaint.strokeWidth + val widthDelta = endWidth - startWidth + val drawSteps = Math.floor(curve.length().toDouble()).toFloat() + var i = 0 + while (i < drawSteps) { + + // Calculate the Bezier (x, y) coordinate for this step. + val t = i.toFloat() / drawSteps + val tt = t * t + val ttt = tt * t + val u = 1 - t + val uu = u * u + val uuu = uu * u + var x = uuu * curve.startPoint!!.x + x += 3 * uu * t * curve.control1!!.x + x += 3 * u * tt * curve.control2!!.x + x += ttt * curve.endPoint!!.x + var y = uuu * curve.startPoint!!.y + y += 3 * uu * t * curve.control1!!.y + y += 3 * u * tt * curve.control2!!.y + y += ttt * curve.endPoint!!.y + + // Set the incremental stroke width and draw. + mPaint.strokeWidth = startWidth + ttt * widthDelta + mSignatureBitmapCanvas!!.drawPoint(x, y, mPaint) + expandDirtyRect(x, y) + i++ + } + mPaint.strokeWidth = originalWidth + } + + private fun calculateCurveControlPoints( + s1: TimedPoint, + s2: TimedPoint, + s3: TimedPoint + ): ControlTimedPoints { + val dx1 = s1.x - s2.x + val dy1 = s1.y - s2.y + val dx2 = s2.x - s3.x + val dy2 = s2.y - s3.y + val m1X = (s1.x + s2.x) / 2.0f + val m1Y = (s1.y + s2.y) / 2.0f + val m2X = (s2.x + s3.x) / 2.0f + val m2Y = (s2.y + s3.y) / 2.0f + val l1 = Math.sqrt((dx1 * dx1 + dy1 * dy1).toDouble()).toFloat() + val l2 = Math.sqrt((dx2 * dx2 + dy2 * dy2).toDouble()).toFloat() + val dxm = m1X - m2X + val dym = m1Y - m2Y + var k = l2 / (l1 + l2) + if (java.lang.Float.isNaN(k)) k = 0.0f + val cmX = m2X + dxm * k + val cmY = m2Y + dym * k + val tx = s2.x - cmX + val ty = s2.y - cmY + return mControlTimedPointsCached.set( + getNewPoint(m1X + tx, m1Y + ty), + getNewPoint(m2X + tx, m2Y + ty) + ) + } + + private fun strokeWidth(velocity: Float): Float { + return Math.max(mMaxWidth / (velocity + 1), mMinWidth.toFloat()) + } + + /** + * Called when replaying history to ensure the dirty region includes all + * mPoints. + * + * @param historicalX the previous x coordinate. + * @param historicalY the previous y coordinate. + */ + private fun expandDirtyRect(historicalX: Float, historicalY: Float) { + if (historicalX < mDirtyRect.left) { + mDirtyRect.left = historicalX + } else if (historicalX > mDirtyRect.right) { + mDirtyRect.right = historicalX + } + if (historicalY < mDirtyRect.top) { + mDirtyRect.top = historicalY + } else if (historicalY > mDirtyRect.bottom) { + mDirtyRect.bottom = historicalY + } + } + + /** + * Resets the dirty region when the motion event occurs. + * + * @param eventX the event x coordinate. + * @param eventY the event y coordinate. + */ + private fun resetDirtyRect(eventX: Float, eventY: Float) { + + // The mLastTouchX and mLastTouchY were set when the ACTION_DOWN motion event occurred. + mDirtyRect.left = Math.min(mLastTouchX, eventX) + mDirtyRect.right = Math.max(mLastTouchX, eventX) + mDirtyRect.top = Math.min(mLastTouchY, eventY) + mDirtyRect.bottom = Math.max(mLastTouchY, eventY) + } + + private fun ensureSignatureBitmap() { + if (mSignatureBitmap == null) { + mSignatureBitmap = Bitmap.createBitmap( + width, height, + Bitmap.Config.ARGB_8888 + ) + mSignatureBitmap?.let { + mSignatureBitmapCanvas = Canvas(it) + } + } + } + + private fun convertDpToPx(dp: Float): Int { + return Math.round(context.resources.displayMetrics.density * dp) + } + + companion object { + private const val DOUBLE_CLICK_DELAY_MS = 200 + } + + init { + val a = context.theme.obtainStyledAttributes( + attrs, + R.styleable.SilkySignaturePad, + 0, 0 + ) + + //Configurable parameters + try { + mMinWidth = a.getDimensionPixelSize( + R.styleable.SilkySignaturePad_penMinWidth, + convertDpToPx(DEFAULT_ATTR_PEN_MIN_WIDTH_PX.toFloat()) + ) + mMaxWidth = a.getDimensionPixelSize( + R.styleable.SilkySignaturePad_penMaxWidth, + convertDpToPx(DEFAULT_ATTR_PEN_MAX_WIDTH_PX.toFloat()) + ) + mPaint.color = a.getColor( + R.styleable.SilkySignaturePad_penColor, + DEFAULT_ATTR_PEN_COLOR + ) + mVelocityFilterWeight = a.getFloat( + R.styleable.SilkySignaturePad_velocityFilterWeight, + DEFAULT_ATTR_VELOCITY_FILTER_WEIGHT + ) + mClearOnDoubleClick = a.getBoolean( + R.styleable.SilkySignaturePad_clearOnDoubleClick, + DEFAULT_ATTR_CLEAR_ON_DOUBLE_CLICK + ) + } finally { + a.recycle() + } + + //Fixed parameters + mPaint.isAntiAlias = true + mPaint.style = Paint.Style.STROKE + mPaint.strokeCap = Paint.Cap.ROUND + mPaint.strokeJoin = Paint.Join.ROUND + + //Dirty rectangle to update only the changed portion of the view + mDirtyRect = RectF() + clear() + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java deleted file mode 100644 index 17e5187940..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.navi.amc.investorapp.signature.viewHelper; - -import android.os.Build; -import android.view.View; - -public class ViewCompat { - public static boolean isLaidOut(View view) { - // Future (API19+)... - if (Build.VERSION.SDK_INT >= 19) { - return view.isLaidOut(); - } - // Legacy... - return view.getWidth() > 0 && view.getHeight() > 0; - } -} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.kt new file mode 100644 index 0000000000..ac329f64a9 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewCompat.kt @@ -0,0 +1,14 @@ +package com.navi.amc.investorapp.signature.viewHelper + +import android.os.Build +import android.view.View + +object ViewCompat { + fun isLaidOut(view: View): Boolean { + // Future (API19+)... + return if (Build.VERSION.SDK_INT >= 19) { + view.isLaidOut + } else view.width > 0 && view.height > 0 + // Legacy... + } +} \ No newline at end of file diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java deleted file mode 100644 index d08e3d0641..0000000000 --- a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.navi.amc.investorapp.signature.viewHelper; - -import android.annotation.SuppressLint; -import android.os.Build; -import android.view.ViewTreeObserver; - -public class ViewTreeObserverCompat { - @SuppressLint("NewApi") - @SuppressWarnings("deprecation") - public static void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener victim) { - // Future (API16+)... - if (Build.VERSION.SDK_INT >= 16) { - observer.removeOnGlobalLayoutListener(victim); - } - // Legacy... - else { - observer.removeGlobalOnLayoutListener(victim); - } - } -} diff --git a/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.kt b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.kt new file mode 100644 index 0000000000..dcc5eaf292 --- /dev/null +++ b/navi-amc/src/main/java/com/navi/amc/investorapp/signature/viewHelper/ViewTreeObserverCompat.kt @@ -0,0 +1,20 @@ +package com.navi.amc.investorapp.signature.viewHelper + +import android.annotation.SuppressLint +import android.os.Build +import android.view.ViewTreeObserver + +object ViewTreeObserverCompat { + @SuppressLint("NewApi") + fun removeOnGlobalLayoutListener( + observer: ViewTreeObserver, + victim: ViewTreeObserver.OnGlobalLayoutListener? + ) { + // Future (API16+)... + if (Build.VERSION.SDK_INT >= 16) { + observer.removeOnGlobalLayoutListener(victim) + } else { + observer.removeGlobalOnLayoutListener(victim) + } + } +} \ No newline at end of file