Commit 4d59fc7a authored by shohboz's avatar shohboz

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

parent d2c1ab1a
package uz.mobiuz.mobiservice.dev.di package uz.mobiuz.mobiservice.dev.di
import android.content.Context
import androidx.room.Room
import dagger.Module import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent 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 @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
class DatabaseModule { class DatabaseModule {
// @Provides @Provides
// @Singleton @Singleton
// fun getDatabase(@ApplicationContext context: Context): AppDatabase = fun getDatabase(@ApplicationContext context: Context): RoomDatabase =
// Room.databaseBuilder(context, AppDatabase::class.java,"block").build() Room.databaseBuilder(context, RoomDatabase::class.java,"block").build()
//
// @Provides @Provides
// @Singleton @Singleton
// fun getProductDao(database: AppDatabase): ProductDao = database.productDao() 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 ...@@ -7,7 +7,9 @@ import kotlinx.coroutines.withContext
import uz.agr.sdk.core.entity.card.CardRegistration import uz.agr.sdk.core.entity.card.CardRegistration
import uz.agr.sdk.pgw_core.mobi.BaseListener import uz.agr.sdk.pgw_core.mobi.BaseListener
import uz.agr.sdk.pgw_core.mobi.MobiUz 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.SharedPref
import uz.mobiuz.mobiservice.dev.model.database.MonitoringDao
import uz.mobiuz.mobiservice.dev.network.api.ApiService import uz.mobiuz.mobiservice.dev.network.api.ApiService
import uz.mobiuz.mobiservice.dev.network.model.Customer import uz.mobiuz.mobiservice.dev.network.model.Customer
import uz.mobiuz.mobiservice.dev.network.model.UiStateObject import uz.mobiuz.mobiservice.dev.network.model.UiStateObject
...@@ -19,9 +21,16 @@ import javax.inject.Singleton ...@@ -19,9 +21,16 @@ import javax.inject.Singleton
@Singleton @Singleton
class CardRepository @Inject constructor( class CardRepository @Inject constructor(
private val apiService: ApiService, private val apiService: ApiService,
private val dao: MonitoringDao,
private val pref: SharedPref, private val pref: SharedPref,
@ApplicationContext val context: Context @ApplicationContext val context: Context
) { ) {
suspend fun addMonitoring(data:Monitoring){
withContext(Dispatchers.IO){
dao.addMonitoring(data)
}
}
} }
...@@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.SharedFlow ...@@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import uz.agr.sdk.core.entity.card.CardInfo import uz.agr.sdk.core.entity.card.CardInfo
import uz.agr.sdk.core.entity.card.CardRegistration 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.BaseListener
import uz.agr.sdk.pgw_core.mobi.MobiUz import uz.agr.sdk.pgw_core.mobi.MobiUz
import javax.inject.Inject import javax.inject.Inject
...@@ -147,5 +149,58 @@ class AuthViewModel @Inject constructor( ...@@ -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 ...@@ -18,6 +18,11 @@ import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import com.google.android.gms.auth.api.phone.SmsRetriever import com.google.android.gms.auth.api.phone.SmsRetriever
import com.google.android.material.textfield.TextInputEditText 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.R
import uz.mobiuz.mobiservice.dev.databinding.FragmentVerificationBinding import uz.mobiuz.mobiservice.dev.databinding.FragmentVerificationBinding
import uz.mobiuz.mobiservice.dev.model.SharedPref import uz.mobiuz.mobiservice.dev.model.SharedPref
...@@ -29,14 +34,9 @@ import uz.mobiuz.mobiservice.dev.ui.global.ButtonClick ...@@ -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.CONSTANTS
import uz.mobiuz.mobiservice.dev.ui.global.TextWatcherWrapper import uz.mobiuz.mobiservice.dev.ui.global.TextWatcherWrapper
import uz.mobiuz.mobiservice.dev.utils.Utils 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.hideKeyboard
import uz.mobiuz.mobiservice.dev.utils.showKeyboard 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 java.util.regex.Pattern
import javax.inject.Inject import javax.inject.Inject
...@@ -61,6 +61,11 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -61,6 +61,11 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private var cardNumber = "" private var cardNumber = ""
private var cardId = "" private var cardId = ""
private var cardExpire = "" private var cardExpire = ""
private var payCardnumber = ""
var transactionId = 0L
var payAmount = 0L
var saveCard: Boolean? = null
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -73,6 +78,12 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -73,6 +78,12 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
cardId = it.getString(CONSTANTS.CARD_ID) ?: "" cardId = it.getString(CONSTANTS.CARD_ID) ?: ""
cardNumber = it.getString(CONSTANTS.CARD_NUMBER) ?: "" cardNumber = it.getString(CONSTANTS.CARD_NUMBER) ?: ""
cardExpire = it.getString(CONSTANTS.CARD_EXPIRE) ?: "" 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) { ...@@ -109,7 +120,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
btnVerification.setOnClickListener(object : ButtonClick() { btnVerification.setOnClickListener(object : ButtonClick() {
override fun onSingleClick(v: View?) { override fun onSingleClick(v: View?) {
getLinePinCodes() getLinePinCodes()
if (checkInternet()){ if (checkInternet()) {
val auth = UserAuth(phone.filter { it.isDigit() }, null, code) val auth = UserAuth(phone.filter { it.isDigit() }, null, code)
when (type) { when (type) {
CONSTANTS.TYPE_FORGET -> { CONSTANTS.TYPE_FORGET -> {
...@@ -118,6 +129,9 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -118,6 +129,9 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
CONSTANTS.TYPE_ADD_CARD -> { CONSTANTS.TYPE_ADD_CARD -> {
viewModel.cardConfirm(cardId, getLinePinCodes()) viewModel.cardConfirm(cardId, getLinePinCodes())
} }
CONSTANTS.TYPE_ANOTHER_CARD -> {
viewModel.vendor(getLinePinCodes(),transactionId)
}
else -> { else -> {
viewModel.verification(auth) viewModel.verification(auth)
} }
...@@ -127,10 +141,15 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -127,10 +141,15 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}) })
sentCodeAgain.setOnClickListener { sentCodeAgain.setOnClickListener {
if(type == CONSTANTS.TYPE_ADD_CARD){ when (type) {
CONSTANTS.TYPE_ADD_CARD -> {
viewModel.resendSms("998949125150", cardNumber, cardExpire) viewModel.resendSms("998949125150", cardNumber, cardExpire)
}else }
viewModel.resetSmsCode(UserAuth(phone.filter { it.isDigit() })) CONSTANTS.TYPE_ANOTHER_CARD -> {
viewModel.vendorResendSms(transactionId)
}
else -> viewModel.resetSmsCode(UserAuth(phone.filter { it.isDigit() }))
}
} }
coutdownView.setOnCountdownEndListener { coutdownView.setOnCountdownEndListener {
count(false) count(false)
...@@ -139,8 +158,8 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -139,8 +158,8 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
} }
} }
private fun setVerificationCode(code:String) { private fun setVerificationCode(code: String) {
if(verificationCode.length == 6){ if (verificationCode.length == 6) {
bn.apply { bn.apply {
pin1.setText(verificationCode[0].toString()) pin1.setText(verificationCode[0].toString())
pin2.setText(verificationCode[1].toString()) pin2.setText(verificationCode[1].toString())
...@@ -154,7 +173,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -154,7 +173,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
} }
} }
private fun getLinePinCodes() :String{ private fun getLinePinCodes(): String {
bn.apply { bn.apply {
code = "" code = ""
code += pin1.text.toString() code += pin1.text.toString()
...@@ -268,9 +287,6 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -268,9 +287,6 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
viewModel.resetSmsCodeUiState.collect { viewModel.resetSmsCodeUiState.collect {
when (it) { when (it) {
is UiStateObject.SUCCESS -> { is UiStateObject.SUCCESS -> {
// showToastMessage(it.data)
// verificationCode = it.data
// setVerificationCode()
count(true) count(true)
showProgressDialog(false) showProgressDialog(false)
} }
...@@ -356,6 +372,50 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -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) { private fun count(status: Boolean) {
...@@ -406,6 +466,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) { ...@@ -406,6 +466,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
}) })
dialog.show() dialog.show()
} }
private fun startSmsUserConsent() { private fun startSmsUserConsent() {
val client = SmsRetriever.getClient(requireContext()) val client = SmsRetriever.getClient(requireContext())
client.startSmsUserConsent(null) client.startSmsUserConsent(null)
......
...@@ -3,6 +3,8 @@ package uz.mobiuz.mobiservice.dev.ui.global ...@@ -3,6 +3,8 @@ package uz.mobiuz.mobiservice.dev.ui.global
object CONSTANTS { object CONSTANTS {
const val CARD_ID = "CARD_ID" 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_NUMBER = "CARD_NUMBER"
const val CARD_EXPIRE = "CARD_EXPIRE" const val CARD_EXPIRE = "CARD_EXPIRE"
const val UNAUTHORIZED = "UNAUTHORIZED" const val UNAUTHORIZED = "UNAUTHORIZED"
...@@ -49,6 +51,7 @@ object CONSTANTS { ...@@ -49,6 +51,7 @@ object CONSTANTS {
const val TYPE_VERIFICATION = "type_verification" const val TYPE_VERIFICATION = "type_verification"
const val TYPE_FORGET = "type_forget" const val TYPE_FORGET = "type_forget"
const val TYPE_ADD_CARD = "TYPE_ADD_CARD" const val TYPE_ADD_CARD = "TYPE_ADD_CARD"
const val TYPE_ANOTHER_CARD = "TYPE_ANOTHER_CARD"
const val PIN_CODE = "PIN_CODE" const val PIN_CODE = "PIN_CODE"
const val FIRST = "first" const val FIRST = "first"
const val SERVICE = "service" 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 android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
...@@ -9,8 +9,12 @@ import androidx.fragment.app.viewModels ...@@ -9,8 +9,12 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.LinearLayoutManager
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect 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.R
import uz.mobiuz.mobiservice.dev.databinding.FragmentCardsListBinding import uz.mobiuz.mobiservice.dev.databinding.FragmentCardsListBinding
import uz.mobiuz.mobiservice.dev.databinding.FragmentMonitoringLocalBinding import uz.mobiuz.mobiservice.dev.databinding.FragmentMonitoringLocalBinding
...@@ -32,17 +36,33 @@ class MonitoringLocalFragment : BaseFragment(R.layout.fragment_monitoring_local) ...@@ -32,17 +36,33 @@ class MonitoringLocalFragment : BaseFragment(R.layout.fragment_monitoring_local)
private val viewModel: HomeViewModel by viewModels() private val viewModel: HomeViewModel by viewModels()
private val navController: NavController by lazy(LazyThreadSafetyMode.NONE) { NavHostFragment.findNavController(this) } 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?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
_bn = FragmentMonitoringLocalBinding.bind(view) _bn = FragmentMonitoringLocalBinding.bind(view)
setUpUI() setUpUI()
collects() collects()
} }
override fun setUpUI() { 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 ...@@ -3,6 +3,7 @@ package uz.mobiuz.mobiservice.dev.ui.sdk.pay.success
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
...@@ -13,6 +14,7 @@ import uz.agr.sdk.coreui.extension.showSnackMessage ...@@ -13,6 +14,7 @@ import uz.agr.sdk.coreui.extension.showSnackMessage
import uz.mobiuz.mobiservice.dev.R import uz.mobiuz.mobiservice.dev.R
import uz.mobiuz.mobiservice.dev.databinding.FragmentPaymentSuccessfulBinding import uz.mobiuz.mobiservice.dev.databinding.FragmentPaymentSuccessfulBinding
import uz.mobiuz.mobiservice.dev.ui.base.BaseFragment 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.global.CONSTANTS
import uz.mobiuz.mobiservice.dev.utils.extensions.formatCard import uz.mobiuz.mobiservice.dev.utils.extensions.formatCard
...@@ -35,6 +37,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success ...@@ -35,6 +37,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
phone = arguments?.getString(CONSTANTS.PHONE, "") ?: "" phone = arguments?.getString(CONSTANTS.PHONE, "") ?: ""
amount = arguments?.getString(CONSTANTS.PAY_AMOUNT, "0") ?: "0" amount = arguments?.getString(CONSTANTS.PAY_AMOUNT, "0") ?: "0"
saveCard = arguments?.getBoolean(CONSTANTS.PAY_SAVE_CARD) saveCard = arguments?.getBoolean(CONSTANTS.PAY_SAVE_CARD)
...@@ -51,6 +54,19 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success ...@@ -51,6 +54,19 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun setUpUI() { override fun setUpUI() {
bn.apply { 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)}" 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) etPhone.text = phone.formatPhone(minus = false)
if (saveCard == true) { if (saveCard == true) {
...@@ -67,6 +83,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success ...@@ -67,6 +83,7 @@ class PaymentSuccessfulFragment : BaseFragment(R.layout.fragment_payment_success
} }
} }
override fun collects() { override fun collects() {
} }
......
package uz.mobiuz.mobiservice.dev.ui.sdk package uz.mobiuz.mobiservice.dev.ui.sdk.payment
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
...@@ -15,7 +15,6 @@ import androidx.navigation.fragment.NavHostFragment ...@@ -15,7 +15,6 @@ import androidx.navigation.fragment.NavHostFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collect
import timber.log.Timber import timber.log.Timber
import uz.agr.mobiuz.model.system.LocaleManager
import uz.agr.mobiuz.ui.fast_action.animation.getColorCompat import uz.agr.mobiuz.ui.fast_action.animation.getColorCompat
import uz.agr.sdk.core.entity.card.CardInfo import uz.agr.sdk.core.entity.card.CardInfo
import uz.agr.sdk.core.entity.tuple.Tuple3 import uz.agr.sdk.core.entity.tuple.Tuple3
...@@ -37,6 +36,7 @@ import uz.mobiuz.mobiservice.dev.ui.base.BaseFragment ...@@ -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.ButtonClick
import uz.mobiuz.mobiservice.dev.ui.global.CONSTANTS import uz.mobiuz.mobiservice.dev.ui.global.CONSTANTS
import uz.mobiuz.mobiservice.dev.ui.home.HomeViewModel 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 uz.mobiuz.mobiservice.dev.ui.sdk.pay.SelectAnotherCard
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
...@@ -118,19 +118,7 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc ...@@ -118,19 +118,7 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
override fun collects() { 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>) { private fun setCardListAdapter(list: List<CardInfo>) {
...@@ -234,6 +222,15 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc ...@@ -234,6 +222,15 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
MobiUz.onClickPay(phoneNumber, selectedCard, vendorFormParams, requireContext(), object : VendorPayConfirm { MobiUz.onClickPay(phoneNumber, selectedCard, vendorFormParams, requireContext(), object : VendorPayConfirm {
override fun showConfirmPage(transactionId: Long, phoneNumber: String, timeOut: Int) { override fun showConfirmPage(transactionId: Long, phoneNumber: String, timeOut: Int) {
// todo Shohboz aka uchun // 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) { override fun showError(message: String) {
...@@ -245,6 +242,8 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc ...@@ -245,6 +242,8 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
} }
override fun showSuccessfulPayment(transactionId: Long) { override fun showSuccessfulPayment(transactionId: Long) {
// todo must add to local database
viewModel
navController.navigate( navController.navigate(
R.id.paymentSuccessfulFragment, R.id.paymentSuccessfulFragment,
bundleOf( bundleOf(
...@@ -257,10 +256,52 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc ...@@ -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) {}
})
}
}
})
}
MobiUz.vendorPayWithAnotherCard(cardNumber, cardExpiry, saveCard, phoneNumber, vendorFormParams, object : VendorPayConfirm { private fun payWithAnotherCard(cardNumber: String, cardExpiry: String, saveCard: Boolean, phone: String, vendorFormParams: HashMap<String, String>) {
MobiUz.vendorPayWithAnotherCard(cardNumber, cardExpiry, saveCard, phone, vendorFormParams, object : VendorPayConfirm {
override fun showConfirmPage(transactionId: Long, phoneNumber: String, timeOut: Int) { 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 // todo Shohboz aka uchun
} }
...@@ -276,7 +317,7 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc ...@@ -276,7 +317,7 @@ class ReplenishBalanceFragment : BaseFragment(R.layout.fragment_replenish_balanc
navController.navigate( navController.navigate(
R.id.paymentSuccessfulFragment, R.id.paymentSuccessfulFragment,
bundleOf( bundleOf(
CONSTANTS.PHONE to phoneNumber, CONSTANTS.PHONE to "998" + bn.etPhone.unmaskedText,
CONSTANTS.PAY_AMOUNT to amountValid, CONSTANTS.PAY_AMOUNT to amountValid,
CONSTANTS.PAY_SAVE_CARD to saveCard, CONSTANTS.PAY_SAVE_CARD to saveCard,
CONSTANTS.PAY_CARD_NUMBER to cardNumber CONSTANTS.PAY_CARD_NUMBER to cardNumber
......
<?xml version="1.0" encoding="utf-8"?> <?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" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="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="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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" /> tools:listitem="@layout/agr_mobi_uz_monitoring_item" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</FrameLayout> <include
\ No newline at end of file layout="@layout/agr_layout_empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>
...@@ -67,12 +67,12 @@ ...@@ -67,12 +67,12 @@
tools:layout="@layout/fragment_cards_list" /> tools:layout="@layout/fragment_cards_list" />
<fragment <fragment
android:id="@+id/monitoringLocalFragment" 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" android:label="fragment_monitoring_local"
tools:layout="@layout/fragment_monitoring_local" /> tools:layout="@layout/fragment_monitoring_local" />
<fragment <fragment
android:id="@+id/replenishBalanceFragment" 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" android:label="fragment_replenish_balance"
tools:layout="@layout/fragment_replenish_balance" /> tools:layout="@layout/fragment_replenish_balance" />
<fragment <fragment
...@@ -94,6 +94,7 @@ ...@@ -94,6 +94,7 @@
<fragment <fragment
android:id="@+id/verificationFragment" android:id="@+id/verificationFragment"
tools:layout="@layout/fragment_verification"
android:name="uz.mobiuz.mobiservice.dev.ui.auth.verification.VerificationFragment" android:name="uz.mobiuz.mobiservice.dev.ui.auth.verification.VerificationFragment"
android:label="MyVerificationFragment" /> 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