Commit 4d59fc7a authored by shohboz's avatar shohboz

[UPD] MUS-312, Feature, updated payment continue

parent d2c1ab1a
package uz.mobiuz.mobiservice.dev.di
import android.content.Context
import androidx.room.Room
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import uz.mobiuz.mobiservice.dev.model.database.MonitoringDao
import uz.mobiuz.mobiservice.dev.model.database.RoomDatabase
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
class DatabaseModule {
// @Provides
// @Singleton
// fun getDatabase(@ApplicationContext context: Context): AppDatabase =
// Room.databaseBuilder(context, AppDatabase::class.java,"block").build()
//
// @Provides
// @Singleton
// fun getProductDao(database: AppDatabase): ProductDao = database.productDao()
@Provides
@Singleton
fun getDatabase(@ApplicationContext context: Context): RoomDatabase =
Room.databaseBuilder(context, RoomDatabase::class.java,"block").build()
@Provides
@Singleton
fun getProductDao(database: RoomDatabase): MonitoringDao = database.monitoringDao()
}
package uz.mobiuz.mobiservice.dev.model
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "monitoring")
class Monitoring(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val date: Long = 0L,
val phone: String = "",
val amount: Long = 0L,
val pan: String = ""
)
package uz.mobiuz.mobiservice.dev.model.database
import androidx.room.*
import io.reactivex.Single
import uz.mobiuz.mobiservice.dev.model.Monitoring
/**
* Created by DostonbekIbragimov on 21/12/2021.
*/
@Dao
interface MonitoringDao {
@Query("SELECT * FROM monitoring")
fun getAllMonitoring(): Single<List<Monitoring>>
@Query("DELETE FROM monitoring")
fun deleteAllMonitoring()
@Query("SELECT * FROM monitoring WHERE id = :id")
fun getCardById(id: String): Monitoring?
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun addMonitoring(cardInfo: Monitoring): Long
@Update
fun updateMonitoring(monitoring: List<Monitoring>)
@Update
fun updateMonitoring(monitoringInfo: Monitoring)
@Delete
fun deleteMonitoring(monitoringInfo: Monitoring)
}
\ No newline at end of file
package uz.mobiuz.mobiservice.dev.model.database
import androidx.room.Database
import androidx.room.RoomDatabase
import uz.agr.mobiuz.model.entity.Monitoring
@Database(entities = [Monitoring::class], version = 1)
abstract class RoomDatabase : RoomDatabase() {
abstract fun monitoringDao(): MonitoringDao
}
......@@ -7,7 +7,9 @@ import kotlinx.coroutines.withContext
import uz.agr.sdk.core.entity.card.CardRegistration
import uz.agr.sdk.pgw_core.mobi.BaseListener
import uz.agr.sdk.pgw_core.mobi.MobiUz
import uz.mobiuz.mobiservice.dev.model.Monitoring
import uz.mobiuz.mobiservice.dev.model.SharedPref
import uz.mobiuz.mobiservice.dev.model.database.MonitoringDao
import uz.mobiuz.mobiservice.dev.network.api.ApiService
import uz.mobiuz.mobiservice.dev.network.model.Customer
import uz.mobiuz.mobiservice.dev.network.model.UiStateObject
......@@ -19,9 +21,16 @@ import javax.inject.Singleton
@Singleton
class CardRepository @Inject constructor(
private val apiService: ApiService,
private val dao: MonitoringDao,
private val pref: SharedPref,
@ApplicationContext val context: Context
) {
suspend fun addMonitoring(data:Monitoring){
withContext(Dispatchers.IO){
dao.addMonitoring(data)
}
}
}
......@@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.launch
import uz.agr.sdk.core.entity.card.CardInfo
import uz.agr.sdk.core.entity.card.CardRegistration
import uz.agr.sdk.pgw_core.VendorPaySuccessListener
import uz.agr.sdk.pgw_core.VendorReSendCodeListener
import uz.agr.sdk.pgw_core.mobi.BaseListener
import uz.agr.sdk.pgw_core.mobi.MobiUz
import javax.inject.Inject
......@@ -147,5 +149,58 @@ class AuthViewModel @Inject constructor(
})
}
private val _vendorResendSmsUiState = MutableSharedFlow<UiStateObject<Int>>()
val vendorResendSmsUiState: SharedFlow<UiStateObject<Int>> = _vendorResendSmsUiState
fun vendorResendSms(transactionId: Long) = viewModelScope.launch {
_vendorResendSmsUiState.emit(UiStateObject.LOADING)
MobiUz.vendorReSendSmsCode(transactionId, object : VendorReSendCodeListener {
override fun showError(message: String) {
viewModelScope.launch {
_vendorResendSmsUiState.emit(UiStateObject.ERROR(message))
}
}
override fun showProgress(show: Boolean) {}
override fun showTimer(result: Int) {
viewModelScope.launch {
_vendorResendSmsUiState.emit(UiStateObject.SUCCESS(result))
}
}
})
}
private val _vendorUiState = MutableSharedFlow<UiStateObject<String>>()
val vendorUiState: SharedFlow<UiStateObject<String>> = _vendorUiState
fun vendor(code: String, transactionId: Long) = viewModelScope.launch {
_vendorUiState.emit(UiStateObject.LOADING)
MobiUz.vendorPay(code, transactionId, object : VendorPaySuccessListener {
override fun exit() {
}
override fun showError(message: String) {
viewModelScope.launch {
_vendorUiState.emit(UiStateObject.ERROR(message))
}
}
override fun showProgress(show: Boolean) {
}
override fun showSuccess(transactionId: String) {
viewModelScope.launch {
_vendorUiState.emit(UiStateObject.SUCCESS(transactionId))
}
}
})
}
}
\ No newline at end of file
......@@ -18,6 +18,11 @@ import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.google.android.gms.auth.api.phone.SmsRetriever
import com.google.android.material.textfield.TextInputEditText
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import uz.agr.mobiuz.extension.SmsBroadcastReceiver
import uz.agr.mobiuz.ui.dialog.MessageDialog
import uz.agr.sdk.coreui.extension.hideSoftInput
import uz.mobiuz.mobiservice.dev.R
import uz.mobiuz.mobiservice.dev.databinding.FragmentVerificationBinding
import uz.mobiuz.mobiservice.dev.model.SharedPref
......@@ -29,14 +34,9 @@ import uz.mobiuz.mobiservice.dev.ui.global.ButtonClick
import uz.mobiuz.mobiservice.dev.ui.global.CONSTANTS
import uz.mobiuz.mobiservice.dev.ui.global.TextWatcherWrapper
import uz.mobiuz.mobiservice.dev.utils.Utils
import uz.mobiuz.mobiservice.dev.utils.extensions.*
import uz.mobiuz.mobiservice.dev.utils.hideKeyboard
import uz.mobiuz.mobiservice.dev.utils.showKeyboard
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import uz.agr.mobiuz.extension.SmsBroadcastReceiver
import uz.agr.mobiuz.ui.dialog.MessageDialog
import uz.agr.sdk.coreui.extension.hideSoftInput
import uz.mobiuz.mobiservice.dev.utils.extensions.*
import java.util.regex.Pattern
import javax.inject.Inject
......@@ -61,6 +61,11 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private var cardNumber = ""
private var cardId = ""
private var cardExpire = ""
private var payCardnumber = ""
var transactionId = 0L
var payAmount = 0L
var saveCard: Boolean? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -73,6 +78,12 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
cardId = it.getString(CONSTANTS.CARD_ID) ?: ""
cardNumber = it.getString(CONSTANTS.CARD_NUMBER) ?: ""
cardExpire = it.getString(CONSTANTS.CARD_EXPIRE) ?: ""
payCardnumber = it.getString(CONSTANTS.PAY_CARD_NUMBER) ?: ""
transactionId = it.getLong(CONSTANTS.TRANSACTION_ID)
saveCard = it.getBoolean(CONSTANTS.SAVED_CARD)
payAmount = it.getLong(CONSTANTS.PAY_AMOUNT)
}
}
......@@ -109,7 +120,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
btnVerification.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) {
getLinePinCodes()
if (checkInternet()){
if (checkInternet()) {
val auth = UserAuth(phone.filter { it.isDigit() }, null, code)
when (type) {
CONSTANTS.TYPE_FORGET -> {
......@@ -118,6 +129,9 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
CONSTANTS.TYPE_ADD_CARD -> {
viewModel.cardConfirm(cardId, getLinePinCodes())
}
CONSTANTS.TYPE_ANOTHER_CARD -> {
viewModel.vendor(getLinePinCodes(),transactionId)
}
else -> {
viewModel.verification(auth)
}
......@@ -127,10 +141,15 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
})
sentCodeAgain.setOnClickListener {
if(type == CONSTANTS.TYPE_ADD_CARD){
viewModel.resendSms("998949125150", cardNumber, cardExpire)
}else
viewModel.resetSmsCode(UserAuth(phone.filter { it.isDigit() }))
when (type) {
CONSTANTS.TYPE_ADD_CARD -> {
viewModel.resendSms("998949125150", cardNumber, cardExpire)
}
CONSTANTS.TYPE_ANOTHER_CARD -> {
viewModel.vendorResendSms(transactionId)
}
else -> viewModel.resetSmsCode(UserAuth(phone.filter { it.isDigit() }))
}
}
coutdownView.setOnCountdownEndListener {
count(false)
......@@ -139,8 +158,8 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}
}
private fun setVerificationCode(code:String) {
if(verificationCode.length == 6){
private fun setVerificationCode(code: String) {
if (verificationCode.length == 6) {
bn.apply {
pin1.setText(verificationCode[0].toString())
pin2.setText(verificationCode[1].toString())
......@@ -154,7 +173,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}
}
private fun getLinePinCodes() :String{
private fun getLinePinCodes(): String {
bn.apply {
code = ""
code += pin1.text.toString()
......@@ -247,7 +266,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
is UiStateObject.SUCCESS -> {
showProgressDialog(false)
pref.userPhone = phone
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
navController.navigate(R.id.installPinFragment, bundleOf(CONSTANTS.TYPE_PIN to CONSTANTS.NEW_PIN), Utils.navOptions())
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
......@@ -268,9 +287,6 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
viewModel.resetSmsCodeUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
// showToastMessage(it.data)
// verificationCode = it.data
// setVerificationCode()
count(true)
showProgressDialog(false)
}
......@@ -356,6 +372,50 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.vendorUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
navController.navigate(
R.id.paymentSuccessfulFragment,
bundleOf(
CONSTANTS.PHONE to phone,
CONSTANTS.PAY_AMOUNT to payAmount,
CONSTANTS.PAY_SAVE_CARD to saveCard,
CONSTANTS.PAY_CARD_NUMBER to cardNumber
)
)
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.vendorResendSmsUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
count(true)
showProgressDialog(false)
}
is UiStateObject.ERROR -> {
showProgressDialog(false)
showMessage(it.message)
}
is UiStateObject.LOADING -> {
showProgressDialog(true)
}
else -> Unit
}
}
}
}
private fun count(status: Boolean) {
......@@ -406,6 +466,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
})
dialog.show()
}
private fun startSmsUserConsent() {
val client = SmsRetriever.getClient(requireContext())
client.startSmsUserConsent(null)
......
......@@ -3,6 +3,8 @@ package uz.mobiuz.mobiservice.dev.ui.global
object CONSTANTS {
const val CARD_ID = "CARD_ID"
const val TRANSACTION_ID = "TRANSACTION_ID"
const val SAVED_CARD = "SAVED_CARD"
const val CARD_NUMBER = "CARD_NUMBER"
const val CARD_EXPIRE = "CARD_EXPIRE"
const val UNAUTHORIZED = "UNAUTHORIZED"
......@@ -49,6 +51,7 @@ object CONSTANTS {
const val TYPE_VERIFICATION = "type_verification"
const val TYPE_FORGET = "type_forget"
const val TYPE_ADD_CARD = "TYPE_ADD_CARD"
const val TYPE_ANOTHER_CARD = "TYPE_ANOTHER_CARD"
const val PIN_CODE = "PIN_CODE"
const val FIRST = "first"
const val SERVICE = "service"
......
package uz.mobiuz.mobiservice.dev.ui.sdk.history
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.launch
import uz.agr.sdk.core.entity.card.CardInfo
import uz.agr.sdk.pgw_core.mobi.CardListenerMobi
import uz.agr.sdk.pgw_core.mobi.MobiUz
import uz.mobiuz.mobiservice.dev.model.Monitoring
import uz.mobiuz.mobiservice.dev.network.model.UiStateList
import uz.mobiuz.mobiservice.dev.network.repository.CardRepository
import uz.mobiuz.mobiservice.dev.network.repository.MainRepository
import javax.inject.Inject
@HiltViewModel
class HistoryViewModel @Inject constructor(
private val repository: CardRepository
) : ViewModel() {
fun addMonitoring(data: Monitoring) = viewModelScope.launch {
repository.addMonitoring(data)
}
private val _cardListUiState = MutableSharedFlow<UiStateList<CardInfo>>()
val cardListUiState: SharedFlow<UiStateList<CardInfo>> = _cardListUiState
fun getAllCards() = viewModelScope.launch {
_cardListUiState.emit(UiStateList.LOADING)
MobiUz.getAllCards(object : CardListenerMobi<CardInfo> {
override fun error(message: String) {
viewModelScope.launch {
_cardListUiState.emit(UiStateList.ERROR(message))
}
}
override fun loading(boolean: Boolean) {}
override fun local(localData: List<CardInfo>) {
viewModelScope.launch {
_cardListUiState.emit(UiStateList.SUCCESS(localData))
}
}
override fun server(serverData: List<CardInfo>) {
viewModelScope.launch {
_cardListUiState.emit(UiStateList.SUCCESS(serverData))
}
}
})
}
}
\ No newline at end of file
package uz.mobiuz.mobiservice.dev.ui.sdk
package uz.mobiuz.mobiservice.dev.ui.sdk.history
import android.os.Bundle
import androidx.fragment.app.Fragment
......@@ -9,8 +9,12 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import uz.agr.mobiuz.ui.history.header.HeaderItemDecoration
import uz.agr.mobiuz.ui.history.local.MonitoringAdapter
import uz.agr.sdk.pgw_core.mobi.MobiUz
import uz.mobiuz.mobiservice.dev.R
import uz.mobiuz.mobiservice.dev.databinding.FragmentCardsListBinding
import uz.mobiuz.mobiservice.dev.databinding.FragmentMonitoringLocalBinding
......@@ -32,17 +36,33 @@ class MonitoringLocalFragment : BaseFragment(R.layout.fragment_monitoring_local)
private val viewModel: HomeViewModel by viewModels()
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) }
private val adapter: MonitoringAdapter by lazy { MonitoringAdapter() }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentMonitoringLocalBinding.bind(view)
setUpUI()
collects()
}
override fun setUpUI() {
bn.apply {
toolbar.setNavigationOnClickListener {
navController.navigateUp()
}
recyclerView.apply {
layoutManager = LinearLayoutManager(context)
setHasFixedSize(true)
adapter = adapter
addItemDecoration(HeaderItemDecoration(this) { itemPosition ->
if (itemPosition >= 0 && itemPosition < adapter!!.itemCount) {
(adapter as MonitoringAdapter).isHeaderItem(itemPosition)
} else false
})
}
}
}
......
......@@ -3,6 +3,7 @@ package uz.mobiuz.mobiservice.dev.ui.sdk.pay.success
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
......@@ -13,6 +14,7 @@ import uz.agr.sdk.coreui.extension.showSnackMessage
import uz.mobiuz.mobiservice.dev.R
import uz.mobiuz.mobiservice.dev.databinding.FragmentPaymentSuccessfulBinding
import uz.mobiuz.mobiservice.dev.ui.base.BaseFragment
import uz.mobiuz.mobiservice.dev.ui.global.ButtonClick
import uz.mobiuz.mobiservice.dev.ui.global.CONSTANTS
import uz.mobiuz.mobiservice.dev.utils.extensions.formatCard
......@@ -35,6 +37,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
phone = arguments?.getString(CONSTANTS.PHONE, "") ?: ""
amount = arguments?.getString(CONSTANTS.PAY_AMOUNT, "0") ?: "0"
saveCard = arguments?.getBoolean(CONSTANTS.PAY_SAVE_CARD)
......@@ -51,6 +54,19 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
@SuppressLint("SetTextI18n")
override fun setUpUI() {
bn.apply {
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
navController.popBackStack(R.id.replenishBalanceFragment,false)
}
})
doneButton.setOnClickListener(object : ButtonClick(){
override fun onSingleClick(v: View?) {
navController.popBackStack(R.id.replenishBalanceFragment,false)
}
})
etAmount.text = "${amount.toLong().formattedMoney(showDecimal = false, tiyinToSum = false)} ${getString(uz.agr.mobiuz.R.string.agr_mobi_uz_curr)}"
etPhone.text = phone.formatPhone(minus = false)
if (saveCard == true) {
......@@ -67,6 +83,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
}
}
override fun collects() {
}
......
package uz.mobiuz.mobiservice.dev.ui.sdk
package uz.mobiuz.mobiservice.dev.ui.sdk.payment
import android.content.Intent
import android.net.Uri
......@@ -15,7 +15,6 @@ import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect
import timber.log.Timber
import uz.agr.mobiuz.model.system.LocaleManager
import uz.agr.mobiuz.ui.fast_action.animation.getColorCompat
import uz.agr.sdk.core.entity.card.CardInfo
import uz.agr.sdk.core.entity.tuple.Tuple3
......@@ -37,6 +36,7 @@ import uz.mobiuz.mobiservice.dev.ui.base.BaseFragment
import uz.mobiuz.mobiservice.dev.ui.global.ButtonClick
import uz.mobiuz.mobiservice.dev.ui.global.CONSTANTS
import uz.mobiuz.mobiservice.dev.ui.home.HomeViewModel
import uz.mobiuz.mobiservice.dev.ui.sdk.card.CardViewModel
import uz.mobiuz.mobiservice.dev.ui.sdk.pay.SelectAnotherCard
import java.util.*
import javax.inject.Inject
......@@ -118,19 +118,7 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
override fun collects() {
viewLifecycleOwner.lifecycleScope.launchWhenStarted {
viewModel.mainIndexUiState.collect {
when (it) {
is UiStateObject.SUCCESS -> {
}
is UiStateObject.ERROR -> {
}
is UiStateObject.LOADING -> {
}
else -> Unit
}
}
}
}
private fun setCardListAdapter(list: List<CardInfo>) {
......@@ -234,6 +222,15 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
MobiUz.onClickPay(phoneNumber, selectedCard, vendorFormParams, requireContext(), object : VendorPayConfirm {
override fun showConfirmPage(transactionId: Long, phoneNumber: String, timeOut: Int) {
// todo Shohboz aka uchun
navController.navigate(
R.id.verificationFragment,
bundleOf(
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_ANOTHER_CARD,
CONSTANTS.PHONE to "998" + bn.etPhone.unmaskedText,
CONSTANTS.PAY_AMOUNT to amountValid,
CONSTANTS.TRANSACTION_ID to transactionId
)
)
}
override fun showError(message: String) {
......@@ -245,6 +242,8 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
}
override fun showSuccessfulPayment(transactionId: Long) {
// todo must add to local database
viewModel
navController.navigate(
R.id.paymentSuccessfulFragment,
bundleOf(
......@@ -257,10 +256,52 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
}
}
private fun payWithAnotherCard(cardNumber: String, cardExpiry: String, saveCard: Boolean, phoneNumber: String, vendorFormParams: HashMap<String, String>) {
private fun deleteCard(cardNumber: String, cardExpiry: String) {
MobiUz.getLocalCards(object : BaseListener<List<CardInfo>> {
override fun error(message: String) {}
override fun loading(boolean: Boolean) {}
override fun success(data: List<CardInfo>) {
val card: CardInfo? = data.find {
it.expiry.filter { it.isDigit() } == cardExpiry.filter { it.isDigit() }
&& it.pan.replace(" ", "").substring(0, 6) == cardNumber.replace(" ", "").substring(0, 6)
&& it.pan.replace(" ", "").substring(it.pan.length - 4, it.pan.length) ==
cardNumber.replace(" ", "").substring(cardNumber.length - 4, cardNumber.length)
}
if (card != null) {
MobiUz.deleteCard(card, object : BaseListener<Boolean> {
override fun error(message: String) {}
override fun loading(boolean: Boolean) {}
override fun success(data: Boolean) {}
})
}
}
})
}
private fun payWithAnotherCard(cardNumber: String, cardExpiry: String, saveCard: Boolean, phone: String, vendorFormParams: HashMap<String, String>) {
MobiUz.vendorPayWithAnotherCard(cardNumber, cardExpiry, saveCard, phoneNumber, vendorFormParams, object : VendorPayConfirm {
MobiUz.vendorPayWithAnotherCard(cardNumber, cardExpiry, saveCard, phone, vendorFormParams, object : VendorPayConfirm {
override fun showConfirmPage(transactionId: Long, phoneNumber: String, timeOut: Int) {
var isSave = false
val responsePhone = phoneNumber.replace("+", "")
val inputPhone = phone.replace("+", "")
if (responsePhone.substring(0, 5) == inputPhone.substring(0, 5) &&
responsePhone.substring(responsePhone.length - 2, responsePhone.length) == inputPhone.substring(inputPhone.length - 2, inputPhone.length)
) isSave = true else {
deleteCard(cardNumber, cardExpiry)
}
navController.navigate(
R.id.verificationFragment,
bundleOf(
CONSTANTS.TYPE_VERIFICATION to CONSTANTS.TYPE_ANOTHER_CARD,
CONSTANTS.TRANSACTION_ID to transactionId,
CONSTANTS.PHONE to "998" + bn.etPhone.unmaskedText,
CONSTANTS.SAVED_CARD to isSave,
CONSTANTS.PAY_AMOUNT to amountValid,
CONSTANTS.PAY_CARD_NUMBER to cardNumber
)
)
// todo Shohboz aka uchun
}
......@@ -276,7 +317,7 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
navController.navigate(
R.id.paymentSuccessfulFragment,
bundleOf(
CONSTANTS.PHONE to phoneNumber,
CONSTANTS.PHONE to "998" + bn.etPhone.unmaskedText,
CONSTANTS.PAY_AMOUNT to amountValid,
CONSTANTS.PAY_SAVE_CARD to saveCard,
CONSTANTS.PAY_CARD_NUMBER to cardNumber
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.sdk.MonitoringLocalFragment">
android:background="@color/agr_grey10"
android:orientation="vertical">
<!-- TODO: Update blank fragment layout -->
<TextView
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="@style/agr_ToolbarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
app:title="@string/agr_mobi_uz_history_title"
app:navigationIcon="@drawable/agr_ic_arrow_blue"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
android:layout_height="wrap_content">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeToRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/agr_mobi_uz_monitoring_item" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</FrameLayout>
\ No newline at end of file
<include
layout="@layout/agr_layout_empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>
......@@ -67,12 +67,12 @@
tools:layout="@layout/fragment_cards_list" />
<fragment
android:id="@+id/monitoringLocalFragment"
android:name="uz.mobiuz.mobiservice.dev.ui.sdk.MonitoringLocalFragment"
android:name="uz.mobiuz.mobiservice.dev.ui.sdk.history.MonitoringLocalFragment"
android:label="fragment_monitoring_local"
tools:layout="@layout/fragment_monitoring_local" />
<fragment
android:id="@+id/replenishBalanceFragment"
android:name="uz.mobiuz.mobiservice.dev.ui.sdk.ReplenishBalanceFragment"
android:name="uz.mobiuz.mobiservice.dev.ui.sdk.payment.ReplenishBalanceFragment"
android:label="fragment_replenish_balance"
tools:layout="@layout/fragment_replenish_balance" />
<fragment
......@@ -94,6 +94,7 @@
<fragment
android:id="@+id/verificationFragment"
tools:layout="@layout/fragment_verification"
android:name="uz.mobiuz.mobiservice.dev.ui.auth.verification.VerificationFragment"
android:label="MyVerificationFragment" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment